Щелчок TextField изменяет объект во флаттере

Как только TextField фокусируется, объект, который сохраняется, если он включен, изменяется так, что 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 включить или отключить Goal установив это enabled переменная.

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

Я обнаружил, что, кажется, как будто щелчок TextField заменит Goal объект с новым, который имеет false в качестве значения по умолчанию для enabled,

1 ответ

Попробуй использовать FocusNodes вместо:

FocusNode textNode = FocusNode();

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

позже, когда вы захотите отключить этот textField, когда пользователь взаимодействует с другим виджетом, вы можете вызвать:

textNode.unfocus() ;
Другие вопросы по тегам