首页 > 解决方案 > Flutter List View Builder 滚动控制器不起作用

问题描述

我有一个类似 Instagram 的应用程序,顶部有故事,然后提供数据。我希望我的提要列表视图滚动到函数的顶部(即单击按钮或其他)。

  ScrollController _feedController;
 
  @override
  void initState() {
    _feedController = new ScrollController();
    _feedController.addListener(() {
      print("scrolling");
    });
    _fetchData();
    super.initState();
  }

  // This is in the build function.
  return ListView.builder(
      padding: EdgeInsets.all(0.0),
      shrinkWrap: true,
      controller: _feedController,
      physics: ClampingScrollPhysics(),
      itemCount: _listFeed.length,
      itemBuilder: (BuildContext context, int index) {
        return ProductWidget(
          product: _listFeed[index],
          navigateOnImage: true,
        );
      },
    );

  // This function should scroll the list view to the top.
  refresh() {
    _fetchData();
    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      _feedController.animateTo(
        0.0,
        duration: Duration(milliseconds: 300),
        curve: Curves.easeOut,
      );
    });
    print("home screen refreshed");
  }

我在 initState() 上初始化我的控制器并添加了一个监听器。侦听器和控制器的 animateTo() 函数都不起作用。我也尝试过使用 WidgetsBinding.instance.addPostFrameCallback()。我错过了什么.. ??

标签: flutterlistviewscrollscrollcontroller

解决方案


您需要在 ScrollController 的 addListener 中调用 fetchData 函数。下面是一个正确使用 ScrollController 的例子:

@override
  void initState() {
    _feedController = new ScrollController()..addListener(function);
    super.initState();
  }


void function(){
   print("scrolling");
   _fetchData();
}

推荐阅读