何が起きた
Flutterで多言語化設定をしたかったので、次のようなコードを書いたところ、エラーが出ました。
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
supportedLocales: const [
Locale('en'),
Locale('ja'),
],
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
);
}
}
Unsupported operation: Cannot set value in unmodifiable Map
原因
次のようにアプリを起動していたのですが、どうも多言語化設定とinitializeDateFormatting()
が衝突しているらしく(多言語化設定時に、initializeDateFormatting()
相当の処理が行われる)、これが原因でした。
void main() {
initializeDateFormatting().then(
(dynamic _) => runApp(MyApp()),
);
}
対処方法
initializeDateFormatting()
を呼び出すのをやめるだけで、解決します。
参考資料
Flutterの多言語対応を試してみた | backport
Dart/Flutter での多言語対応あれこれ - Flutter 🇯🇵 - Medium
Issue with showDatePicker and locale · Issue #16304 · flutter/flutter · GitHub