Flutter 全局材质本地化和初始化日期格式不能一起工作

问题描述 投票:0回答:3

我在 flutter 应用程序中使用本地化,但也想使用初始化日期格式来本地化日期格式。我的主要看起来像这样...

  void main() {
    runApp(new MaterialApp(
    supportedLocales:
    [const Locale('en', 'US'),
    const Locale('en', 'AU')],
    localizationsDelegates: [
      const DemoLocalizationsDelegate(),
      GlobalMaterialLocalizations.delegate,
      GlobalWidgetsLocalizations.delegate
    ],
    home: new ThirdPageWidget(),
    navigatorObservers: [routeObserver],
    ));
 }

我还有一个像这样的有状态小部件中的initializeDateFormatting...

@override
void initState() {
   super.initState();
   initializeDateFormatting().then((_) {
      dateFormat = new DateFormat.yMd('en_AU');
      print(dateFormat.format(DateTime.now()));
});

现在,当区域设置为 en_AU 时,日期格式为美国风格的月/日/年,但是当我删除这行代码时

GlobalMaterialLocalizations.delegate,

日期正确显示日/月/年。有谁知道我可以做些什么来解决这个问题?拥有 GlobalMaterialLocalizations.delegate 有多重要?

localization dart flutter
3个回答
38
投票

我通过添加 pubspec.yaml 解决了这个问题 以下依赖项:

dependencies:
  ...
  flutter_localizations:
    sdk: flutter
  ...

小心缩进。


1
投票

我也遇到了这个问题,经过一番尝试后,发现在使用材质本地化时,如果您不指定支持的区域设置,它会默认显示为美国。

添加以下受支持的区域设置可以显示英国日期格式而不是美国日期格式。

        localizationsDelegates: [
          const DemoLocalizationsDelegate(),
          GlobalMaterialLocalizations.delegate,
          GlobalWidgetsLocalizations.delegate,
        ],
        supportedLocales: [
          const Locale('en', 'US'), // English US
          const Locale('en', 'GB'), // English UK
          // ... other locales the app supports
        ],

我不必显式初始化 DateFormat 类,因为 Material 似乎也可以处理这个问题。


0
投票

我通过在 pubspec.yaml 中添加以下依赖项解决了问题:

dependencies:
  ...
  flutter_localizations:
    sdk: flutter
  ...
© www.soinside.com 2019 - 2024. All rights reserved.