FlutterARB本地化抛出“getterwascalledonnull”错误
按照官方国际化教程的提示,我The getter was called on null在尝试使用从 ARB 文件自动生成的翻译引擎 ( AppLocalizations.of(context).helloWrold) 时得到了:
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class Login extends StatelessWidget {
final loginAction;
final String loginError;
const Login(this.loginAction, this.loginError);
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
onPressed: () {
loginAction();
},
child: Text(AppLocalizations.of(context).helloWorld),
),
Text(loginError ?? ''),
],
);
}
}
回答
这个问题的解决方法是官方教程中缺失的部分。那里没有描述为了让引擎运行,需要在main.dart文件中声明额外的委托。这可以从示例 GitHub 存储库中得出结论。要解决此问题,请转到MaterialApp并添加缺少的委托AppLocalizations.delegate:
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
child: MaterialApp(
localizationsDelegates: [
// ... app-specific localization delegate[s] here
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
const Locale('en', ''),
const Locale('pl', '')
],
home: Scaffold(
THE END
二维码