bugfix> dart > 投稿

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"]),
          );
          },),
    );
  }
}

回答 1 件
  • あなたの問題は何か他のものかもしれないと思う。私はあなたのコードを取得し、ネットワーク呼び出しを5秒だけ待機するように変更してから、いくつかのダミーデータを返しました。

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

    setState 内にブレークポイントを配置する必要があります  呼び出して、実際に呼び出されていることと、データが _data に割り当てられていることを確認します  期待どおりです。

あなたの答え