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

Flutter中TextButton无法使用setState()的问题求助

Flutter按钮中使用setState报错的原因与修复

你遇到的问题核心是onPressed参数的类型不匹配:

  • onPressed要求接收一个VoidCallback类型的对象,也就是一个没有参数、返回值为void的函数。
  • 你直接写setState(() { logPage = false; })时,是立刻执行了setState函数,而setState的返回值是void,把void赋值给需要函数对象的onPressed,就会触发"This expression has a type of 'void' so its value can't be used."的错误。

正确写法

只需要用匿名函数把setState包裹起来,让onPressed拿到的是函数对象,而不是函数执行的结果:

TextButton(
  style: TextButton.styleFrom(
    fixedSize: Size(
        MediaQuery.of(context).size.width / 2, 100),
  ),
  onPressed: () { // 用匿名函数包裹setState
    setState(() {
      logPage = false;
    });
  },
  child: const Text(
    "Sign Up",
    style: TextStyle(fontSize: 20),
  ),
)

如果逻辑简单,还可以用箭头函数简写:

onPressed: () => setState(() => logPage = false),

这样修改后,当按钮被点击时,才会执行匿名函数里的setState,修改logPage变量并触发页面重建,更新显示内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:29:55