Flutter &引用;NoSuchMethodError:getter';长度';被调用时为null“;关于Listview构建器区域
我想问一下我犯的错误。所以,在有人声称这个问题与其他问题相似之前,也许是的,但其他人的回答仍然不能解决我的问题 因此,我的代码有问题,错误显示大约5秒,然后显示数据列表。然后我搜索解决方案,找到了futurebuilder的答案,但当我调试时,错误仍然显示,并且是永久性的,不会像以前那样更改为数据列表。 这是我的密码Flutter &引用;NoSuchMethodError:getter';长度';被调用时为null“;关于Listview构建器区域,flutter,Flutter,我想问一下我犯的错误。所以,在有人声称这个问题与其他问题相似之前,也许是的,但其他人的回答仍然不能解决我的问题 因此,我的代码有问题,错误显示大约5秒,然后显示数据列表。然后我搜索解决方案,找到了futurebuilder的答案,但当我调试时,错误仍然显示,并且是永久性的,不会像以前那样更改为数据列表。 这是我的密码 列表数据; Future loadJsonData()异步{ var jsonText=await rootBundle.loadString('Json/indomodel.J
列表数据;
Future loadJsonData()异步{
var jsonText=await rootBundle.loadString('Json/indomodel.Json');
如果(本安装){
设置状态(){
data=json.decode(jsonText);
});
}
//打印(jsonText);
}
@凌驾
void initState(){
super.initState();
这是loadJsonData();
//loaddata();
}
@凌驾
小部件构建(构建上下文){
//var buildContext=(buildContext上下文,异步快照);
返回脚手架(
resizeToAvoidBottomInset:false,
resizeToAvoidBottomPadding:false,
主体:容器(
子:列(
儿童:[
容器(
填充:边缘组。对称(水平:20.0,垂直:10.0),
身高:60.0,
宽度:MediaQuery.of(context).size.width,
装饰:盒子装饰(颜色:彩色。白色),
孩子:TextField(
装饰:输入装饰(
聚焦顺序:大纲输入边框(
borderSide:borderSide(颜色:颜色。透明),
),
alignLabelWithHint:正确,
调焦颜色:颜色。白色,
hintText:“Ketik Kata”,
hintStyle:TextStyle(颜色:Colors.grey),
//labelText:“印度尼西亚语”,
图标:图标(
FontAwesomeIcons.search,
颜色:颜色。灰色,
尺寸:15.0,
),
labelStyle:TextStyle(颜色:Colors.grey)),
光标颜色:颜色。黄色,
样式:TextStyle(颜色:Colors.grey.shade800),
),
),
容器(
填充:仅限边缘设置(顶部:10.0),
宽度:MediaQuery.of(context).size.width,
高度:MediaQuery.of(上下文).size.height*0.6,
孩子:未来建设者(
future:loadJsonData(),
生成器:(BuildContext上下文,异步快照){
if(!snapshot.hasData)返回中心(子项:CircularProgressIndicator(),);
if(snapshot.connectionState==connectionState.done){
if(snapshot.hasError)返回文本('Error${snapshot.Error}');
返回ListView.builder(
itemCount:snapshot.data.length,
itemBuilder:(构建上下文,索引){
回程卡(
标高:0.3,
孩子:ListTile(
//前导:CircleAvatar(子:图标(FontAwesomeIcons.adjust)),
标题:专栏(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
划船(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
可选择文本(
数据[索引]['word'],
样式:TextStyle(
字体大小:16.0,
fontWeight:fontWeight.bold,
颜色:颜色。深紫色。阴影800),
),
正文(
“我的卡穆斯”,
样式:TextStyle(
颜色:颜色。灰色,字体大小:10),
)
],
),
尺寸箱(高度:10.0,),
文本(数据[索引]['trans'],样式:TextStyle(颜色:Colors.grey.shade700,fontSize:13.0),)
],
),
),
);
},
);
}
},
)
)
],
),
),
);
因为如果没有数据,snapshot.data
返回null
,并且您正在列表视图中使用它,您需要做的就是使用这种方法:
FutureBuilder(
future: loadJsonData(),
builder: (BuildContext context, AsyncSnapshot snapshot){
// if there is no data yet, show progress indicator.
if (!snapshot.hasData) return Center(child: CircularProgressIndicator());
// only show ListView if you have data
return ListView.builder(...);
}
)
我从电话中键入了此代码,因此可能存在一些基本语法错误。尝试将您的itemCount:snapshot.data.length,
替换为itemCount:snapshot.data==null?0:snapshot.data.length,
。这应该可以解决问题。它仅堆叠在进度条上。不显示数据。但感谢这意味着您的加载jsondata
没有返回任何数据。请也发布该数据的代码。
FutureBuilder(
future: loadJsonData(),
builder: (BuildContext context, AsyncSnapshot snapshot){
// if there is no data yet, show progress indicator.
if (!snapshot.hasData) return Center(child: CircularProgressIndicator());
// only show ListView if you have data
return ListView.builder(...);
}
)