微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在flutter中调用_scrollController时仅更新一次整数值?

如何解决如何在flutter中调用_scrollController时仅更新一次整数值?

我正在用_scrollController实现Listview.separated来实现分页。一次滚动一次,整数int page只需要更新一次,但是在我的情况下,一次滚动一次,整数_scrollController.addListener(() { double maxScroll = _scrollController.position.maxScrollExtent; double currentScroll = _scrollController.position.pixels; double delta = MediaQuery.of(context).size.height * 0.25; if(maxScroll - currentScroll < delta){ page = page +1; print("page number checking right Now"); print(page); } }); 只需更新20次。

如果有一次滚动尝试,我应该如何确保仅将此号码更新一次?

CODE

{{1}}

解决方法

我有同样的问题。您可以尝试使用它

class _ItemsState extends State<Items> with AutomaticKeepAliveClientMixin {
  final _controller = ScrollController();
  bool _isLoading = false;

  @override
  Widget build(BuildContext context) {
    super.build(context);
    return NotificationListener<ScrollEndNotification>(
      onNotification: (onNotification) {
        /// When the  user croll to the end of the list
        if (_controller.position.extentAfter < 50 &&
            context.read<StateManager>().currentState !=
                NotifierState.completed) {
          if (!_isLoading) {
            context.read<StateManager>().loadingMoreItem();
            setState(() {
              _isLoading = true;
            });
            Future.delayed(const Duration(milliseconds: 0)).then((value) {
              _controller
                  .animateTo(
                      onNotification.metrics.maxScrollExtent + kToolbarHeight,duration: const Duration(milliseconds: 100),curve: Curves.ease)
                  .then((value) {
                context
                    .read<StateManager>()
                    .nextState()
                    .then((value) => _isLoading = false);
              });
            });
          }
        }
        return false;
      },child: RefreshIndicator(
        onRefresh: context.watch<StateManager>().reloadItem,color: Colors.white,child: ListView.builder(
          padding: const EdgeInsets.symmetric(horizontal: 8.0,vertical: 8.0),addAutomaticKeepAlives: true,shrinkWrap: true,controller: _controller,itemBuilder: (context,index) {
            if (index == widget.products.length) {
              return LoadingItemWidget();
            } else
              return ProductWidget(
                product: widget.products[index],);
          },itemCount: widget.products.length + 1,//itemExtent: 105,),);
  }

  @override
  bool get wantKeepAlive => true;
}
,

执行此操作的一种方法是这样。

class _MyWidgetState extends State<MyWidget> {
  
  final _scrollController = ScrollController();
  int page = 0;
  double lastMaxScroll = 0;
  int numberOfItems = 100;
  
  @override
  void initState(){
    _scrollController.addListener(() {
      double maxScroll = _scrollController.position.maxScrollExtent;
      double currentScroll = _scrollController.position.pixels;
      double delta = MediaQuery.of(context).size.height * 0.25;

      if(maxScroll - currentScroll < delta && lastMaxScroll != maxScroll){
        page = page + 1;
        lastMaxScroll = maxScroll;

        print("page number checking right now");
        print(page);
        fetchMoreData();

      }
    });
    super.initState();
  }
  
  void fetchMoreData() async {
    await Future.delayed(Duration(seconds: 3));
    setState((){
      numberOfItems += 100;
    });
  }
  
  @override
  Widget build(BuildContext context) {
    return ListView.separated(
      controller: _scrollController,itemCount: numberOfItems,itemBuilder: (ctx,index){
        return Padding(
          padding: EdgeInsets.all(15),child: Text('Item $index'),);
      },separatorBuilder: (_,__){
        return const SizedBox(height: 2);
      }
    );
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?