【问题标题】:EditingTextController updates widget value without calling setState() - Flutter编辑文本控制器更新小部件值而不调用 setState() - Flutter
【发布时间】:2019-09-27 21:35:23
【问题描述】:

这可能不是技术问题,但是,我读到,每当您想更改 StatefullWidget 状态时,都需要调用 setState() 函数。我对 EditText() 小部件进行了测试,并使用 EditingTextController 作为小部件控制器,我从用户定义的函数中调用了 controller.text = "some text",而没有调用 setState() 函数和EditText() 的值更改为 some text

我想知道这是怎么做到的?我阅读了文档,它说EditingTextController 将更改小部件的值,但我们已经知道为了更改 State Full Widget 状态需要调用setState()

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    这是真的。但是要更改 Flutter 中的状态,您还有其他选择,setState(() {}); 只是其中之一。另一种选择是创建Notifier -> listener,然后将监听器设置为监听通知器,就像这样TextFormField(controller: _controller,...) 所以通知器(控制器)上的任何更新都会通知监听器(TextFormField)进行自我更新。强>

    例如:

    //...
    final _controller = TextEditingController();
    //...
    child: TextFormField(
        controller: _controller,
        decoration: InputDecoration(border: OutlineInputBorder()),
    ),
    
    

    在这个例子中:

    • _controller:是一个 ChangeNotifier。
    • TextFormField:是这个 ChangeNotifier(_controller) 的监听器。

    一旦你调用这个_controller.text=..,_controller(被认为是ChangeNotifier see this。)“将通知这个TextEditingController的所有监听器他们需要update",所以它会给你与使用setState(() {});Stream/StreamBuilderFuture/FutureBuilder...等相同的结果。

    【讨论】:

      猜你喜欢
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 2019-12-16
      • 2018-07-28
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多