Flutter:TextButton 中的 setState 不起作用

Flutter: setState in TextButton not working

onPress 时骰子图像没有改变
setState 未设置随机数的骰子图像

child: Image.asset('images/dice$leftDiceNumber.png'), 不工作但是
child: Image.asset('images/dice2.png'), 正在工作,这意味着硬代码正在工作

var leftDiceNumber = 3; 只得到 dice3.png 因为我为 leftDiceNumber

初始化它

请帮忙获取onPress时的随机图片


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 )
            ),),],
      ),);}}

那是因为你每次调用setState()都会调用build方法,而你在build方法里面定义了leftDiceNumber = 3。因此,即使 setState() 更改了值,它也会再次设置为 3。

解决方法:var leftDiceNumber = 3;移动到构建方法之外。

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