FLutter踩坑之输入框

2019-07-30  本文已影响0人  机智的黑猫

最近开始入坑flutter,正好遇到了一个新需求,响应国家号召的青少年模式。因为页面简单没有复杂UI也没什么网络请求,特别适合作为实验项目接入原生工程,在说服了iOS的同事之后准备开工。
开始一切都很顺利,结果在处理输入框的时候遇到了一个问题。

 TextField(
                controller: pwdController,
                letterSpace: 38,
                textSize: 30,
                onChanged: (it) => {judgeState(context, pwdController)},

在我调用pwdController.clear()方法之后onChanged触发了n次并且数据并不是空字符。

  /// Set the [value] to empty.
  ///
  /// After calling this function, [text] will be the empty string and the
  /// selection will be invalid.
  ///
  /// Calling this will notify all the listeners of this [TextEditingController]
  /// that they need to update (it calls [notifyListeners]). For this reason,
  /// this method should only be called between frames, e.g. in response to user
  /// actions, not during the build, layout, or paint phases.
  void clear() {
    value = TextEditingValue.empty;
  }

看了下文档发现这个方法不应该在frames里调用。

于是在调用出加了一层

  SchedulerBinding.instance.addPostFrameCallback(
            (it) => {pwdController.clear()});

问题解决。

总结,所有需要在帧之间调用的方法目前看起来都可以通过 SchedulerBinding.instance.addPostFrameCallback来实现延迟到下一帧之前调用。

上一篇下一篇

猜你喜欢

热点阅读