gpt4 book ai didi

firebase - flutter Firebase : How to remove firebase listener when using stream builder?

转载 作者:IT王子 更新时间:2023-10-29 07:11:14 24 4
gpt4 key购买 nike

关于 StreamBuilder 的每个示例都以 StatelessWidget 开头,即使在 flutter 示例中也是如此,但是如何在 StatelessWidget< 中取消订阅 小部件?例如,我正在浏览 firestore example .

class MessageList extends StatelessWidget {
MessageList({this.firestore});

final Firestore firestore;

@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: firestore.collection('messages').snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) return const Text('Loading...');
final int messageCount = snapshot.data.documents.length;
return ListView.builder(
itemCount: messageCount,
itemBuilder: (_, int index) {
final DocumentSnapshot document = snapshot.data.documents[index];
return ListTile(
title: Text(document['message'] ?? '<No message retrieved>'),
subtitle: Text('Message ${index + 1} of $messageCount'),
);
},
);
},
);
}
}

现在如何取消监听 firestore.collection('messages').snapshots() 流?

我在我的应用程序中使用实时数据库,我就是这样做的

class MessgaeView extends StatefulWidget {
final String _chatId;
MessgaeView(this._chatId);

@override
_MessgaeViewState createState() => _MessgaeViewState();
}

class _MessgaeViewState extends State<MessgaeView> {
Stream<Event> _messageStream;
@override
void initState() {
_messageStream = _database
.reference()
.child("message/${widget._chatId}")
.limitToLast(1)
.onChildAdded;
super.initState();
}

@override
void dispose() {
_messageStream.drain();
super.dispose();
}
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: _messageStream,
builder: (context, snapshot) {
if (!snapshot.hasData) return CupertinoActivityIndicator();
final message =
(snapshot.data.snapshot as DataSnapshot).value['message'];
return Text(message);
});
}
}

最佳答案

只需将之前的流实例替换为null即可。

这将需要类似于以下某处的代码:

setState(() {
_messageStream = null;
});

这样做将停止收听流。但是 StreamBuilder 仍将保留之前的值。

关于firebase - flutter Firebase : How to remove firebase listener when using stream builder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56648240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com