根据我对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 中热重载期间,ButtonCount 的值会重置,因为重新构建了 widget 树,这会再次调用 _DicePageState 类的构造函数。这会导致 ButtonCount 恢复到其初始值(在您的情况下为 0)。要在热重载期间保持该值,请将 ButtonCount 声明为静态变量:
static int buttonCount = 0;
此方法对于开发过程中的简单状态持久性很有用,但可能并不适合所有场景。