【问题标题】:Using a StreamBuilder and a SliverLists In CustomScrollView在 CustomScrollView 中使用 StreamBuilder 和 SliverLists
【发布时间】:2019-01-18 01:27:10
【问题描述】:

我正在尝试使用StreamBuilder 来获取数据,并且我想在CustomScrollView 中使用SliverList 来显示该数据,这样我就可以利用CustomScrollView 附带的功能。

关于如何实现这一目标的任何想法?

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    在这种情况下,可以重新渲染整个 CustomScrollView。但是,如果您只想在 CustomScrollView 中重新渲染一个 Sliver,请这样做:

    CustomScrollView(
        slivers: <Widget>[
          StreamBuilder(
            stream: stream,
            builder: (ctx, snapshot) {
               return SliverToBoxAdapter(
                 child: Text('sliver box'),
               );
            },
          )
        ],
      ),
    

    请记住始终在 StreamBuilder 中返回 Sliver。

    【讨论】:

      【解决方案2】:

      当然,这很简单,这里有一个代码示例:

          class SampleStreamBuilder extends StatelessWidget {
            Stream<List<String>> loadData() async* {
              await Future.delayed(Duration(seconds: 3));
              yield List.generate(10, (index) => "Index $index");
            }
      
            @override
            Widget build(BuildContext context) {
              return Scaffold(
                body: StreamBuilder<List<String>>(
                  stream: loadData(),
                  builder: (context, snapshot) {
                    return snapshot.hasData
                        ? CustomScrollView(
                            slivers: [
                              SliverList(
                                delegate: SliverChildBuilderDelegate((context, index) {
                                  return ListTile(
                                    title: Text(snapshot.data[index]),
                                  );
                                }, childCount: snapshot.data.length),
                              )
                            ],
                          )
                        : Center(
                            child: CircularProgressIndicator(),
                          );
                  },
                ),
              );
            }
          }
      

      【讨论】:

      • 谢谢!我将 Streambuilder 放在 CustomScrollView 中,后来出现了我一开始没有注意到的错误,因为我无法调试并且不得不使用 flutter run -d chrome --release 将 ScrollView 放在 streambuilder 中修复了所有问题!
      • 如果你不想重新渲染整个CustomScrollView怎么办?如何让 StreamBuilder 只更新一个 Sliver?
      • SliverToBoxAdapter > StreamBuilder > 小部件
      • 如果从firestore获取数据会报错?
      • 如果来自 firestore 的数据是快照,您需要将 StreamBuilder 的数据类型留空或将 StreamBuilder> 更改为 StreamBuilder>>。跨度>
      猜你喜欢
      • 1970-01-01
      • 2021-08-01
      • 2020-01-22
      • 2018-12-21
      • 1970-01-01
      • 2019-01-05
      • 2021-08-27
      • 1970-01-01
      • 2019-07-25
      相关资源
      最近更新 更多