【发布时间】:2019-01-18 01:27:10
【问题描述】:
我正在尝试使用StreamBuilder 来获取数据,并且我想在CustomScrollView 中使用SliverList 来显示该数据,这样我就可以利用CustomScrollView 附带的功能。
关于如何实现这一目标的任何想法?
【问题讨论】:
我正在尝试使用StreamBuilder 来获取数据,并且我想在CustomScrollView 中使用SliverList 来显示该数据,这样我就可以利用CustomScrollView 附带的功能。
关于如何实现这一目标的任何想法?
【问题讨论】:
在这种情况下,可以重新渲染整个 CustomScrollView。但是,如果您只想在 CustomScrollView 中重新渲染一个 Sliver,请这样做:
CustomScrollView(
slivers: <Widget>[
StreamBuilder(
stream: stream,
builder: (ctx, snapshot) {
return SliverToBoxAdapter(
child: Text('sliver box'),
);
},
)
],
),
请记住始终在 StreamBuilder 中返回 Sliver。
【讨论】:
当然,这很简单,这里有一个代码示例:
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(),
);
},
),
);
}
}
【讨论】:
flutter run -d chrome --release 将 ScrollView 放在 streambuilder 中修复了所有问题!