开发者社区 问答 正文

如何根据文本字段上的输入更改按钮的文本

我有一个带有“删除”按钮的小弹出窗口,但是每当输入文本不同于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函数,但是按钮文本始终显示为“删除”

展开
收起
被纵养的懒猫 2019-09-30 14:57:01 484 分享 版权
阿里云 AI 助理回答

根据你的描述,你希望在用户输入的文本不等于"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回调
                ),
              ],
            ),
          ),
        );
      },
    );
  },
);

通过这种方式,每次TextFieldonChanged触发时,都会调用StatefulBuilder提供的setState方法,从而有效地更新对话框内部的状态和UI元素,包括按钮上的文本。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: