【问题标题】:FLutter : The method '[]' was called on null when iterating listFLutter:迭代列表时在 null 上调用了方法“[]”
【发布时间】:2019-12-04 00:51:55
【问题描述】:

这是我到现在为止的源代码。您能告诉我哪里出了问题以及为什么会出现此错误吗?

任何帮助将不胜感激。谢谢!

错误是:

Data[0] 出现错误,它显示 Flutter:迭代列表导入 'package:flutter/material.dart' 时,方法 '[]' 在 null 上被调用;

class MyGetHttpDataState extends State<MyGetHttpData> { 

    final String url = "*******";
    List data, a; int index; // Function to get the JSON data 

    Future<String> getJSONData() async {
        var response = await http.get(url);
        print(response.body);
        setState(() {
           json.decode(response.body);
           data = dataConvertedToJSON['data']; index = 0;
        });
        return "Successfull";
    }

    @override
    Widget build(BuildContext context) {
        return new MaterialApp( 
          home: new Scaffold( 
            appBar: new AppBar( title: new Text('List Test'), ), 
            body: new Center( 
              child: Column( 
                mainAxisAlignment: MainAxisAlignment.center, 
                children: <Widget>[
                  for (var name in data[0]['INCI']) Text(name)
                ], ), ), )); 
    } 

    @override
    void initState() {
      super.initState();
      this.getJSONData(); 
    }
}

【问题讨论】:

  • 当我运行代码时它显示错误 1 ​​秒然后给我结果
  • 如果我做不到,我能做什么?
  • 显示什么错误?
  • 在 null 上调用了方法“[]”。如果我删除: for (var name in data[0]['INCI']) Text(name) no more error there
  • 你想要什么?打印 INCI 或其他内容中的所有值?

标签: flutter


【解决方案1】:

只需将您的代码更改为这个!

Future<String> getJSONData() async {
    var response = await http.get(url);
    setState(() {
       var dataConvertedToJSON = json.decode(response.body);
       data = dataConvertedToJSON['data'];
       data = data[0]['INCI'];
    });
    return "Successfull";
}

@override
Widget build(BuildContext context) {
    return new MaterialApp( 
      home: new Scaffold( 
        appBar: new AppBar( title: new Text('List Test'), ), 
        body: new Center( 
          child: data != null ? Column(
            mainAxisAlignment: MainAxisAlignment.center, 
            children: <Widget>[
              for (var name in data) Text(name)
            ], 
          ) : new CircularProgressIndicator(), 
        ), 
      )
    ); 
} 

【讨论】:

  • 但是当我进行另一次搜索但没有找到结果时,它给了我最后一个结果,我想显示“未找到”
  • 只需将new CircularProgressIndicator(), 更改为new Text("Not Found")
  • 兄弟,对不起,如果我再次打扰,但是当我使用 AlertDialog 时,它给了我这样的黑屏 i.stack.imgur.com/J2aHA.png
  • 您何时何地使用它?
  • codepile.net/pile/ZER40Jom 我正在使用自定义对话框 giffy import 'package:giffy_dialog/giffy_dialog.dart';
猜你喜欢
  • 2020-11-06
  • 2019-09-23
  • 2020-06-04
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 2021-09-29
相关资源
最近更新 更多