[英]Flutter: How to return a widget in streamSubscription.listen onData, which is void
I'm trying to return a widget in the streamSubscription.listen's onData callback.我试图在 streamSubscription.listen 的 onData 回调中返回一个小部件。 However, the
Text
widget in the example below never renders.但是,下面示例中的
Text
小部件永远不会呈现。 I think this is because the onData method is of void type.我认为这是因为 onData 方法是 void 类型。
How do I return a widget in response to stream data?如何返回小部件以响应 stream 数据?
@override
Widget build(BuildContext context) {
Stream<List<DocumentSnapshot>> stream = geo
.collection(collectionRef: ref)
.within(center: center, radius: radius, field: field);
stream.listen((List<DocumentSnapshot> documentList) {
return Text('this text never renders');
});
return Text("loading");
}
You cannot return a Widget
there.你不能在那里返回一个
Widget
。
You can use setState()
instead, with a bool
value.您可以使用
setState()
代替,带有bool
值。
For example:例如:
bool isLoading
variable.bool isLoading
变量。setState(() => isLoading = true);
setState(() => isLoading = true);
isLoading
's value, render your widget like:isLoading
的值,将您的小部件呈现为:Container(
child: isLoading ? Text("loading") : Text('Not Loading, some Data here');
)
Alternatively, you can use a ValueListenableBuilder
or better, a StreamBuilder
.或者,您可以使用
ValueListenableBuilder
或更好的StreamBuilder
。
Try this尝试这个
@override
Widget build(BuildContext context) {
Stream<List<DocumentSnapshot>> stream = geo
.collection(collectionRef: ref)
.within(center: center, radius: radius, field: field);
return StreamBuilder(
stream: stream,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Text("Loading...");
}
return Text('this text never renders');
}
);
}
You can use StreamBuilder , It will return Widget as you expect您可以使用StreamBuilder ,它将按您的预期返回 Widget
StreamBuilder<List<DocumentSnapshot>>(
stream:
geo.collection(collectionRef: ref).within(center: center, radius: radius, field: field),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Text("loading");
} else {
return Text('this text never renders');
}
},
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.