网站首页前端
Flutter用Hive插件封装本地存储
发布时间:2024-01-14 22:54:20编辑:阅读(242)
一. 在pubspec.yaml中引入hive插件后, 执行flutter pub get
dependencies: hive: ^2.2.3 hive_flutter: ^1.1.0 dev_dependencies: build_runner: ^2.3.3 #编译 hive_generator: ^2.0.0 #用于生成对象存储适配器文件
二. 手动添加model文件, 如models/userModel.dart, 内容按照下面的格式, 字段按需要修改:
import 'package:hive/hive.dart'; part 'userModel.g.dart'; @HiveType(typeId: 0) // typeId 范围是0-233, 每个模型类的typeId应不同 class UserModel extends HiveObject { @HiveField(0) String token = ''; @HiveField(1) String mobile = ''; @HiveField(2) String name = ''; UserModel( this.token, this.mobile, this.name, ); }
三. 在终端下执行 flutter packages pub run build_runner build, 会自动生成models/userModel.g.dart.
四. 封装可全局调用的单例对象, common/localStorage.dart
import 'package:hive/hive.dart'; import 'package:router/models/userModel.dart'; class LocalStorage { static final LocalStorage shared = LocalStorage(); // 这个盒子需要先打开, 合适的位置是 程序入口 final box = Hive.box(objectHiveName); // App配置信息 UserModel? get userModel => box.get("UserModel"); set userModel(UserModel? value) => box.put("UserModel", value); }
五. 在main.dart入口文件中加入:
import 'common/localStorage.dart'; const objectHiveName = 'localStorage'; // 项目基础异步初始化 Future setup() async { WidgetsFlutterBinding.ensureInitialized(); await Hive.initFlutter(); Hive.registerAdapter(UserModelAdapter()); await Hive.openBox(objectHiveName); } void main() async { await setup(); runApp(MyApp()); }
六. 在页面中引入localStorage, 即可使用
UserModel user = UserModel( "token", "mobile", "name", ); LocalStorage.shared.userModel = user;
七. 在使用hive中, 修改UserModel的内容, 重新生成UserModel.g.dart文件后,
Hive会报错: Unhandled Exception: type 'Null' is not a subtype of type 'String' in type cast
这是因为Hive在缓存了UserModel数据, 新生成的model并未实际更新.
这时需要在代码中执行一下:
await Hive.box(objectHiveName).clear();
清除一下缓存, 再修改后重新编译就可以了.
评论