简体   繁体   English

Flutter:如何在streamSubscription.listen onData中返回一个小部件,这是无效的

[英]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:例如:

  1. Declare bool isLoading variable.声明bool isLoading变量。
  2. Change its value inside the stream listener like setState(() => isLoading = true);在 stream 监听器中更改其值,如setState(() => isLoading = true);
  3. Using the 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.

相关问题 Flutter - 手动触发 StreamSubscription onData - Flutter - Triggering StreamSubscription onData Manually Flutter BLoC - StreamSubscription 不监听已调度的事件 - Flutter BLoC - StreamSubscription not listen on dispatched event 如何将 void 函数从同一个小部件传递给另一个小部件,然后将相同的 void 函数从另一个小部件返回到同一个小部件中颤振 - how to pass the void function from same widget to another widget and then return the same void function from another widget to same widget in flutter Flutter StreamSubscription cancel()在无状态小组件中未取消 - Flutter StreamSubscription cancel() not canceling in Stateless widget 如何将 StreamSubscription 与 Flutter Cubit 一起使用 - How to use StreamSubscription with Flutter Cubit 如何在 Flutter AnimatedSize 小部件中监听调整大小事件 - How to listen for resize events in a Flutter AnimatedSize widget 如何退货 <Widget> []扑扑? - How to return <Widget>[ ] in flutter? 哪个高效? Flutter StreamBuilder 小部件与 Stream.Listen() 与 setState() - Which is efficient? Flutter StreamBuilder Widget vs Stream.Listen() with setState() Flutter - 如何连接 void 以构建小部件? - Flutter - How to connect void to build widget? 如何在颤振中返回小部件中的警报 - How to return Alert in widget in flutter
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM