【问题标题】:TextField click changes Switch in flutterTextField 点击更改 Flutter 中的切换
【发布时间】:2019-02-12 15:46:24
【问题描述】:

一旦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");
    }
  },
),

TextField 下方还有一个switch,通过设置enabled 变量来启用或禁用Goal

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

我发现点击TextField 似乎会将Goal 对象替换为具有false 作为enabled 的默认值的新对象。

【问题讨论】:

    标签: dart flutter statefulwidget


    【解决方案1】:

    尝试改用FocusNodes

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

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

    textNode.unfocus() ;
    

    【讨论】:

    • 这也不起作用。而且我不能打电话给textNode.unfocus() ;,因为我不知道用户何时与另一个小部件交互
    • 您可以将整个表单包装在 InkWell 中,这在创建注册表单时对我有用。在其onTap 方法调用textNode.unfocus()
    猜你喜欢
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 2018-11-20
    • 2021-05-19
    相关资源
    最近更新 更多