我使用流构建器从远程数据库获取消息列表。
问题1)当hasData
时,我希望SingleChildScrollView
向下滚动到我希望在build
中显示的最后一条消息,以便用户看到最后一条消息。
如何做到这一点?
问题2)如何setState((){})
从StreamBuild
获取的项目数?
@override
Widget build(BuildContext context) {
return StreamBuilder(
key: _streamBuilderKey,
stream: ClassifiedAdMessage.getAdMessagesStream(adId: widget.adId),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
}
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return const CircularProgressIndicatorWithOptions();
default:
if (snapshot.data!.docs.isEmpty) {
return const Center(child: Text("No message so far"));
}
final messages = snapshot.data!.docs.map((doc) {
final map = doc.data();
return ClassifiedAdMessage.fromMap(map);
});
// blah blah
}
return Scaffold(
appBar: AppBar(),
body: SingleChildScrollView(
controller: _scrollController,
child: Column(
children: [
// blah blah
])
)
)
1条答案
按热度按时间jc3wubiy1#
你可以做的是在你的
SingleChildScrollView
中使用ScrollController
。当你成功地从服务器获取数据时,你可以使用控制器滚动到滚动视图的底部。例如:
您也可以使用
animateTo
而不是jumpTo
。我推荐使用flutter docs来获得更多信息。