1

如果 CupertinoTextField 不为空,我想将 CupertinoDialogAction 设置为启用,否则默认情况下它应该被禁用,我也设置了“isDefaultAction:false”,但它仍然是可点击的。

showDialog(
          context: context,
          builder: (BuildContext context) => CupertinoAlertDialog(
            actions: [
              CupertinoDialogAction(
                onPressed: () => (Navigator.of(context).pop()),
                child: Text("Cancel"),
              ),
              CupertinoDialogAction(
                child: Text("Save"),
                isDefaultAction: false,
              ),
            ],
            title: Text("New Folder"),
            content: Column(
              children: <Widget>[
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Text("Enter a name for this folder"),
                ),
                Container(
                  height: 30,
                  child: CupertinoTextField(
                    controller: folderName,
                    placeholder: "Name",
                    decoration: BoxDecoration(
                      borderRadius: BorderRadius.circular(8),
                    ),
                  ),
                )
              ],
            ),
          ),
        );
4

2 回答 2

0
  1. 创建一个有状态的小部件,用于构建操作列表并返回CupertinoAlertDialog这些操作。此小部件应包含一些状态,指示是否应启用保存操作。如果不应启用,请将 null 放入onPressed处理程序。

  2. 编写一些处理程序,用于setState根据用户的操作设置此启用/禁用状态。

  3. showDialog构建器返回您的有状态小部件

于 2020-12-28T07:40:31.793 回答
0

如果要禁用 a CupertinoDialogAction,则需要将onPressed属性设置为null。它看起来像这样:

       Bool isEnabled = false;

       @override
       void initState() {
         super.initState();

         folderName.addListener(enableButton); // addListened to your TextEditingController!
       }

它将 isEnabled 设置为 true。

      enableButton()
      {
        if(folderName.text != "")
        {
          setState(() {
            isEnabled = true;
          });
        }                
      }

然后,您可以使用这个布尔字段。

      CupertinoDialogAction(
              onPressed: !isEnabled 
                  ? null
                  : () {
                      // Do what you need!
                      // Save method!
                    },
              child: Text("Save"),
              isDefaultAction: false,
            ),
于 2020-12-06T09:36:01.070 回答