Sea*_*les 22 localization internationalization dart flutter
我正在使用 Flutter 构建一个 Web 应用程序,我想在我的新应用程序上使用 flutter 的国际化功能。我正在关注Flutter-Tutorial,并尝试使用 arb 文件设置应用程序标题。正如教程中提到的,app_localization.dart 文件是为“en”和“de”正确创建的。然而,我在下面的代码中遇到了空指针异常。
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'MyApp',
localizationsDelegates: [
AppLocalizations.delegate, // Post-EDIT due to croxx5f
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
Locale('de', ''),
Locale('en', ''),
],
theme: ThemeData(
primarySwatch: Colors.red,
),
home: Scaffold(
appBar: AppBar(
title: Text(AppLocalizations.of(context)!.appTitle),
),
body: Text(AppLocalizations.of(context)!.appTitle)
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
事实上,AppLocalizations.of(context) 返回 null。
cro*_*x5f 22
您应该在您的 MaterialApp 中添加AppLocalizations:
MaterialApp(
...
localizationsDelegates: const [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
],
supportedLocales: AppLocalizations.supportedLocales,
...
Run Code Online (Sandbox Code Playgroud)
Raj*_*Jr. 20
就我而言,使用Scaffold()as home:ofMaterialApp()进行测试导致了问题。
一旦我创建了一个单独的HomePage()小部件并使用它,
home: HomePage()问题就消失了。
当我将 Scaffold() 作为 MaterialApp 的直接子级时,会认为 AppLocalizationDelegate 没有可用的父上下文,因为 MaterialApp 是所有底层小部件的主要上下文构建器。
错误代码:
return MaterialApp(
home: Scaffold(
body: Txt(text: AppLocalizations.of(context)?.helloWorld)
),
locale: Locale('ar'),
supportedLocales: [Locale('en'),Locale('ar')],
localizationsDelegates: [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
]);
},
));
Run Code Online (Sandbox Code Playgroud)
好的代码:
return MaterialApp(
home: HomePag(),
locale: Locale('ar'),
supportedLocales: [Locale('en'),Locale('ar')],
localizationsDelegates: [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
]);
},
));
class HomePag extends StatefulWidget {
const HomePag({Key? key}) : super(key: key);
@override
State<HomePag> createState() => _HomePagState();
}
class _HomePagState extends State<HomePag> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
children: [
Txt(text: AppLocalizations.of(context)?.helloWorld),
// Txt(text: AppLocalizations.of(context)?.translate('help'))
],
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10273 次 |
| 最近记录: |