Flutter:软键盘关闭时触发消费者

Flutter: Consumer triggered when soft keyboard is closed

我在 TextField 中有一个前缀图标。点击它后,我从服务中得到一个字符串,并通过提供者和消费者将这个字符串附加到 TextField 控制器中。

ChangeNotifierProvider(
  create: (context) => provider,
  child: Consumer<FacilitiesProvider>(
    builder: (context, value, child) {
      if (value.dateString != null &&
          value.dateString.isNotEmpty) {
        _controller.text = value.dateString;
      }
      return TextField(
        controller: _controller,

一切正常,问题出在这里。

当用户点击 TextField 时,软键盘打开,当用户删除字符串并关闭软键盘时,Consumer 被触发并再次 value.dateString_controller 中设置并且再次显示字符串!!!

如何防止这种情况发生?

问题是你的Widget树在键盘shows/hides时被重建,导致你的构建方法被再次调用。最好的解决方案是在别处处理值分配,但如果您不关心屏幕的键盘隐藏部分,您可以将 Scaffold 中的 resizeToAvoidBottomPadding 设置为 false。如果这确实掩盖了任何问题,您可以将 body 包装在 SingleChildScrollView.