flutter - Flutter ARB 本地化抛出“getter was called on null”错误
问题描述
按照官方国际化教程的提示,我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(
推荐阅读
- php - 如何在 PHP 中为 zip 文件夹中的所有文件生成下载链接列表
- python - 使用 selenium python 收集 Insagram 用户名
- sql - 如何在有序表的一列中将一行的值与上一行的值进行比较?
- java - Java KeyStore API - 找不到有效的证书
- swift - 如何防止有人复制和重新分发您的 osx 应用程序
- python-3.x - psycopg2.OperationalError:致命:用户“user1”的密码验证失败
- c# - 如何添加单例
() 作品 - php - 通过路由 Laravel 7 将数据从一个控制器传递到另一个控制器
- android - Google Play 不会自动更新内部应用
- java - Spring Boot 无法使用 Thymeleaf 视图提供 css 文件