У меня работает следующий код на флаттере:
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);
}
},
),
);
Если это так, как это исправить?