Flutter中如何取消SearchAnchor.bar焦点以收起键盘?
Flutter:解决SearchAnchor.bar点击建议项后无法取消焦点的问题
在使用SearchAnchor.bar组件时,点击建议列表项后,虽然通过controller.closeView(null)关闭了搜索视图,但常规的焦点取消方法FocusManager.instance.primaryFocus?.unfocus()无法完全取消SearchAnchor.bar的焦点,键盘仍会保持激活状态。
问题复现代码
import 'package:flutter/material.dart'; void main() => runApp(const MainApp()); class MainApp extends StatelessWidget { const MainApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Center( child: SearchAnchor.bar( barHintText: 'Start typing here', isFullScreen: false, suggestionsBuilder: (context, controller) { return [ ListTile( title: const Text('Click me'), onTap: () { controller.closeView(null); FocusManager.instance.primaryFocus?.unfocus(); }, ), ]; }, ), ), ), ); } }
临时方案(不推荐)
目前可以通过延迟执行取消焦点的方式实现预期效果,但这属于不规范的临时解决方案:
await Future.delayed( const Duration(seconds: 1), () => FocusManager.instance.primaryFocus?.unfocus(), );
官方解决方案
使用FocusScope.of(context).unfocus()替代原有的焦点取消代码,即可在关闭搜索视图后正确取消焦点、收起键盘。修改后的onTap逻辑如下:
onTap: () { controller.closeView(null); FocusScope.of(context).unfocus(); },
内容的提问来源于stack exchange,提问作者Eshfield
相关产品推荐
相关产品推荐

