是否有其他方法可以在提供者 Flutter 的自定义列表视图中更新数据

Is there other method to update data in custom listview in provider Flutter

我正在从 firebase 获取数据并显示在列表视图中。我将数据存储在列表中,然后通知它,但列表长度仍然为空。 我研究了所有相关问题,但仍然没有得到解决方案。

我希望每当我在 firebase 中添加一些新数据时它同时出现在列表视图中。因此,我在这里使用提供者。也请给我一些想法。

提前致谢

这是代码

      class Home121 extends StatefulWidget {
        @override
        _Home121State createState() => _Home121State();
      }

      final fb = FirebaseDatabase.instance.reference().child("Data");

      }
      @override
      Widget build(BuildContext context) {

        Future<void> StoreData() async {
          dynamic key=CreateCryptoRandomString(32);
          fb.child(key).set({
            "id": key,
            "link": "EasyCoding",
          }).then((value) {
            ShowToastNow();
          });
        }
        return ChangeNotifierProvider<TaskManager>(
            create: (context) => TaskManager(),
            child: Scaffold(
              appBar: AppBar(
                title: Text("Kkkk"),
              ),
              body: Container(
                  margin: EdgeInsets.all(
                    8,
                  ),
                  child: Consumer<TaskManager>(
                      builder: (context, myModel, child) {
                        return myModel.list.length==0? Text("zero"):ListView.builder(
                          itemCount:myModel.list.length,
                          itemBuilder: (context,index){
                            return Text(
                              myModel.list[index].Name,
                              style: TextStyle(
                                fontSize: 20,
                              ),
                            );
                          },
                        );
                      }

                  )
              ),
            )
        );

      }
      @override
      void initState() {
        TaskManager task=TaskManager();
        task.GetData();
      }
      }


      class TaskManager extends ChangeNotifier{

        List<Model> list=new List();
        GetData(){
          //get data here
        }

        AddNewTask(){
          // add data to databse
          list.add(model);
          notifyListeners();
        }
      }

编辑:

      class MyClass extends StatelessWidget {
        @override
        Widget build(BuildContext context) {
          return ChangeNotifierProvider<TaskManager>(
              create: (context) => TaskManager(),
              child: Home121());
        }
      }

这是因为在 initState() 中您正在创建 TaskManager 的另一个实例并在该实例上调用方法 GetData()

因此 Consumer 小部件使用的 TaskManager 的实例是不同的,因此其中的列表始终为空。

相反,您需要在 initState()..

中执行此操作
void initState() {
    TaskManager task = Provider.of<TaskManager>(context);
    task.GetData();
}

通过这样做,您可以在 Consumer 小部件使用的同一实例上调用 GetData() 方法。