我有一个带有“删除”按钮的小弹出窗口,但是每当输入文本不同于0.00时,我都想将文本更改为“卖”
showDialog( context: context, builder: (context) { String _popUpDeleteSoldText = "Delete"; return AlertDialog( title: Text("Delete " + doc['propertyName'] + "?"), content: Container( height: 120, child: Column( children: [ TextField( onChanged: (text) { if (text != "0.00") { print("i'm != 0.00"); setState(() { //TODO - THIS AIN'T WORKING _popUpDeleteSoldText = "Sell"; }); } else { print("i'm still 0"); setState(() { _popUpDeleteSoldText = "Delete"; }); } }, 按钮:
MaterialButton( elevation: 4.0, child: Text( _popUpDeleteSoldText, style: TextStyle(color: Colors.white), ) .... 打印正在使用onChange函数,但是按钮文本始终显示为“删除”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据你的描述,你希望在用户输入的文本不等于"0.00"时,将按钮上的文字从"Delete"更改为"Sell"。这里的问题可能在于setState
没有正确更新UI,或者是因为你的对话框构建逻辑没有被设计为响应状态变化。
在Flutter中,对于状态的管理与更新,确保UI能够响应状态变化是非常关键的。然而,由于AlertDialog
是在其构建方法内创建的,它并不直接位于 StatefulWidget 的 build 方法内,因此直接使用 setState
可能不会如预期那样更新对话框的内容。
一个解决方案是使用StatefulBuilder
或将其包装在一个自定义的 StatefulWidget 中来处理这种动态更新。下面是使用StatefulBuilder
的一个示例:
showDialog(
context: context,
builder: (context) {
String _popUpDeleteSoldText = "Delete";
return StatefulBuilder( // 使用StatefulBuilder包裹内容
builder: (context, setState) { // 注意这里的setState来自StatefulBuilder
return AlertDialog(
title: Text("Delete ${doc['propertyName']}?"),
content: Container(
height: 120,
child: Column(
children: [
TextField(
onChanged: (text) {
if (text != "0.00") {
print("i'm != 0.00");
setState(() { // 此setState将更新StatefulBuilder内的状态
_popUpDeleteSoldText = "Sell";
});
} else {
print("i'm still 0");
setState(() {
_popUpDeleteSoldText = "Delete";
});
}
},
),
MaterialButton(
elevation: 4.0,
child: Text(
_popUpDeleteSoldText,
style: TextStyle(color: Colors.white),
),
onPressed: () {}, // 不要忘记给按钮设置onPressed回调
),
],
),
),
);
},
);
},
);
通过这种方式,每次TextField
的onChanged
触发时,都会调用StatefulBuilder
提供的setState
方法,从而有效地更新对话框内部的状态和UI元素,包括按钮上的文本。