Flutter ARB 本地化抛出 "the getter was called on null" 错误
Flutter ARB localization throws "the getter was called on null" error
按照 official internationalization tutorial 的提示,我在尝试使用从 ARB 文件自动生成的翻译引擎 (AppLocalizations.of(context).helloWrold
) 时得到 The getter was called on null
:
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
文件中声明额外的委托。这样就可以得出结论了example GitHub repository。要解决此问题,请转到 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(
按照 official internationalization tutorial 的提示,我在尝试使用从 ARB 文件自动生成的翻译引擎 (AppLocalizations.of(context).helloWrold
) 时得到 The getter was called on null
:
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
文件中声明额外的委托。这样就可以得出结论了example GitHub repository。要解决此问题,请转到 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(