Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart setState()在Flatter中的异步调用中不起作用_Dart_Flutter - Fatal编程技术网

Dart setState()在Flatter中的异步调用中不起作用

Dart setState()在Flatter中的异步调用中不起作用,dart,flutter,Dart,Flutter,我试图读取一个名为mood.json的json文件,并将其解析为一个名为“data”的列表,但当我运行setState()时,数据从未更改,对此问题有何帮助?代码如下所示: class DisplayPage扩展了StatefulWidget{ @凌驾 _DisplayPageState createState()=>新建_DisplayPageState(); } 类_DisplayPageState扩展状态{ 列表_data=[]; 目录目录; 文件jsonFile; 字符串jsonPat

我试图读取一个名为
mood.json的json文件,并将其解析为一个名为“data”的列表,但当我运行
setState()
时,
数据从未更改,对此问题有何帮助?代码如下所示:

class DisplayPage扩展了StatefulWidget{
@凌驾
_DisplayPageState createState()=>新建_DisplayPageState();
}
类_DisplayPageState扩展状态{
列表_data=[];
目录目录;
文件jsonFile;
字符串jsonPath;
Future getData()异步{
dir=等待getApplicationDocumentsDirectory();
jsonPath=dir.path+“/”+“mood.json”;
jsonFile=新文件(jsonPath);
设置状态(){
_data=json.decode(jsonFile.readAsStringSync());
});
}
@凌驾
void initState(){
super.initState();
getData();
打印(_data.length);
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“语气”)
),
正文:新建ListView.builder(
itemCount:_data.length,
itemBuilder:(构建上下文,int索引){
归还新卡(
子项:新文本(_数据[索引][“标题]),
);
},),
);
}
}

我想你的问题可能是别的;我接受了你的代码,将网络调用更改为只等待5秒钟,然后返回一些虚拟数据,结果很好

Future getData() async {
  await new Future.delayed(const Duration(seconds: 5));
  setState(() {
    _data = [
      {"title": "one"},
      {"title": "two"},
    ];
  });
}

您应该在
setState
调用中放置一个断点,以确保实际调用了该断点,并且分配给
\u data
的数据符合预期。

在哪里调用
setState
?我在你的代码中看不到。你如何使用你的状态?我重新编辑了这个问题,很抱歉我的错误mistake@PhucTran我想使用
\u data
列表构建listview小部件,但解析的
\u data
不会传递到状态。哪个文件包含上述代码?添加
打印(_数据)时
之后\u数据=是否打印了预期数据?
Future getData() async {
  await new Future.delayed(const Duration(seconds: 5));
  setState(() {
    _data = [
      {"title": "one"},
      {"title": "two"},
    ];
  });
}