Flutter 如何在用户区域设置中将一周中的所有日子都设置为字符串

Flutter 如何在用户区域设置中将一周中的所有日子都设置为字符串,flutter,Flutter,正如标题中所述:是否有一种简单的方法可以在用户区域设置中将一周中的所有日子作为字符串(在一个当然列表中)获取?执行以下操作后: import 'package:intl/date_symbol_data_local.dart'; String localeName = "pt_BR"; // "en_US" etc. initializeDateFormatting(localeName); 使用以下命令: static List<String> weekDays(String

正如标题中所述:是否有一种简单的方法可以在用户区域设置中将一周中的所有日子作为字符串(在一个当然列表中)获取?

执行以下操作后:

import 'package:intl/date_symbol_data_local.dart';

String localeName = "pt_BR"; // "en_US" etc.
initializeDateFormatting(localeName);
使用以下命令:

static List<String> weekDays(String localeName) {    
    DateFormat formatter = DateFormat(DateFormat.WEEKDAY, localeName);
    return [DateTime(2000, 1, 3, 1), DateTime(2000, 1, 4, 1), DateTime(2000, 1, 5, 1),
      DateTime(2000, 1, 6, 1), DateTime(2000, 1, 7, 1), DateTime(2000, 1, 8, 1),
      DateTime(2000, 1, 9, 1)].map((day) => formatter.format(day)).toList();
}
静态列表工作日(字符串localeName){
DateFormat formatter=DateFormat(DateFormat.WEEKDAY,localeName);
return[DateTime(2000,1,3,1),DateTime(2000,1,4,1),DateTime(2000,1,5,1),
日期时间(2000,1,6,1),日期时间(2000,1,7,1),日期时间(2000,1,8,1),
DateTime(2000,1,9,1)].map((day)=>formatter.format(day)).toList();
}
我不确定它是否符合“简单”的条件。也许这里有人能想出一个更好的答案。

我的建议是:

static List<String> getDaysOfWeek([String locale]) {
  final now = DateTime.now();
  final firstDayOfWeek = now.subtract(Duration(days: now.weekday - 1));
  return List.generate(7, (index) => index)
      .map((value) => DateFormat(DateFormat.WEEKDAY, locale)
          .format(firstDayOfWeek.add(Duration(days: value))))
      .toList();
}
静态列表getDaysOfWeek([字符串区域设置]){
final now=DateTime.now();
final firstDayOfWeek=now.subtract(持续时间(days:now.weekday-1));
返回列表。生成(7,(索引)=>索引)
.map((值)=>DateFormat(DateFormat.WEEKDAY,区域设置)
.format(firstDayOfWeek.add(持续时间(天数:值)))
.toList();
}
我们的想法是根据当前工作日定义当前工作周第一天的日期。然后从计算日期开始循环7次,每次迭代加上1天,然后收集结果。模式为DateFormat.的方法。。为了提高性能,可以使用延迟初始化。例如:

/// Returns a list of week days
static List<String> _daysOfWeek;
static List<String> get daysOfWeek {
  if (_daysOfWeek == null) {
    _daysOfWeek = getDaysOfWeek(); // Here you can specify your locale
  }
  return _daysOfWeek;
}
///返回周天数的列表
静态列表_daysOfWeek;
静态列表获取daysOfWeek{
如果(_daysOfWeek==null){
_daysOfWeek=getDaysOfWeek();//您可以在这里指定您的区域设置
}
每周返回天;
}

以防您需要使用手机设置本地化当前日期或月份

import 'dart:io';
import 'package:intl/date_symbol_data_local.dart';

final String defaultLocale = Platform.localeName; // Phone local
// String defaultLocale = "pt_BR"; // "en_US" etc. you can define yours as well

// add to init 
@override
void initState() {
  super.initState();
  initializeDateFormatting(defaultLocale);
} 

static String _getLocalizedWeekDay(String local, DateTime date) {
    final formatter = DateFormat(DateFormat.WEEKDAY, local);
    return formatter.format(date);
}

static String _getLocalizedMonth(String local, DateTime date) {
    final formatter = DateFormat(DateFormat.MONTH, local);
    return formatter.format(date);
}

使用intl软件包,我发现最简单的方法是:

import 'package:intl/intl.dart';

var days = DateFormat.EEEE(Platform.localeName).dateSymbols.STANDALONEWEEKDAYS;

print(days)  // => ["Sunday", "Monday", ..., "Saturday"]
您可以将
standalonewekdays
替换为
WEEKDAYS
,以获得句子中出现的名称(例如,某些语言中的首字母小写)


此外,您还可以分别使用
SHORTWEEKDAYS
STANDALONESHORTWEEKDAYS
获取工作日缩写。对于更短的缩写,请使用
窄工作日
标准工作日

我曾想过这样做,但这更简洁。虽然此代码片段可以解决问题,但它没有解释为什么或如何回答问题。请,因为这确实有助于提高你的文章质量。请记住,您将在将来为读者回答这个问题,这些人可能不知道您的代码建议的原因。您可以使用该按钮改进此答案,以获得更多选票和声誉!