0

一旦 aTextField获得焦点,存储是否启用的对象就会更改,以便TextField立即禁用。TextField当上面的另一个得到关注时,也会发生这种情况。

TextField放置在 StatefulWidget 内,并且一个Category对象包含另一个名为的对象,如果它被启用或禁用,则该对象Goal包含一个bool变量。此变量还用于启用或禁用TextField.

TextField(
  controller: _goalAmountController,
  enabled: widget.category.goal.enabled,
  decoration: InputDecoration(
    labelText: "Goal Amount",
    border: OutlineInputBorder(),
  ),
  onChanged: (value) {
    try {
      widget.category.goal.amount = double.parse(value);
    } on Exception {
      //TODO display error message
      print("Invalid Goal-Amount");
    }
  },
),

switch在下方还有一个可以通过设置它的变量TextField来启用或禁用它。Goalenabled

        SwitchListTile(
          value: widget.category.goal.enabled,
          title: Text("Enable Goal"),
          onChanged: (value) {
            setState(
              () {
                widget.category.goal.enabled = value;
              },
            );
          },
        ),

我发现似乎单击 aTextField会将对象替换为具有默认值Goal的新对象。falseenabled

4

1 回答 1

0

尝试FocusNodes改用:

FocusNode textNode = FocusNode();

TextField(
  focusNode: textNode,
  controller: _goalAmountController,
  enabled: widget.category.goal.enabled,
  decoration: InputDecoration(
    labelText: "Goal Amount",
  border: OutlineInputBorder(),
),

稍后当您想在用户与另一个小部件交互时禁用此 textField 时,您可以调用:

textNode.unfocus() ;
于 2019-02-12T16:03:02.673 回答