Ada*_*ths 5 internationalization dart flutter dart-null-safety
我正在使用AppLocalizations.of(context).myString我的 null 安全 flutter 应用程序来国际化字符串。
我的 IDE 告诉我AppLocalizations.of(context)可以返回 null。处理这个问题的最佳方法是什么?有没有办法确保AppLocalizations.of(context)永远不会返回空值?
目前,我采用以下方法:
AppLocalizations.of(context)?.myString ?? 'Fallback string'
Run Code Online (Sandbox Code Playgroud)
name: Sample Intl Project
description: A sample project
publish_to: 'none'
version: 1.0.0+1
environment:
sdk: ">=2.12.0-133.2.beta <3.0.0"
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
intl: ^0.17.0-nullsafety.2
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
generate: true
Run Code Online (Sandbox Code Playgroud)
arb-dir: lib/l10n
template-arb-file: app_en_US.arb
output-localization-file: app_localizations.dart
Run Code Online (Sandbox Code Playgroud)
{
"helloWorld": "Hello World!",
"@helloWorld": {
"description": "Greeting"
}
Run Code Online (Sandbox Code Playgroud)
{
"helloWorld": "Hello World!"
}
Run Code Online (Sandbox Code Playgroud)
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
void main() {
runApp(App());
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Sample App',
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
home: Home()
);
}
}
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: Text(
AppLocalizations.of(context)?.helloWorld ?? 'Hello World!'
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您确定,这AppLocalizations.of(context)将始终返回一个有效的AppLocalizations实例(这对于您的示例应用程序来说是正确的),您可以使用:
AppLocalizations.of(context)!.myString
Run Code Online (Sandbox Code Playgroud)
该!运算符告诉 Dart,它AppLocalizations.of(context)永远不会返回
,其作用类似于从可为 null到非 nullable 的null强制转换。AppLocalizations?AppLocalizations
注意:如果在运行时AppLocalizations.of(context)返回null,则会AppLocalizations.of(context)!抛出异常。
小智 5
(我没有权限发表评论,所以我来回答)
添加键/值
nullable-getter: false
Run Code Online (Sandbox Code Playgroud)
到l10n.yaml(位于项目的根目录)。
这将自动对 进行空检查AppLocalizations.of(context),允许程序员直接写入AppLocalizations.of(context).<key>而不是AppLocalizations.of(context)!.<key>.
来自Flutter 的文档:
[no-]可空吸气剂
指定本地化类 getter 是否可为空。
默认情况下,此值为 true,以便 Localizations.of(context) 返回可为 null 的值以实现向后兼容性。如果该值为 false,则对 Localizations.of(context) 的返回值执行 null 检查,从而无需在用户代码中进行 null 检查。
| 归档时间: |
|
| 查看次数: |
1550 次 |
| 最近记录: |