【发布时间】:2020-01-08 10:34:04
【问题描述】:
我正在尝试对我的应用实施本地化。
我的应用程序仅支持英语和印地语两种语言。但用户可以选择从除英语或印地语以外的设备设置中选择任何语言。如果用户选择了任何其他语言,我想将应用程序区域设置为印地语。为此,我使用localeResolutionCallback,如下面的代码所示。但我收到了下面提到的错误消息。
flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
flutter: The following NoSuchMethodError was thrown building ScrollConfiguration(behavior:
flutter: _MaterialScrollBehavior):
flutter: The getter 'languageCode' was called on null.
flutter: Receiver: null
flutter: Tried calling: languageCode
flutter:
flutter: When the exception was thrown, this was the stack:
flutter: #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:50:5)
flutter: #1 Demo.build.<anonymous closure> (package:simple/main.dart:49:54)
调试后我发现localeResolutionCallback被调用了两次,第一次locale的值为null,第二次给出了一些值。
flutter: locale---->null .
flutter: locale---->en_US .
- 为什么
localeResolutionCallback会被调用两次,但值为空 - 这是将设备默认语言环境覆盖为应用特定语言环境的正确方法吗
class Demo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
onGenerateTitle: (BuildContext context) => AppLocalizations.of(context).title,
localizationsDelegates: [
AppLocalizationsDelegate(),
GlobalWidgetsLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
const Locale('en', ''), // English
const Locale('hi', ''), // hindi
],
localeResolutionCallback: (locale, supportedLocales) {
for (var supportedLocale in supportedLocales) {
if (supportedLocale.languageCode == locale.languageCode &&
supportedLocale.countryCode == locale.countryCode) {
return supportedLocale;
}
}
return supportedLocales.last;
},
home: DemoApp(),
);
}
}
【问题讨论】:
-
你找到解决办法了吗??
-
你找到更好的解决方案了吗,我也遇到了同样的问题
-
如果您有足够的信心确保您的代码完美无误,那么只需卸载应用程序、flutter clean 和 pub get、使缓存无效并重新启动 android studio。之后运行您的应用程序,它应该不会显示此错误。
标签: flutter localization