Dart DateFormat не использует локаль системы автоматически - PullRequest
1 голос
/ 09 января 2020

У меня работает следующий код на флаттере:

void main() async {
  await initializeDateFormatting();
...

 () async {
   await findSystemLocale().then((locale) {
     print(locale);
   });
   print(DateFormat.yMMMMd().format(DateTime.now()));
   print(DateFormat.MMMMd().format(DateTime.now()));   
 },

И я получаю следующие выходные данные на моем Android 9 эмуляторе:

I / флаттер (4239) : pt_BR
I / флаттер (4239): 9 января 2020 г.
I / флаттер (4239): 9 января
I / флаттер (4239): нажмите на карту!

Он правильно определяет, что система настроена как pt_BR (португальский / бразильский), но вывод такой, как если бы это был en_US.

Я могу поклясться, что изменение языка системы автоматически изменяло DateFormat вывод, но теперь его больше нет, и я не обновил код и не изменил его. Я уже пытался перезагрузить устройство, переустановить приложение, но ничего не изменилось.

Я знаю, что могу заставить locale в DateFormat, но я просто хочу узнать, как это сделать правильно и что я делаю не так.

Если я сделаю это вместо:

void main() async {
  await initializeDateFormatting();
  Intl.defaultLocale = await findSystemLocale();

Жесткая настройка defaultLocale при инициализации, она работает как положено, поэтому я предполагаю defaultLocale не загружается автоматически. Это может быть связано с тем, что я запускаю свой код в новой зоне с:

  await initializeDateFormatting();
  Intl.defaultLocale = await findSystemLocale();

  runZoned(
    () => runApp(MyApp()),
    onError: Crashlytics.instance.recordError,
    zoneSpecification: ZoneSpecification(
      print: (self, parent, zone, message) {
        if (isDebug) { // we only print in a debug build.
          parent.print(zone, message);
        }
      },
    ),
  );

Если это так, как это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...