Flutterで多言語化対応している場合において、以下のコードを書くと、Cannot modify unmodifiable mapという謎の例外が発生します。
void main() {
initializeDateFormatting().then(
(dynamic _) => runApp(MyApp()),
);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
supportedLocales: const [
Locale('en'),
Locale('ja'),
],
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
);
}
}
これでなぜCannot modify unmodifiable mapというエラーなのか。。。
対処
initializeDateFormatting()の処理が多言語化の処理とバッティングするため、initializeDateFormatting()の呼び出しを止めれば良いです。
ハマりました。
void main() {
runApp(MyApp()),
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
supportedLocales: const [
Locale('en'),
Locale('ja'),
],
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
);
}
}