【问题标题】:Clear TextField without controller in Flutter在 Flutter 中清除没有控制器的 TextField
【发布时间】:2021-09-28 18:50:33
【问题描述】:

我的屏幕有多个文本字段,大约 15 个左右。由于性能原因,我不想使用 TextEditingController,因为 TextField 的数量可能会增长,并且我需要将数据从一个小部件来回传递到另一个小部件。所以我正在使用 TextField 的 OnChanged 方法并设置一个变量,该变量将通过一个函数从父小部件中使用。现在,当我点击父小部件上的重置时,如何在不使用 TextEditingController 的情况下清除 TextField 控件中的所有值?

class Parent extends StatelessWidget {
    
    String txt='';
    myfunction(text)
    {
     txt=text;
    }
    
    @override
  Widget build(BuildContext context) {
  
  ...
  Foo(myfunction);
  ....
  }
  }
  
  class Foo extends StatelessWidget {
  final Function myfunction;
  const Foo(this.myfunction);
  @override
  Widget build(BuildContext context) {
    
    return TextField(
      onChanged: (text) {
        myfunction( text);
      },...
      }
    }
    

【问题讨论】:

  • 使用控制器有什么问题?
  • 。我的屏幕可以有大约 20 到 30 个文本字段,出于性能原因和内存问题,拥有 30 个控制器并不是一个好的解决方案。将来,我可能还会添加另外 20 个文本字段
  • 拥有 30 或最多 50 个文本字段也不好,控制器也没有问题。我建议您使用唯一键和列表视图来提高性能。
  • 30 到 50 个字段不好???一个简单的联系人二维码生成至少可以有 20 个字段,这完全取决于用例

标签: flutter


【解决方案1】:

您应该尝试使用以下方式声明所有文本字段:

final TextEditingController name = TextEditingController();
final TextEditingController age = TextEditingController();

创建一个这样的方法:

resetAll() {
  name.clear();
  name.clear();
}

然后您在重置按钮上调用 resetAll,如下所示:

onPressed:() => resetAll()

【讨论】:

  • 他没有提到控制器,不是吗?
  • 我认为没有TextEditingController是不可能的
【解决方案2】:

这是不可能的,但如果您处理并重新打开包含文本字段的屏幕,文本字段将被重置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 2021-11-18
    • 2019-01-02
    • 1970-01-01
    • 2019-11-20
    • 2020-01-29
    • 2022-09-27
    相关资源
    最近更新 更多