我的代码中有下面这一行:
AppLocalizations.of(context).homeScreen
只要我手动运行flutter gen-l10n
,这一行就可以正常工作。
我现在已经创建了一个l10n.yaml
文件,所以我不需要每次都手动运行该命令。它只包含两行:
arb-dir: lib/l10n
template-arb-file: app_en.arb
现在,本地化是通过flutter run
自动完成的。但是,Android Studio会报告这一行,并强制我添加一个感叹号(或.?
)。
AppLocalizations.of(context)!.homeScreen
^ note this
原因是生成了不同的代码。
使用l10n.yaml
(我的机器上的app_localizations.dart
的第68行)生成的代码:
static AppLocalizations? of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}
^ note the question mark
使用命令行(以及我机器上的app_localizations.dart
的第68行)生成的代码:
static AppLocalizations of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations)!;
}
^ no question mark exclamation mark ^
为什么使用l10n.yaml
会有这样的不同?有没有办法解决这个问题,这样我就不需要在代码中到处添加感叹号了?
我试图通过查看flutter run --verbose
的输出来弄清楚flutter run
使用的是什么命令行,但是里面什么都没有。
发布于 2021-10-24 15:31:11
!
是声音空安全的一部分。!
表示该值不为null。
Learn more about null safety here
对于本地化,
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
export 'package:flutter_gen/gen_l10n/app_localizations.dart';
extension AppLocalizationsX on BuildContext {
AppLocalizations get l10n => AppLocalizations.of(this)!;
}
使用上面的代码作为BuildContext
上的扩展进行本地化,
context.l10n.homeScreen
l10n.yaml文件
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
https://stackoverflow.com/questions/69698107
复制相似问题