如何解决Flutter 显示方法 '[]' 在 null 上被调用在列表构建器上
我正在从 api 获取数据并在 ListView 构建器中显示,但显示错误
class MyHomePage extends StatefulWidget {
MyHomePage({Key key,this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
bool show = false;
var map = {};
@override
void initState() {
dosomestuff();
}
Future<List> dosomestuff() async {
http.Response res = await http.get(
'http://retailapi.airtechsolutions.pk/api/menu/2112',);
Map<String,dynamic> map = json.decode(res.body);
if (map['description'] == "Success") {
print('show kr ');
print(map["Categories"].length);
print(map["Categories"]);
setState(() {
show = true;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),),body: show
? ListView.builder(
itemCount: map["Categories"].length,scrollDirection: Axis.horizontal,shrinkWrap: true,physics: BouncingScrollPhysics(),itemBuilder: (context,index) {
return Container(
width: 80.0,child: Text(map["Categories"][index]['Name'])
);
},) : Container(),);
}
}
显示错误 The method '[]' was called on null
。但是当我在 state 函数中打印值时,它的 priting 值和所有东西都在工作,但是当在 ListBuilder 中显示错误时,它会显示该错误。
你可以看到我在函数中打印值
print(map["Categories"].length);
print(map["Categories"]);
它的印刷价值一切都很好。
您可以在图像中看到它打印的长度和数组很好,因此当我在小部件中使用时它不为空,它的说法长度在 null 上被调用 -_-
解决方法
你能试试吗?我可能打错了括号。
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
bool show = false;
var map = {};
List<dynamic> getCategory;
@override
void initState() {
dosomestuff();
}
Future<List> dosomestuff() async {
await http.get(
'http://retailapi.airtechsolutions.pk/api/menu/2112',).then((result){
http.Response res=result;
Map<String,dynamic> map = json.decode(res.body);
if (map['description'] == "Success") {
if(map["Categories"].length>0){
setState(() {
show = true;
getCategory=map["Categories"];
});
}
}
}
});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),),body: show
? ListView.builder(
itemCount: getCategory.length,scrollDirection: Axis.horizontal,shrinkWrap: true,physics: BouncingScrollPhysics(),itemBuilder: (context,index) {
return Container(
width: 80.0,child: Text(getCategory[index]['Name'])
);
},) : Container(),);
}
}
,
您有两个 map
声明。一个在类范围内,另一个在 dosomestuff
方法中。删除 map
方法中 dosomestuff
的声明,只将 json.decode(res.body)
的值分配给类作用域中的 map
。
而不是:
Map<String,dynamic> map = json.decode(res.body);
使用:
map = json.decode(res.body);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。