遵循官方国际化教程的提示,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(