请求不包含本地化祖先的上下文的区域设置

Tom*_*652 5 dart flutter

我试图Locale在应用程序启动时获取用户手机的信息。

Widget我的方法中有这棵树runApp()

@override
  Widget build(BuildContext context) {
    return MaterialApp(
            locale: Locale(Localizations.localeOf(context).languageCode), // This crashes
            localizationsDelegates: [
              const LocalizationDelegate(), // My custom delegate to get translations
              CountryLocalizations.delegate,
              GlobalMaterialLocalizations.delegate,
              GlobalWidgetsLocalizations.delegate,
            ],
            supportedLocales: [
              Locale("en"),
              Locale("fr"),
            ],
            debugShowCheckedModeBanner: false,
            home: Scaffold(
              resizeToAvoidBottomInset: false,
              body: HomePage(),
            )
        );
}
Run Code Online (Sandbox Code Playgroud)

该线路locale: Locale(Localizations.localeOf(context).languageCode)导致崩溃:

Requested the Locale of a context that does not include a Localizations ancestor.
Run Code Online (Sandbox Code Playgroud)

我只是想将此区域设置绑定到我的区域设置,Delegate而无需在应用程序中进一步进行操作。
到目前为止,我locale: Locale("en")en.json我的LocalizationDelegate.

Tom*_*652 2

我也回答因为@Jaydipsinh是对的,但我犯的错误是我认为我需要这一行:

locale: Locale(Localizations.localeOf(context).languageCode)
Run Code Online (Sandbox Code Playgroud)

反之则无益。
您只需输入supportedLocales值,如果它们与手机的区域设置匹配,flutter 就会自动使用给定的语言delegates,例如:

GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用 : 检索区域设置, String locale = Platform.localeName.split('_')[0];而不会在应用程序启动时崩溃。