.once() 从未使用实时数据库在 flutter 中触发 whenComplete()

.once() never fires whenComplete() in flutter using realtimedatabase

在 flutter web 中,

永远不会调用“In then”。我已经通过向 kDatabase 调用添加 async 和 await 并在没有异步的情况下调用它来尝试此操作。 whenComplete 块也从未被调用。

可能发生了什么?没有错误被捕获。任何帮助或观点将不胜感激。

 void getpostDetail(String? postID) {
    print("Before try");
    try {
        print("In try 1");
        assert(postID != null);
        print("In try 2");
        kDatabase
            .child('post')
            .child(postID!)
            .once()
            .then((DatabaseEvent event) {
          print("In then");
        }).catchError((e, stackTrace) {
          print("in catchError");
        }).whenComplete(() => print("In whenComplete"));
      }
    } catch (error) {
      print("In error");
    } finally {
      print("In finally");
    }
  }

更新: 我通过以下方式启用了日志:

FirebaseDatabase fd = FirebaseDatabase.instance;
fd.setLoggingEnabled(true);
DatabaseReference dr = fd.ref();
dr.child('post').child
.child(postID!)
.once()
.then

我明白了

03:36:33.833Z","description":"lets
repl","lanCode":"auto","parentkey":"-MxvCNmiJ9lRNX8XkwL4","retweetCount":0,"user":{"displayName":"Hunte
r","isVerified":false,"profilePic":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRzDG366qY7vXN
2yng09wb517WTWqp-oua-mMsAoCadtncPybfQ&s","userId":"va9C2IQ4ITf1zzfhKQvd7cZdncl2","userName":"@Hunterva9
c"},"userId":"va9C2IQ4ITf1zzfhKQvd7cZdncl2"}

并且 "In finally" 被调用。但是 "In then""in catchError""In whenComplete" 从未被调用过,而且我没有在需要的地方使用我的数据。

我尝试在 Chrome 上重现该问题,但无法重现。我的代码:

print("Before try");
try {
  print("In try 1");
  print("In try 2");
  database.ref('71163140/chats')
      .child('oF1b6J4Hz3NGzRb9RmSVFGJdcYi1')
      .once()
      .then((DatabaseEvent event) {
    print("In then");
  }).catchError((e, stackTrace) {
    print("in catchError");
  }).whenComplete(() => print("In whenComplete"));
} catch (error) {
  print("In catch");
} finally {
  print("In finally");
}

输出:

Before try

In try 1

In try 2

In finally

In then

In whenComplete

即使我尝试读取作为流的 non-existing 节点,这也是有意义的,因为读取 non-existing 节点不是错误。

我让它失败的唯一方法是在代码前添加 FirebaseDatabase.instance.goOffline(),在这种情况下,输出变为:

Error: [firebase_database/unknown] Error: Client is offline.

所以我不确定你的情况是怎么回事。您可能想看看更改库版本是否有任何不同,但我认为最近这方面没有任何变化。