Open3

intl: DateFormat

sceneescenee

LocaleDataException: Locale data has not been initialized, call initializeDateFormatting(<locale>).

上記のエラーが発生したら、以下を実行します。

import 'package:intl/date_symbol_data_local.dart';  // ここに注意
await initializeDateFormatting();

この呼び出しでは、date_symbol_data_local.dartに定義されたシンボルデータを読み込みます。

もし、import先が、import 'package:intl/date_symbol_data_file.dart'; などと自動保管されていると、ローカルではなく、特定のファイルをからsymbol dataを読み込むメソッドになるので注意が必要です。

date_symbol_data_local.dartinitializeDateFormattingは、2つの引数を無視しますので、特に気にせず呼び出します。

/// This should be called for at least one [locale] before any date
/// formatting methods are called. It sets up the lookup for date
/// symbols. Both the [locale] and [ignored] parameter are ignored, as
/// the data for all locales is directly available.
Future<void> initializeDateFormatting([String? locale, String? ignored]) {
sceneescenee
await initializeDateFormatting()

main関数でこのメソッドを呼び出していることで、ある時から以下のエラーが発生してしまった。

Unsupported operation: Cannot set value in unmodifiable Map

これは、flutter_localizationsとのdata symbolの初期化が衝突しているからだった。

flutter_localizationsでも以下でintlのdata symbolを初期化している。

https://github.com/flutter/flutter/blob/master/packages/flutter_localizations/lib/src/utils/date_localizations.dart

こちらのコメントにある通り、localizationsDelegatesを使っているときは、intlのinitializeDateFormatting()呼び出しは必要ない。呼び出すことでエラーが発生する。

https://github.com/flutter/flutter/issues/16304#issuecomment-414205668

これは、flutter_localizationsの初期化処理が同時に発生する際にのみ起こるようで、flutter_localizationsの初期化後に、initializeDateFormatting()を呼び出してもエラーにはならなかった。