【问题标题】:Stream Builder update the data on top of previous data in FlutterStream Builder 在 Flutter 中的先前数据之上更新数据
【发布时间】:2020-11-04 22:47:51
【问题描述】:

我正在使用 StreamBuilder 从 firebase 实时数据库中获取数据(我经常更改它。)所以我希望我的 ListView 相应地更新视图。但是假设我有 3 个数据并且我又添加了一个,然后在我重新打开页面之前显示所有 4 个数据低于前 3 个数据(即 7),它正在做什么。

这是我的代码:


 Widget build(BuildContext context) {

  var ref =  FirebaseDatabase.instance.reference().child('Orders');
  List<PendingOrderLoader> pendingOrderLoaderList1 = [];

  
    return Scaffold(
      body: SafeArea(
          child: Column(
            children: <Widget>[

              Container(
                height: 200,
                child: StreamBuilder(
                  stream: FirebaseDatabase.instance.reference().child('Orders').onValue,
                    builder: (BuildContext context, snapshot){
                      if (snapshot.hasData && !snapshot.hasError && snapshot.data.snapshot.value!=null) {
                        DataSnapshot snapshot1 = snapshot.data.snapshot;

                        final key = snapshot1.value.keys;
                        for(var i in key)
                        {
                          print(i);
                          PendingOrderLoader pendingOrderLoader1 = new PendingOrderLoader(
                          
                            snapshot1.value[i]['OrderID'],
                            snapshot1.value[i]['Date'],
                            snapshot1.value[i]['Time'],
                           
                          );
                          pendingOrderLoaderList1.add(pendingOrderLoader1);
                        }
                        return snapshot.data.snapshot.value == null
                            ? SizedBox()

                            : ListView.builder(
                          scrollDirection: Axis.vertical,
                          itemCount: pendingOrderLoaderList1.length,
                          itemBuilder: (context, index) {
                            return Text("      "+
                                pendingOrderLoaderList1[index].OrderID
                            );
                          },
                        );
                      } else {
                        return   Center(child: CircularProgressIndicator());
                      }
                    }
                ),
              )


            ],
          )),

    );

  }

之前有 3 个数据,删除 1 个后,它会在其下方显示新数据。 我希望它只显示新数据。

【问题讨论】:

    标签: flutter dart firebase-realtime-database


    【解决方案1】:

    定义这个列表

    列出pendingOrderLoaderList1 = [];

    接收数据后在builder内部

    像这样:

    Widget build(BuildContext context) { 
      var ref =  FirebaseDatabase.instance.reference().child('Orders');
        return Scaffold(
          body: SafeArea(
            child: Column(
             children: <Widget>[
    
               Container(
                height: 200,
                 child: StreamBuilder(
                  stream: FirebaseDatabase.instance.reference().child('Orders').onValue,
                    builder: (BuildContext context, snapshot){
                      if (snapshot.hasData && !snapshot.hasError && snapshot.data.snapshot.value!=null) {
                        DataSnapshot snapshot1 = snapshot.data.snapshot;
                        List<PendingOrderLoader> pendingOrderLoaderList1 = [];
                        final key = snapshot1.value.keys;
                        for(var i in key)
                        {
                          print(i);
                          PendingOrderLoader pendingOrderLoader1 = new PendingOrderLoader(
                          
                            snapshot1.value[i]['OrderID'],
                            snapshot1.value[i]['Date'],
                            snapshot1.value[i]['Time'],
                           
                          );
                          pendingOrderLoaderList1.add(pendingOrderLoader1);
                        }
                        return snapshot.data.snapshot.value == null
                            ? SizedBox()
    
                            : ListView.builder(
                          scrollDirection: Axis.vertical,
                          itemCount: pendingOrderLoaderList1.length,
                          itemBuilder: (context, index) {
                            return Text("      "+
                                pendingOrderLoaderList1[index].OrderID
                            );
                          },
                        );
                      } else {
                        return   Center(child: CircularProgressIndicator());
                      }
                    }
                ),
              )
    
    
            ],
          )),
    
    );
    
      }
    

    【讨论】:

      猜你喜欢
      • 2019-10-01
      • 1970-01-01
      • 2021-10-02
      • 2017-11-30
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      相关资源
      最近更新 更多