撷取资料时发生错误

时间:2018-09-04 13:53:33

标签: json flutter

我正试图从此链接中获取数据:

 Future<String> fetchQuestion() async {


  var response =
      await http.get(Uri.encodeFull("https://opentdb.com/api.php?amount=10&category=12&difficulty=easy&type=boolean"),headers:{"Accept":"application/json"} );
setState(() {
  var responseBody=json.decode(response.body);
  data=responseBody["results"];
});
print(data);

return "Sucess";
}

我写了这个来设置初始状态以调用该函数:

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

这是脚手架:

return Scaffold(
      appBar: AppBar(title: Text('Quiz')),
        body: Column(
          children: <Widget>
          [Container(
          height: 200.0,
          child:Text(data[i]["question"]),
          ),
      Container(
      child:RaisedButton(
       child: Text(b1):Text(' '),
        onPressed: (){
          checkT();
          next();

        }
      ),
      ),
      Container(
      child:RaisedButton(
       child:  Text(b2),
        onPressed:(){
          checkw() ;
          next();
        }
      ),
      ),

当我尝试出现此错误时: 方法'[]'在null上被调用,然后它刷新自身,应用运行,我不知道为什么。任何想法? 预先感谢。

2 个答案:

答案 0 :(得分:1)

因为File directory = getContext().getFilesDir(); File file = new File(directory, filename); mLayout.addView(createNewTextView(*file*)); data,直到网络通话结束。提取数据(null之后,fetchQuestion(在fetchQuestion内部)将使用从网络获取的非空数据刷新视图。

您的用例可能需要一个FutureBuilder

答案 1 :(得分:0)

data将持续null几毫秒,直到http请求往返服务器,返回并运行setState中的代码,该代码设置data解码后的响应。在这段时间内,由于数据尚未初始化,因此flutter将尝试绘制屏幕并且无法构建Text(data[i]...

解决方法是检测data为空并构建不同的东西,直到它被设置为止:

  body: (data == null) ? const CircularProgressIndicator() : Column(
    ...

大概您将i设置为问题列表中有效索引的某个位置。