问题描述
我已经遇到这个错误已有一段时间了,我认为我需要一些专家的帮助才能解决它,并且我真的是这种语言的新手^^。
我在Flutter中向我的项目添加了可本地化,以不同的语言添加了所有files.arb,并尝试按照Google教程以及其他一些不同的解决方法将其导入,但始终收到相同的错误:
════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following NoSuchMethodError was thrown building StyleguideScreen(dirty):
The getter 'welcomeGeneralInfoTitle' was called on null.
Receiver: null
Tried calling: welcomeGeneralInfoTitle
这是我用于localicationDelegates的AppLocalizations.dart类
class AppLocalizations {
static const AppLocalizationsDelegate delegate = AppLocalizationsDelegate();
static Future<AppLocalizations> load(Locale locale) {
final String name = locale.countryCode.isEmpty ? locale.languageCode : locale.toString();
final String localeName = Intl.canonicalizedLocale(name);
return initializeMessages(localeName).then((_) {
Intl.defaultLocale = localeName;
return AppLocalizations();
});
}
static AppLocalizations of(BuildContext context) {
return Localizations.of<AppLocalizations>(context,AppLocalizations);
}
String get welcomeGeneralInfoTitle {
return Intl.message('Bet Master',name: 'title',desc: 'App Title');
}
}
class AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
const AppLocalizationsDelegate();
List<Locale> get supportedLocales {
return const <Locale>[
Locale('en',''),Locale('de',Locale('es','ES'),]; //Still need to add 18 languages,is there a better way to add them?
}
@override
bool isSupported(Locale locale) => _isSupported(locale);
@override
Future<AppLocalizations> load(Locale locale) => AppLocalizations.load(locale);
@override
bool shouldReload(AppLocalizationsDelegate old) => false;
bool _isSupported(Locale locale) {
if (locale != null) {
for (Locale supportedLocale in supportedLocales) {
if (supportedLocale.languageCode == locale.languageCode) {
return true;
}
}
}
return false;
}
}
这是我添加到项目根目录的地方
return MaterialApp(
localizationsDelegates: [
AppLocalizations.delegate,GlobalMaterialLocalizations.delegate,GlobalWidgetsLocalizations.delegate,],supportedLocales: AppLocalizations.delegate.supportedLocales,title: 'AMP',theme: Theme.darkTheme,home: StyleguideScreen(),);
这是我尝试实现它的方法,并且崩溃
class StyleguideScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final welcome = AppStrings.current.welcomeGeneralInfoTitle;
return Scaffold(...)
}
}
该应用程序正确地生成了需要导入的每种语言的所有生成文件,我认为它看起来非常简单,在调试时,它可以正确获取 locale 。有谁知道为什么会这样?在此先感谢:pray:
解决方法
FIX:我只需要将localizationsDelegates
文件中自动生成的 AppStrings.delegate,
添加到import 'generated/l10n.dart';
中,而不是创建一个新的AppLocalizations.delegate
。
像这样:
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,GlobalWidgetsLocalizations.delegate,GlobalCupertinoLocalizations.delegate,AppStrings.delegate,],
并完全删除我所做的AppLocationzations类,它运行顺利! :)
PD:我添加了这个新库flutter_localized_locales
我将 Android Studio Flutter 与 Intl plugin
一起使用,但问题是一样的
在main.dart
中添加导入import 'generated/l10n.dart';
同时在 localizationsDelegates 列表中添加 S.delegate
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,S.delegate,