我正在尝试使用StreamBuilder来获取数据,并且我希望在CustomScrollView中使用SliverList来显示这些数据,这样我就可以利用CustomScrollView附带的功能。
关于如何实现这一点有什么想法吗?
发布于 2019-01-18 10:05:50
当然,这很简单,这里有一个代码示例:
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(),
);
},
),
);
}
}发布于 2020-03-25 05:29:20
在这种情况下,可以重新呈现整个CustomScrollView。但是,如果您只想在CustomScrollView中重新渲染一个狭长片段,请执行以下操作:
CustomScrollView(
slivers: <Widget>[
StreamBuilder(
stream: stream,
builder: (ctx, snapshot) {
return SliverToBoxAdapter(
child: Text('sliver box'),
);
},
)
],
),请记住,始终在StreamBuilder中返回一个小块。
https://stackoverflow.com/questions/54246594
复制相似问题