hydrated_bloc升级至7.0.1后storageDirectory必填及目录函数未定义问题
问题原因和解决方法
两个报错分别对应两个独立的问题,按以下步骤操作即可全部解决:
报错1:The parameter 'storageDirectory' is required.
根因是hydrated_bloc升级到7.x版本后,HydratedStorage.build()方法取消了默认存储路径配置,必须显式传入storageDirectory参数,你按官方文档补充参数的操作是正确的,接下来解决第二个找不到函数的问题即可。
报错2:getTemporaryDirectory/getApplicationDocumentsDirectory 未定义
这两个路径获取函数来自Flutter官方的path_provider工具包,需要先引入依赖并导入头文件才能使用:
- 第一步:添加依赖
打开项目根目录的pubspec.yaml文件,在依赖区块添加配置:
配置完成后执行dependencies: flutter: sdk: flutter path_provider: ^2.1.0 # 可替换为当前最新稳定版本flutter pub get拉取依赖包。 - 第二步:导入头文件
在你编写HydratedBloc初始化代码的dart文件顶部,导入对应包:import 'package:path_provider/path_provider.dart'; - 第三步:完整初始化代码
注意初始化前必须调用WidgetsFlutterBinding.ensureInitialized(),否则异步调用路径函数会触发运行时错误:import 'package:flutter/material.dart'; import 'package:hydrated_bloc/hydrated_bloc.dart'; import 'package:path_provider/path_provider.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); HydratedBloc.storage = await HydratedStorage.build( storageDirectory: await getApplicationDocumentsDirectory(), ); runApp(const MyApp()); }
提示:优先选择getApplicationDocumentsDirectory()作为存储目录,getTemporaryDirectory()是系统临时目录,存储的内容随时可能被系统清理,会导致Bloc持久化数据丢失
内容的提问来源于stack exchange,提问作者Abdullah Hamadi
相关产品推荐
相关产品推荐

