Flutter:如何通过 AlertDialog 中的 TextFormField 更改变量?

Flutter: How to change variables through TextFormField in a AlertDialog?

我想实现一个功能如下: 有一个名为 自定义 的按钮。在此页面中,有一个名为 money 的变量。当我单击该按钮时,将出现一个带有 TextFormField 的 AlertDialog。我希望在TextFormField中输入一个数字X并点击按钮ok退出AlertDialog后,money将更改为X。我已经使用onSaved来保存变量,并使用_formkey.currentState.save(),但 money 没有改变。我的代码有什么问题?这是我的代码:

void _showMessageDialog() {
    //int addMoney = 0;
    showDialog(
      context: context,
      builder: (BuildContext context) {
        // return object of type Dialog
        return AlertDialog(
          key: _formKey,
          title: new Text('INPUT'),
          content: TextFormField(
            maxLines: 1,
            keyboardType: TextInputType.emailAddress,
            autofocus: false,
            style: TextStyle(fontSize: 15),
            decoration: new InputDecoration(
                border: InputBorder.none,
                hintText: 'input',
            ),
            onSaved: (value) {
              money = int.parse(value?.trim() ?? '0') as double;
              print(money);
            }
          ),
          actions: <Widget>[
            new TextButton(
              key: _formKey,
              child: new Text("ok"),
              onPressed: () {
                _formKey.currentState?.save();
                Navigator.of(context).pop();
              },
            ),
          ],
        );
      },
    );
  }

这里是与按钮相关的代码自定义

OutlinedButton(
                                style: OutlinedButton.styleFrom(
                                  side: BorderSide(
                                    width: 1,
                                    color: Colors.blueAccent
                                  )
                                ),
                                onPressed: () {
                                  // Navigator.of(context).push(
                                  //   _showMessageDialog()
                                  // );
                                  _showMessageDialog();
                                },
                                child: Text(
                                  "自定义",
                                  style: TextStyle(
                                    fontSize: 20,
                                    fontWeight: FontWeight.w700,
                                    color: Colors.blueAccent
                                  ),
                                ),
                              ),

我知道我可能犯了一个大错误,但这是我的第一个 Flutter 项目。谢谢你的建议。

我会为此使用 ValueNotifier。但首先你需要添加一个 controller 到你的 TextFormField 这样你就可以让用户输入文本。

//initialize it
final myController = TextEditingController();

TextFormField(
  controller: myController, //pass it to the TextFormField
),

TextButton(
  child: new Text("ok"),
  onPressed: () {
    String input = myController.text; //this is how you get the text input
    _formKey.currentState?.save();
    Navigator.of(context).pop();
  },
),

正如我所说,您还需要初始化 ValueNotifier 并将其传递给 _showMessageDialog

ValueNotifier<int> money = ValueNotifier(0);
_showMessageDialog(money); //and pass it to your function

void _showMessageDialog(ValueNotifier<int> money) {
  TextButton(
    child: new Text("ok"),
    onPressed: () {
      String input = myController.text; //this is how you get the text input
      money.value = int.parse(input); //and then update your money variable
      _formKey.currentState?.save();
      Navigator.of(context).pop();
    },
  ),
}