我试图读取一个名为mood.json
的json文件,并将其解析为一个名为“data”的列表,但当我运行setState()
时,data
没有改变,对此问题有帮助吗?代码如下所示:
class DisplayPage extends StatefulWidget {
@override
_DisplayPageState createState() => new _DisplayPageState();
}
class _DisplayPageState extends State<DisplayPage> {
List _data = [];
Directory dir;
File jsonFile;
String jsonPath;
Future getData() async {
dir = await getApplicationDocumentsDirectory();
jsonPath = dir.path + "/" + "mood.json";
jsonFile = new File(jsonPath);
setState(() {
_data = json.decode(jsonFile.readAsStringSync());
});
}
@override
void initState() {
super.initState();
getData();
print(_data.length);
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('Mood')
),
body: new ListView.builder(
itemCount: _data.length,
itemBuilder: (BuildContext context, int index) {
return new Card(
child: new Text(_data[index]["title"]),
);
},),
);
}
}
4条答案
按热度按时间dnph8jn41#
我想你的问题可能是别的我把你的代码和改变网络调用只需等待5秒钟,然后返回一些虚拟数据,它工作正常。
您应该在
setState
调用中放置一个断点,以确保它确实被调用,并且分配给_data
的数据是您所期望的。pwuypxnk2#
您应该在“setState”方法之外使用“async”。
**注:**使用“await”表示等待响应。
wyyhbhjk3#
如this post中所述,使用
而不是仅仅
ubby3x7f4#
编辑 * 对不起我错了,你可以从initState()调用异步方法,只需调用它而无需等待
以下是一些参考资料:https://dart.dev/codelabs/async-await#working-with-futures-async-and-await