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
相关产品推荐
相关产品推荐

