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
.
中
我在 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
.