flutter - 复选框刷新 Flutter
问题描述
我正在尝试拥有一系列项目,而我的 CheckBox 没有更新(不改变状态)。
Widget materialRow(
String title, String pago, String text, double width, bool bandera) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Checkbox(
value: bandera,
onChanged: (bool newValue) {
setState(() {
bandera = newValue;
});
},
),
Container(
height: 180,
width: width * 0.70,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25),
border: Border.all(color: Utils.colorgreen)),
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Text(
title,
style: Utils.styleGreenTitle,
),
Text(pago),
Text(text),
],
),
),
),
],
);
}
仅在构建方法中我调用该函数 3 次
materialRow(
"Gratuita",
"",
"Veras anuncios debes en cuando y solo podras agregar un oficio o profesion",
width,
checkPlease),
我为两个调用发送相同的变量
解决方案
问题是当您触发重建时您正在更改的变量setState
. 您可能会对在函数中构建的小部件而不是直接在State
.
当你这样做时bandera = newValue;
,你将参数 bandera
设置为newValue
. 您实际上并没有更改存储在State
. 因此bandera = newValue;
,为您的应用程序做的很少。在下一次重建时,该值将再次被 的值覆盖checkPlease
。如果这是 anObject
而不是原语,这可能不是问题,bool
因为它会通过引用传递,并且通过正确的实现,它会解决的。
所以你必须做的是设置checkPlease
变量。这很可能存储在build
andmaterialRow
函数之外,这使得它能够在重建中幸存下来。
改变
setState(() {
bandera = newValue;
});
到
setState(() {
checkPlease= newValue;
});
替代:
除了将 a 传递bool
给materialRow
函数之外,还传递一个回调
setState(() {
checkPlease= newValue;
});
到materialRow
功能。如果您由于某种原因无法访问checkPlease
该功能,则将使用此materialRow
功能。
前任。
void callback(bool newValue) {
setState(() {
checkPlease= newValue;
});
}
//Add callback as a parameter
Widget materialRow(String title, String pago, String text, double width, bool bandera, Function(bool) callback) {
...
onChanged: callback,
...
}
//Function usage
materialRow(
"Gratuita",
"",
"Veras anuncios debes en cuando y solo podras agregar un oficio o profesion",
width,
checkPlease,
callback
),
推荐阅读
- oauth-2.0 - JHipster OAuth2 + Keycloak 用户相关用例
- css - 调整背景(img)的大小而不裁剪它
- text-editor - 使用模式匹配删除 1 行或多行?
- css - 使用 rmd / knitr 将自定义标题添加到固定样式的目录
- php - 带有mysql数据库的面向对象的PHP登录脚本
- html - 使用 VBA 从 PDGA 编号的 Excel 列表中抓取网页
- php - PDOStatement::execute() 期望参数 1 是数组,给定字符串
- c++ - 如何将 QEvents 传递给子小部件?
- ios - 协同设计时出现不一致和不透明的错误
- node.js - Azure Functions 在节点中加载 MongoDB 时崩溃