Flutter:TextButton 中的 setState 不起作用

Yas*_*lte 2 android setstate dart flutter

onPress 上的骰子图像未更改
setState未设置随机数的骰子图像

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

var leftDiceNumber = 3; 当我为 leftDiceNumber 初始化它时只获取 dice3.png

请帮助在按下时获取随机图像


应用程序中没有错误

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 )
            ),),],
      ),);}}
Run Code Online (Sandbox Code Playgroud)

小智 5

那是因为你每次调用setState()它都会调用该build方法,并且你已经在方法leftDiceNumber = 3内部定义了build。因此,即使setState()更改了值,它也会再次设置为 3。

解决方案:移出var leftDiceNumber = 3;构建方法。

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