当前位置: 首页 > 面试题库 >

如何在一个ListView中使用多个StreamBuilder

郭易安
2023-03-14
问题内容

所以我正在一个项目中,我想要一个包含多个数据流的列表视图。我正在寻找的是这样的东西,但是所有这些都需要在一个列表视图中滚动。

我正在接收的数据流来自firebase,并且该变量myData是firebase集合的实例。我能够为单个流构建一个列表,所以我知道实例是正确的,我不想共享它,因为当前数据库规则处于测试模式。

流列表

此代码使我可以ListView从单个流构建单个对象,并且可以按预期工作。

Container(
  child: StreamBuilder<QuerySnapshot>(
  stream: myData,
  builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
    if (snapshot.hasError)
      return new Text('Error: ${snapshot.error}');
    switch (snapshot.connectionState) {
      case ConnectionState.waiting: return new Text('Loading...');
      default:
        return new ListView(
          children: snapshot.data.documents.map((DocumentSnapshot document) {
            return Text(document['color']);
          }).toList(),
        );
      }
    },
  ),
);

从这里开始,我觉得我有2种选择:1)构建并ColumnStreamBuilder允许返回的a中返回a
ListView。2)或将一个List空的列表放置在ListView的子级中,并使用StreamBuilder以外的其他内容从firebase添加到列表中,因为它需要返回的Widget。(除了StreamBuilder,我不知道其他方法)任何想法都将受到欢迎。

这是我的第一个想法的代码。我希望您能看到它如何扩展。通过返回色谱柱,我可以建立一种流体ListView。问题在于它不会从Firebase获取数据,唯一的结果是CircularProgressIndicator

ListView(
  children: <Widget>[
    StreamBuilder(
      stream: myData,
      builder: (context, snapshot) {
        if (!snapshot.hasData) return CircularProgressIndicator();
        return Column(
          children: List<Widget>.generate(3, (index) {
            return Habit(
              habit: snapshot.data.documents['index']['habit'],
              icon: snapshot.data.documents['index']['icon'],
              text: "figure this out later",
              color: snapshot.data.documents['index']['color'],
              complete: false, // figure this out later
            );
          }),
        );
      }
    ),
    //Second Stream here
  ],
)

如果可以的话,请帮忙,我已经解决了2到3天,并且没有任何朋友/同事要求理解飞镖/颤振。


问题答案:

您检查提供程序包了吗?你可以用多个Stream通过的StreamProviderMultiProvider和消费的所有数据流的变化。

不知道细节,可能会想到这样的小部件:

Widget build(BuildContext context) {
  return MultiProvider(
    providers: [
      StreamProvider.controller(builder: (_) => StreamController<CollectionA>()),
      StreamProvider.controller(builder: (_) => StreamController<CollectionB>()),
    ],
    child: Consumer2<CollectionA, CollectionB>(
      builder: (context, CollectionA collectionA, CollectionB collectionB, _) {

      },
    ),
  );
}


 类似资料:
  • 我正在尝试在我的列表中显示在EditText中收集的3个数据。在执行按钮时。如果有3个字段要添加,它们将单独存储给我。我可以在我的代码中做些什么来使其统一为列表中的单个字段?示例:姓名:薛西斯年龄:14描述罪行:当我离开学校时,他朝我吐口水。 当您点击保存按钮时: 你所期待的Jorge 14当我离开学校时,他向我吐口水(列表中的一行)现在发生的事情Jorge 14当我离开学校时,他向我吐口水。(列

  • 我有一个ApplicationInfo类型的列表和另一个String类型的ArrayList。我想在listView中列出这两者。我可以将ArrayAdapter(ApplicationInfo)和Array适配器(String)扩展到ApplicationAdapter吗。班这是我当前的代码,只显示ApplicationInfo。 ApplicationAdapter.class 所有应用程序活

  • 我将编写此查询,它在Console中工作。sql或Workbench中,但当我在@Query中使用它时,我得到了一个语法错误! 在我的IDE中,错误是在下次选择

  • 问题内容: 我目前正在用Java编写一个大型项目,其中包含许多类,有些类很小,只用很少的方法表示对象。我的主班有一个记录器,它运行良好。我希望所有类只能使用一个记录器(带有一个控制台附加程序)。我试图将对记录器的引用传递给不同的类,但是看起来不正确。此外,有时我在不运行main的情况下在类上运行测试,因此未针对其他类初始化记录器。 我的意思是,如何做到这一点的最佳方法是如何从不同的类登录到一个日志

  • 我有一个使用RabbitMQ(spring-boot-starter-amqp)的Spring应用程序。 我想知道是否可以跨不同的类使用RabbitListener注释。 我目前有两个类:和 <代码>接收器。java: : RabbitMqConfig。java: 当我使用RabbitMQ管理工具向FanoutExchange发布消息时,类中的不会将任何内容记录到控制台。但是,如果此方法在类中,则

  • 问题内容: 我在扩展活动的类中使用4list视图。我必须执行其他列表项单击功能。我可以使用以下方法代码吗?那么如何设置一个为多个? 问题答案: 为不同的列表视图设置不同的适配器。我以两个列表视图为例。因此,请为这两个安装两个适配器。并且setOnItemClick(context)将如下所示。