在 CustomScrollView 中使用 StreamBuilder 和 SliverLists

Uma*_*Uma 13 dart flutter

我正在尝试使用 aStreamBuilder来获取数据,并且我想SliverList在 a 中使用all来显示该数据,CustomScrollView以便我可以利用CustomScrollView.

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

die*_*per 11

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

    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(),
                    );
            },
          ),
        );
      }
    }
Run Code Online (Sandbox Code Playgroud)


Son*_*bye 5

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

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

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