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である必要がある。