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
相关产品推荐
相关产品推荐

