如何在Flutter中实现ListView的页面加载时自动滚动?

3
我想为这个ListTile应用自动滚动。
  Container(
                      height: 70,
                      width: double.maxFinite,
                      child: ListView.builder(
                        controller: _controller,
                        key: itemKey,
                        itemCount: 10,
                        itemBuilder: (BuildContext context, int index) {
                          return ListTile(
                            title: Text('demo ${index + 1}'),
                          );
                        },
                      ),
                    ),

我声明了这个

  final itemKey = GlobalKey();
  final _controller = ScrollController();

我把这个放在了小部件构建之后...

  if (_controller.hasClients) {
      _controller.animateTo(_controller.position.maxScrollExtent,
          duration: const Duration(milliseconds: 500), curve: Curves.easeInOut);
    }
1个回答

1

您可以使用addPostFrameCallback在第一帧构建后对列表进行动画处理。

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      if (_controller.hasClients) {
        _controller.animateTo(_controller.position.maxScrollExtent,
            duration: const Duration(milliseconds: 500),
            curve: Curves.easeInOut);
      }
    });
  }

它能工作但遇到了问题。我该如何将其包装为StreamBuilder? 我尝试过了,但不再滚动。 - Tpp
仍然接受帮助 - Tpp
Stream builder需要超过1帧的时间来获取数据,这就是为什么在initState中使用它时无法滚动的原因。 - Yeasin Sheikh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接