简体   繁体   English

Flutter:TextButton 中的 setState 不起作用

[英]Flutter: setState in TextButton not working

Dice image not changing on onPress骰子图像在 onPress 上没有改变
setState not setting dice image for random number setState不为随机数设置骰子图像

child: Image.asset('images/dice$leftDiceNumber.png'), not working but child: Image.asset('images/dice$leftDiceNumber.png'),不工作但是
child: Image.asset('images/dice2.png'), is working that means hard code is working child: Image.asset('images/dice2.png'), is working 这意味着硬代码正在工作

var leftDiceNumber = 3; var leftDiceNumber = 3; getting only dice3.png as i initialize it for leftDiceNumber当我为 leftDiceNumber 初始化它时只得到 dice3.png

Please help for getting random image when onPress请帮助在 onPress 时获取随机图像


No errors in App 应用程序没有错误

class DicePage extends StatefulWidget { const DicePage({Key? key}): super(key: key); @override _DicePageState createState() => _DicePageState(); } class _DicePageState extends State<DicePage> { @override Widget build(BuildContext context) { var leftDiceNumber = 3; return Center( child: Row( children: [ Expanded( child: TextButton( onPressed: () { setState(() { leftDiceNumber = Random().nextInt(6) + 1; print(leftDiceNumber); // getting value in console }); }, child: Image.asset('images/dice$leftDiceNumber.png'), //child: Image.asset('images/dice1.png'), // ( works ) ),),], ),);}}

That is because every time you call setState() it calls the build method, and you have defined leftDiceNumber = 3 inside the build method.这是因为每次调用setState()时它都会调用build方法,并且您在build方法中定义leftDiceNumber = 3 So even though the setState() changes the value it again gets set to 3.因此,即使setState()更改了值,它也会再次设置为 3。

Solution: Move var leftDiceNumber = 3;解决方案:移动var leftDiceNumber = 3; outside the build method.在构建方法之外。

class _DicePageState extends State<DicePage> {
  var leftDiceNumber = 3;
  
@override
  Widget build(BuildContext context) {
    return YourWidget();
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM