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

Flutter Web场景重置后因焦点问题引发崩溃

登录退出后重入带自动焦点页面崩溃问题解决方案

问题根源

退出登录时页面已销毁,FocusNode完成dispose,但自动焦点逻辑可能在页面销毁后仍异步触发,或是Web端路由缓存导致旧实例被误操作,引发“已销毁的FocusNode无法设置焦点”类错误。

修复步骤

  • 确保自动焦点在页面挂载后触发
    不要在initState中直接调用焦点请求,改用addPostFrameCallback并判断页面状态,避免在未挂载/已销毁时操作:

    @override
    void initState() {
      super.initState();
      WidgetsBinding.instance.addPostFrameCallback((_) {
        if (mounted) {
          _inputFocusNode.requestFocus();
        }
      });
    }
    
  • dispose前先取消焦点
    在销毁FocusNode前先取消焦点绑定,切断后续可能的异步操作关联:

    @override
    void dispose() {
      _inputFocusNode.unfocus();
      _inputFocusNode.dispose();
      _textController.dispose();
      super.dispose();
    }
    
  • 退出登录时清理全局焦点
    配合路由清理操作,额外清除全局焦点状态,避免Web端路由残留的焦点影响:

    await Navigator.of(context, rootNavigator: true)
        .pushNamedAndRemoveUntil('/login', (Route<dynamic> route) => false);
    FocusScope.of(context).unfocus();
    
  • 升级Flutter版本
    Flutter 3.3.4存在Web端焦点管理的已知bug,升级到3.10及以上稳定版可解决此类底层问题。

内容的提问来源于stack exchange,提问作者Ali Ayasrah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:20:28