setState 不更新 ListView 数据

问题描述

我只想在 ListView 之外的按钮点击事件上从 API 加载 initState() 上的数据。我从服务器获取数据但未在 ListView 上更新。

搜索了这个但没有得到任何合适的解决方案,我是颤振的新手。

这是我的代码

@override
  Widget build(BuildContext context) {

    List<dynamic> ListData = [];

Future _getData() async {

      String apiUrl = "http://myURL";
      final params = {"id": "1","keyword": "xyz"};

      var response = await http.post(
        Uri.parse(apiUrl),body: params,);

      var jsonData = jsonDecode(response.body);

      List<dynamic> DATA = [];
      DATA = jsonData['data'];

      setState(() {
        ListData = DATA;
      });

      print('DATA COUNT: ${ListData.length}');

      return ListData;
    }
}

我正确地到达这里“DATA COUNT”,检查下面的 buttonListView 代码

    SizedBox(
     height: 45,width: 60,child: ElevatedButton(
            style: ElevatedButton.styleFrom(
            primary: Colors.orangeAccent,),onpressed: () async {
     await _getData();
     print('button pressed ${ListData.length}');
     },child: Text(
     '${ListData.length}',style: TextStyle(
     fontSize: 18.0,fontWeight: FontWeight.bold,Expanded(
  child: ListView.builder(
    itemCount: ListData.length,itemBuilder: (context,index) {
      return ListTile(
        title: Text('${ListData[index]}'),);
    },

在这里“按下按钮”也正确获取数据,但未在 button textListView builder 上更新,我的代码有什么问题,提前致谢。

解决方法

您在构建 Methode 时分配 ListData = []。当您的构建 Methode 被 setState() 调用时,ListData 再次分配给 []。

尝试分配 ListData = [] 关于你的构建方法

,

从构建方法中删除您的 ListData。原因是每次调用 setState 方法时都会重建,因此每次都会使 ListData 为空。

{{1}}

}`

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...