You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter按钮onPress绑定后loadMore函数启动即连续调用问题排查

问题分析与解决方案

嘿,我一眼就揪出问题所在啦!

你当前的代码里,onPressed的写法有个关键错误:

onPressed: loadMore(page: page = page + 1)

这种写法会导致Widget一构建就立刻执行loadMore函数,而不是等你点击按钮的时候才触发。而且你直接在这里对page做了page = page +1的赋值操作,每次Widget重建(比如页面状态变化)都会让页码自动递增,这就是为什么启动时函数就自动调用、页码停不下来的原因。

正确的写法应该是这样:

把函数调用包裹在一个匿名函数里,这样只有点击按钮时才会执行loadMore:

onPressed: () {
  loadMore(page: page += 1);
}

如果page是State类里的状态变量,更规范的做法是用setState来更新页码,确保UI能正确响应状态变化:

onPressed: () {
  setState(() {
    page += 1;
  });
  loadMore(page: page);
}

原理说明:

onPressed需要接收的是一个VoidCallback类型的参数——也就是一个无参数、无返回值的函数对象。你之前直接写loadMore(...),相当于把这个函数执行后的结果(如果loadMore返回void,那就是null)传给了onPressed,这完全不符合要求。而用匿名函数() { ... }的话,传递的是函数本身,只有当按钮被点击时,这个匿名函数才会被执行,里面的loadMore调用和页码更新才会触发。

内容的提问来源于stack exchange,提问作者serdar aylanc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:01:50