首页 > 解决方案 > Flutter:关闭软键盘时触发消费者

问题描述

我在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时,软键盘被打开,当用户删除字符串并关闭软键盘时,消费者被触发并再次value.dateString_controller中设置,再次显示字符串!!!

我怎样才能防止这种情况发生?

标签: flutterflutter-provider

解决方案


问题是当键盘显示/隐藏时,您的 Widget 树会被重建,导致您的构建方法再次被调用。最好的解决方案是在其他地方处理值分配,但如果您不关心屏幕的键盘隐藏部分,您可以resizeToAvoidBottomPaddingScaffoldto中设置false。如果这确实掩盖了任何内容,则可以bodySingleChildScrollView.


推荐阅读