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

Firefox浏览器中Flutter使用hydrated_bloc报Bad state错误求助

解决Firefox Web环境下Hydrated Bloc的"Bad state: Not connected to an application"错误

这个错误本质是Web环境下默认的文件存储路径获取失效导致的,Firefox的安全策略会放大这个问题,以下是针对性的解决方法:

1. 替换Web环境的存储实现

Hydrated Bloc支持自定义存储介质,Web端直接用浏览器的localStorage替代文件存储即可,修改初始化代码:

import 'package:flutter/foundation.dart' show kIsWeb;
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:path_provider/path_provider.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 区分Web与非Web环境配置存储
  if (kIsWeb) {
    HydratedBloc.storage = await HydratedStorage.build(
      storageDirectory: HydratedStorage.webStorage(),
    );
  } else {
    final directory = await getApplicationDocumentsDirectory();
    HydratedBloc.storage = await HydratedStorage.build(
      storageDirectory: directory,
    );
  }

  runApp(const MyApp());
}

2. 确认依赖版本兼容性

你当前的依赖版本组合是兼容的:

  • hydrated_bloc: ^9.1.3 要求 flutter_bloc: ^8.0.0 以上,你的^8.1.3符合要求
  • path_provider: ^2.1.1 对Web的支持是完善的,无需额外调整依赖

3. 检查Firefox浏览器设置

如果修改代码后仍报错,排查浏览器权限:

  • 打开Firefox的about:preferences#privacy页面,在「Cookie和网站数据」中,确保允许当前站点使用存储权限
  • 暂时禁用隐私类浏览器扩展(比如广告拦截、隐私保护插件),测试是否是扩展干扰了localStorage的访问

验证方法

修改代码后重新构建Web应用:

flutter build web --release

将构建后的build/web目录部署到本地服务器或直接打开index.html,测试状态持久化功能是否正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:06:00