微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flutter 显示方法 '[]' 在 null 上被调用在列表构建器上

如何解决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"]);

它的印刷价值一切都很好。

enter image description here

您可以在图像中看到它打印的长度和数组很好,因此当我在小部件中使用时它不为空,它的说法长度在 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?