flutter 如何使“SingleChildScrollView”滚动到从“StreamBuilder”中提取的最后一个项目?

brc7rcf0  于 2023-02-05  发布在  Flutter
关注(0)|答案(1)|浏览(205)

我使用流构建器从远程数据库获取消息列表。
问题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
                  ])
                )
              )
jc3wubiy

jc3wubiy1#

你可以做的是在你的SingleChildScrollView中使用ScrollController。当你成功地从服务器获取数据时,你可以使用控制器滚动到滚动视图的底部。
例如:

scrollController.jumpTo(scrollController.position.minScrollExtent)

您也可以使用animateTo而不是jumpTo。我推荐使用flutter docs来获得更多信息。

相关问题