【问题标题】:Flutter Firebase stops listening after push and pop operationFlutter Firebase 在 push 和 pop 操作后停止监听
【发布时间】:2020-09-08 22:59:25
【问题描述】:

我正在使用 on child added listener 和 on child changed listener 将 Firebase 数据保存在列表中,效果很好,但是当我执行推送操作并使用 pop 返回屏幕时,听众停止收听。 有什么解决方案可以解决这个问题。

我使用了 Stackoverflow 中的这段代码:Code

【问题讨论】:

  • 请出示您的推送和弹出代码。另外,您是否有任何取消侦听器的代码?
  • 使用 StreamSubscription 取消监听 我的推送码 Navigator.push(context, MaterialPageRoute(builder: (context) => SweetsDetail(sweets))) 我的流行码 Navigator.of(context).pop(true)

标签: flutter firebase-realtime-database dart


【解决方案1】:

抱歉这个愚蠢的帖子,我是新来的,我通过在侦听器中使用 Future 方法解决了这个问题。

@GrahamD 你可以在这里找到我的代码。

我的代码:

var childAddedListener;
var childChangedListener;

@override

void initState(){

FirebaseDatabase database;
database = FirebaseDatabase.instance;
database.setPersistenceEnabled(true);
database.setPersistenceCacheSizeBytes(10000000);

reference = database.reference().child('Sweets');
childAddedListener = reference.onChildAdded.listen(_onEntryAddedShop);
childChangedListener = reference.onChildChanged.listen(_onEntryChangedShop);

super.initState();

}

关于子添加的侦听器

Future _onEntryAddedShop(Event event) {
setState(() {
  itemsShop.add(Sweets.fromSnapshot(event.snapshot));
});

}

关于孩子改变了听众

Future _onEntryChangedShop(Event event) {
print('Child Changed');
var old = itemsShop.singleWhere((entry) {
  return entry.id == event.snapshot.key;
});
setState(() {
  itemsShop[itemsShop.indexOf(old)] = Sweets.fromSnapshot(event.snapshot);
});
getItemIds();

}

在 dispose 中取消它们

@override
dispose() {
  childAddedListener.cancel();
  childChangedListener.cancel();
  super.dispose();
}

【讨论】:

  • 很高兴听到您将其整理出来。 ?
猜你喜欢
  • 2016-09-19
  • 2021-10-30
  • 1970-01-01
  • 2023-03-14
  • 2013-03-13
  • 1970-01-01
  • 2019-02-06
  • 2018-08-04
  • 1970-01-01
相关资源
最近更新 更多