You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:12:08