Flutterで端末内の言語設定を取得する
方法
Localizations
クラスのlocaleOf
でLocale
が取得できるので、それに対してlanguageCode
を呼び出すことで言語コードを取得することができる。
また、countryCode
で国コードを取得することもできる。
Locale locale = Localizations.localeOf(context);
print(locale); // en_US
print(locale.languageCode); // en
print(locale.countryCode); // US
使い方を間違えたことによるエラー
初めてlocaleOf
を使ったときに以下のエラーが出てしまった。
Requested the Locale of a context that does not include a Localizations ancestor.
これはMaterialApp
内のlocale
で動的にLocale
を渡そうとしてlocaleOf(context)
を使ったことが原因だった。
return MaterialApp(
localizationsDelegates: const [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [
Locale('en'),
Locale('ja'),
],
locale: // ここでlocaleOf(context)を呼び出そうとしてしまうことでエラー
home: // ここ以下のWidgetで呼び出す必要があった
);
MaterialApp
の階層のcontext
にはLocalizationの情報がまだないため、そこでlocaleOf(context)
を呼ぼうとするとエラーになってしまう。
localeOf(context)
を呼び出すには、Localizationの情報を持ったMaterialApp
またはCupertinoApp
のhome
プロパティ以下のWidgetである必要がある。