flutter - 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中设置,再次显示字符串!!!
我怎样才能防止这种情况发生?
解决方案
问题是当键盘显示/隐藏时,您的 Widget 树会被重建,导致您的构建方法再次被调用。最好的解决方案是在其他地方处理值分配,但如果您不关心屏幕的键盘隐藏部分,您可以resizeToAvoidBottomPadding
在Scaffold
to中设置false
。如果这确实掩盖了任何内容,则可以body
将SingleChildScrollView
.
推荐阅读
- python - 如何从 github 安装 deepplantphenomics python 包?
- java - E/RecyclerView:没有附加适配器;跳过布局 Android Studio RecyclerView
- python - boto3 AWS Batch在`.describe_jobs()`响应中缺少`logStreamName`
- java - GUI 问题 Java Netbeans 将 TextFields 与数字相关联
- python - 如何计算对比度改善指数 (CII)
- android - Playstore:停用此 APK 将导致您的应用可用于在更少类型的设备上进行新安装
- macos - 错误:没有名称为“chromedriver”的可用公式
- firebase - 带有firestore的Stream提供程序在flutter中出现问题
- c++ - 如何从 C++ 中过度分配的内存部分获取数组的大小
- typescript - 如何检查表单控件是否在反应式表单中被禁用