firebase Flutter UI未更新新数据

jrcvhitl  于 2023-05-18  发布在  Flutter
关注(0)|答案(1)|浏览(102)

我已经使用Flutter构建了一个友谊应用程序,用户每周都会收到一次新的友谊匹配。同时,比赛屏幕显示下一场比赛的倒计时。我正在使用flutter_counter_timer库来实现定时器。“new match”和“time to next match”都会在Firebase集合中更新,并通过Firebase快照侦听DB更改而自动反映在应用中。
问题:在测试时,这工作正常。然而,如果我在一定的延迟[比如1+天]后更新数据库,“下一场比赛的时间”或“新比赛”不会在应用程序上更新。我不知道为什么会发生这种情况-我正在为数据库中的每个新更新设置状态,而不是取消订阅Firebase快照。有什么想法吗
下面是我如何获取/侦听下一次匹配的时间的片段[获取/侦听新匹配的方法类似,两者都通过setState函数更新UI]

getTimeToNextMatch() async {

  return FirebaseFirestore
      .instance
      .collection("endTime")
      .doc(“docID”)
      .snapshots()
      .listen((result) {

        setState(() {
          timeToNextMatch = result.data()['timeToNextMatch'];
          isLoading = false;
        });

      });
}

我已经尝试发送无效的倒计时时间或匹配-但他们都没有重现这个问题。还要注意的是,即使应用程序处于休眠状态,并且数据库在几天后更新,也会发生此问题。

3htmauhk

3htmauhk1#

late StreamSubscription<DocumentSnapshot> _subscription;

Future<void> getTimeToNextMatch() async {
  try {
    _subscription = FirebaseFirestore
      .instance
      .collection("endTime")
      .doc("docID")
      .snapshots()
      .listen((result) {
        if (result.hasData) {
          setState(() {
            timeToNextMatch = result.data()['timeToNextMatch'];
            isLoading = false;
          });
        }
      }, onError: (error) {
        print('Error: $error');
      }, onDone: () {
        print('Stream closed');
      });
  } catch (e) {
    print(e);
  }
}

@override
void dispose() {
  _subscription?.cancel();
  super.dispose();
}

相关问题