【问题标题】:How to show Flutter firebase realtime database on widgets with data updates using Stream builder?如何使用 Stream builder 在带有数据更新的小部件上显示 Flutter firebase 实时数据库?
【发布时间】:2022-02-22 18:11:51
【问题描述】:

我是第一次使用 Firebase。我的应用程序已成功连接到 firebase,我可以通过以下代码访问屏幕上的数据。我的问题是,当数据库中的值发生变化时,它应该在屏幕上进行更改,而无需按下任何按钮或其他东西。

stream:  FirebaseDatabase.instance.ref("app3-e0228-default-rtdb").onvalue,

当我使用上面的行时,屏幕上的数据将无法访问。我该怎么办?

      StreamBuilder(
                stream:  FirebaseDatabase.instance.ref("app3-e0228-default-rtdb").once().asStream(),

                builder: (context,AsyncSnapshot<dynamic>  snapshot) {
                  if (snapshot.connectionState == ConnectionState.done) {
                     DatabaseEvent databaseEvent = snapshot.data!; // ???? Get the DatabaseEvent from the AsyncSnapshot
                     var databaseSnapshot = databaseEvent.snapshot; // ???? Get the DataSnapshot from the DatabaseEvent
                     print('Snapshot: ${databaseSnapshot.value}');
                    return Text("${databaseSnapshot.value}");
                  } else {
                    return CircularProgressIndicator();
                  }
                }),

数据库

【问题讨论】:

    标签: firebase flutter dart firebase-realtime-database


    【解决方案1】:

    我发现的第一个问题在这里:

    stream: FirebaseDatabase.instance
        .ref("app3-e0228-default-rtdb")
        .once()
        .asStream(),
    

    您正在调用once(),这意味着您从数据库中读取了一次值(因此得名),然后将其转换为流。所以你的流将只有一个元素。

    如果您也想收听数据库并接收更新,请使用onValue

    stream: FirebaseDatabase.instance
        .ref("app3-e0228-default-rtdb")
        .onValue
    

    在您的builder 中,您将拥有一个包含数据库数据的DataSnapshot,您可以这样做:

    builder: (context, snapshot) {
      if (snapshot.connectionState == ConnectionState.done) {
        var databaseEvent = snapshot.data!; // ? Get the DatabaseEvent from the AsyncSnapshot
        var databaseSnapshot = databaseEvent.snapshot; // ? Get the DataSnapshot from the DatabaseEvent
        print('Snapshot: ${databaseSnapshot.value}');
        return LiveMatch();
      } else {
        return CircularProgressIndicator();
      }
    

    【讨论】:

    • 并且流也无法正常工作 ..like FirebaseDatabase.instance .ref("app3-e0228-default-rtdb") .onValue 如果我如上所述使用,则显示值但未更新.
    【解决方案2】:

    您是否实现了 streamSubscription 并尝试收听它? 每当发生更改时,StreamBuilder 都会自动更新数据。

    【讨论】:

    • 如何在上面的代码中订阅流?
    • 我在此之前读过这篇文章,但我无法理解如何将它与我的 firebase 数据库事件一起使用? @Ujjawal Maurya
    • 您可以在任何地方轻松找到正确使用 StreamBuilder 的方法。
    猜你喜欢
    • 1970-01-01
    • 2020-11-04
    • 2021-10-19
    • 2021-07-12
    • 2020-10-18
    • 2021-09-22
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多