我正在尝试在应用程序启动时获取用户手机的Locale
。
我在runApp()
方法中有这个Widget
树:
@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(),
)
);
}
字符串
行locale: Locale(Localizations.localeOf(context).languageCode)
导致崩溃:
Requested the Locale of a context that does not include a Localizations ancestor.
型
我只是想将这个locale绑定到我的Delegate
,而不需要在app中进一步操作。
到目前为止,我把locale: Locale("en")
从我的LocalizationDelegate
读取我的en.json
文件。
3条答案
按热度按时间ruarlubt1#
您必须使用MaterialApp或CupertinoApp才能使用区域设置。
对于前任
字符串
注意:Flutter Localization会自动检测系统语言并将此设置应用到您的应用程序。
zqdjd7g92#
我也回答,因为@Jaydipsinh是对的,但我犯的错误是我认为我需要这行:
字符串
但它毫无用处。
您只需输入
supportedLocales
值,如果它们与手机的区域设置匹配,flutter会自动使用给定delegates
的语言,例如:型
此外,还可以使用以下命令检索区域设置:
String locale = Platform.localeName.split('_')[0];
在应用程序启动时没有崩溃。wgeznvg73#
这样做的技巧没有崩溃:
字符串
谢谢