Flutter 无法在颤振选项卡视图和列表视图中本地化字符串
当我尝试在TabBarView中本地化字符串时,会出现以下错误:Flutter 无法在颤振选项卡视图和列表视图中本地化字符串,flutter,localization,Flutter,Localization,当我尝试在TabBarView中本地化字符串时,会出现以下错误: NoSuchMethodError: The method 'translate' was called on null. Receiver: null. Tried calling: translate("settingsprofile"). import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:rewahub/vi
NoSuchMethodError: The method 'translate' was called on null. Receiver: null. Tried calling: translate("settingsprofile").
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:rewahub/views/tabbar.dart';
import 'package:rewahub/widgets/app_localizations.dart';
import 'package:rewahub/widgets/styles.dart' ;
import 'package:firebase_database/firebase_database.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
class MainHomePage extends StatefulWidget {
MainHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MainHomePageState createState() => _MainHomePageState();
}
class _MainHomePageState extends State<MainHomePage> {
final int initialIndex = 1;
TextStyle style = TextStyle(fontFamily: 'Montserrat', fontSize: 20.0);
String textValue = 'unknown';
@override
Widget build(BuildContext context) {
return MaterialApp(
// localizationsDelegates: [
// AppLocalizations.delegate,
// GlobalMaterialLocalizations.delegate,
// GlobalWidgetsLocalizations.delegate,
// ],
debugShowCheckedModeBanner: false,
home: DefaultTabController(
initialIndex: 1,
length: 3,
child: Scaffold(
resizeToAvoidBottomPadding: false,
appBar: new PreferredSize(
preferredSize: const Size.fromHeight(150.0),
child: new AppBar(
centerTitle: false,
title: Container(
width: MediaQuery.of(context).size.width / 1.0,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(
"8956",
textAlign: TextAlign.left,
style: TextStyle(color: Colors.white, fontSize: 18.0),
),
Image.asset(
'assets/images/rewahub_icon.png',
height: 50.0,
),
Text(
"RS 434.25",
style: TextStyle(color: Colors.white, fontSize: 18.0),
),
],
),
),
flexibleSpace: Container(
decoration: BoxDecoration(gradient:grad),
),
bottom: TabBar(
tabs: <Widget>[
Tab(
child: new Text(
AppLocalizations.of(context).translate('tabvouchers'),
style: Theme.of(context)
.textTheme
.body1
.apply(color: Colors.white),
),
),
Tab(
child: new Text(
AppLocalizations.of(context).translate('tabpaynow'),
style: Theme.of(context)
.textTheme
.body1
.apply(color: Colors.white),
),
),
Tab(
child: new Text(
AppLocalizations.of(context).translate('tabpoints'),
style: Theme.of(context)
.textTheme
.body1
.apply(color: Colors.white),
),
),
],
),
),
),
//body: TabBody(),
),
),
);
}
}
NoSuchMethodError:对null调用了方法“translate”。接收者:空。尝试调用:translate(“settingsprofile”)。
导入“package:flatter_本地化/flatter_本地化.dart”;
导入“package:rewahub/views/tabbar.dart”;
导入“package:rewahub/widgets/app_localizations.dart”;
导入“package:rewahub/widgets/styles.dart”;
导入“package:firebase_database/firebase_database.dart”;
导入“package:firebase_messaging/firebase_messaging.dart”;
进口“包装:颤振/材料.省道”;
类main扩展StatefulWidget{
MainHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MainHomePageState createState()=>\u MainHomePageState();
}
类_MainHomePageState扩展状态{
最终int initialIndex=1;
TextStyle=TextStyle(fontFamily:'Montserrat',fontSize:20.0);
字符串textValue='未知';
@凌驾
小部件构建(构建上下文){
返回材料PP(
//本地化授权:[
//AppLocalizations.delegate,
//GlobalMaterialAllocalizations.delegate,
//GlobalWidgetsLocalizations.delegate,
// ],
debugShowCheckedModeBanner:false,
主页:DefaultTabController(
初始索引:1,
长度:3,
孩子:脚手架(
resizeToAvoidBottomPadding:false,
appBar:新的PreferredSize(
首选尺寸:常量尺寸。从高度(150.0),
孩子:新的AppBar(
标题:错误,
标题:集装箱(
宽度:MediaQuery.of(context).size.width/1.0,
孩子:排(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
正文(
"8956",
textAlign:textAlign.left,
样式:TextStyle(颜色:Colors.white,fontSize:18.0),
),
影像资产(
“assets/images/rewahub_icon.png”,
身高:50.0,
),
正文(
“RS 434.25”,
样式:TextStyle(颜色:Colors.white,fontSize:18.0),
),
],
),
),
flexibleSpace:容器(
装饰:盒子装饰(渐变:渐变),
),
底部:选项卡栏(
选项卡:[
标签(
儿童:新文本(
AppLocalizations.of(context.translate('tab'),
风格:主题(上下文)
.文本主题
.body1
.应用(颜色:颜色。白色),
),
),
标签(
儿童:新文本(
AppLocalizations.of(context.translate('tabpaynow'),
风格:主题(上下文)
.文本主题
.body1
.应用(颜色:颜色。白色),
),
),
标签(
儿童:新文本(
AppLocalizations.of(context.translate('tabpoints'),
风格:主题(上下文)
.文本主题
.body1
.应用(颜色:颜色。白色),
),
),
],
),
),
),
//body:TabBody(),
),
),
);
}
}
我使用这行代码将密钥转换为本地化字符串:
AppLocalizations.of(context.translate('settingsprofile')
这在我的应用程序的所有其他屏幕上都非常有效,除了这个屏幕。有人知道为什么它不起作用以及如何解决它吗
有些事情我已经试过了:
传递主屏幕(包含所有TabbarView的屏幕)的上下文
将每个ListTile包装在一个构建器中你说在其他屏幕上效果很好,那么我们需要小部件树。您可以共享查看到哪个tabBarView的小部件代码吗?为什么要评论
本地化委托
?它在main.dart中定义