okaryo.log

Flutterで端末内の言語設定を取得する | okaryo.log

Flutterで端末内の言語設定を取得する

    #Flutter#多言語対応

方法

LocalizationsクラスのlocaleOfLocaleが取得できるので、それに対して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またはCupertinoApphomeプロパティ以下のWidgetである必要がある。

参考


関連記事
最新記事
プロモーション

This site uses Google Analytics.