为什么在build方法之前声明的变量“ButtonCount”的值在flutter中不保留其值

问题描述 投票:0回答:1

根据我对flutter和dart的理解,当重建一个widget或者当我使用热重载时,在构建函数之前声明的变量的值被保留。但是,我的代码并非如此。当我单击“热重载”时,“ButtonCount”的值将重置为默认零,而不是在多次单击后保留该值。

`导入'包:flutter/material.dart';

无效主(){ 返回运行应用程序( 材料应用程序( 主页: 脚手架( 背景颜色:颜色.红色, 应用栏:应用栏( 标题:文本('Dicee'), 背景颜色:颜色.蓝色, ), 正文:DicePage(), ), ), ); }

DicePage 类扩展了 StatefulWidget {

@覆盖 状态 createState() => _DicePageState();

}

类 _DicePageState 扩展状态 { int ButtonCount=0;

@覆盖 小部件构建(BuildContext上下文){ int ButtonCount1=0; 返回容器( 孩子:中心( 孩子:行( 孩子们:[

          Expanded(
              child: Padding(
                padding: const EdgeInsets.all(16.0),
                child: TextButton(
                    onPressed: () {
                      ButtonCount++;
                      print(ButtonCount);
                    },
                    child: Image.asset("Pictures/dice1.png")),
              )),
          Expanded(child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: TextButton(
                onPressed: () {
                  ButtonCount1++;
                  print(ButtonCount1);
                },
                child: Image.asset("Pictures/dice2.png")),
          )),

        ],
      ),
    )
);
;

} }

`

我期望在点击四次按钮将“ButtonCount”的值增加到四并单击热重载后,ButtonCount的值应该仍然是四并且不会重置为零。

flutter dart statelesswidget
1个回答
0
投票

在 Flutter 中热重载期间,ButtonCount 的值会重置,因为重新构建了 widget 树,这会再次调用 _DicePageState 类的构造函数。这会导致 ButtonCount 恢复到其初始值(在您的情况下为 0)。要在热重载期间保持该值,请将 ButtonCount 声明为静态变量:

static int buttonCount = 0;

此方法对于开发过程中的简单状态持久性很有用,但可能并不适合所有场景。

© www.soinside.com 2019 - 2024. All rights reserved.