在CustomScrollView中使用StreamBuilder和SliverLists

时间:2019-01-18 01:27:11

标签: dart flutter

我正在尝试使用StreamBuilder来获取数据,并且我想在所有SliverList中使用CustomScrollView来显示数据,因此我可以利用随附的功能CustomScrollView

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:3)

当然,这很容易,这里有一个代码示例:

    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(),
                    );
            },
          ),
        );
      }
    }