当我尝试在TabBarView中本地化字符串时,出现此错误:
NoSuchMethodError:方法“ translate”在null上被调用。接收者:null。尝试调用:translate(“ username)。
我使用以下代码行将键转换为本地化字符串:
AppLocalizations.of(context).translate('username')
此功能在我的应用程序的所有其他屏幕(除了此屏幕)上都很好用。有谁知道为什么它不起作用以及如何解决?
我已经尝试过的一些事情:
传递主屏幕(包含所有TabBarViews的屏幕)的上下文
在构建器中包装每个ListTile
将ListView包装在构建器中
代码:
class AccountScreen extends StatelessWidget {
final String username;
final String email;
final int points;
AccountScreen(this.username, this.email, this.points);
@override
Widget build(BuildContext context) {
return Container(
child: Padding(
padding: EdgeInsets.all(10),
child: ListView(
children: <Widget>[
ListTile(
title: Text(AppLocalizations.of(context).translate('username')),
subtitle: Text(username),
),
ListTile(
title:
Text(AppLocalizations.of(context).translate('email_address')),
subtitle: Text(email),
),
ListTile(
title: Text(AppLocalizations.of(context).translate('points')),
subtitle: Text('$points'),
),
],
),
),
);
}
}
答案 0 :(得分:0)
我发现了同样的问题。但就我而言,是使用MaterialApp
而不使用localizationsDelegates
。 (我的意思是所有文件不只是main.dart
)。
因此,我在所有小部件中的每个localizationsDelegates
上添加了MaterialApp
。
例如
MaterialApp(
localizationsDelegates: [
MainLocalizationsDelegate.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
home: DefaultTabController(
length: 2,
child: Scaffold(
appBar: AppBar(
brightness: Brightness.light,
bottom: TabBar(
tabs: [
Tab(text: MainLocalizations.of(context).food),
Tab(text: MainLocalizations.of(context).car),
],
),
),
body: TabBarView(
children: [
TabA(),
TabB(),
],
),
),
),
);
答案 1 :(得分:0)
问题在于,应用程序内部有多个MaterialApp小部件,这些小部件引起了有关本地化过程的一些冲突。删除冗余的MaterialApp小部件可解决此问题。