Flutter 数据库-Hive插件-存储基础类型
2023-03-15 本文已影响0人
YourSummer
先决条件:
MacOS | VSCode | Flutter | Dart |
---|---|---|---|
13.1 | 1.76.2 | 3.3.10 | 2.18.6 |
一. 我了解到的Flutter 基础数据持久化热门的有三种方案
- shared_preferences 个人感受: 都是异步操作,难封装
- get_storage个人感受: 好封装, 使用简单, 盒子概念, 只能存储基础类型
- hive 个人感受: 好封装, 盒子概念, 可以存储基本类型和自定义对象
二. 当我在搭建一个基本框架的时候, 这三个我都按顺序尝试了, 最终决定, 项目中存储方案只留一种
那就是hive
三.下面介绍 hive
存储基础类型
- 安装插件
方式一: 编辑pubspec.yaml
dependencies:
flutter:
sdk: flutter
hive: ^2.2.3 #数据持久化
hive_flutter: ^1.1.0 # hive插件扩展
方式二: 不需要编辑pubspec.yaml
文件, 使用终端命令依次安装:
flutter pub add hive
flutter pub add hive_flutter
- 初始化Hive
import 'package:hive_flutter/hive_flutter.dart';
// 给盒子起个名称
const basedataBox = 'basedataBox';
// 项目基础异步初始化
Future setup() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化Hive
await Hive.initFlutter();
// 打开指定的盒子
await Hive.openBox(basedataBox);
}
// Main函数调用setup()
// main函数 原本的样子:
void main() {
runApp(const MyApp());
}
// 修改为如下样子
// 调用 await setup()
void main() async {
await setup();
runApp(const MyApp());
}
至此Hive初始化完成
四. 封装基础类型存储类
import 'package:hive/hive.dart';
class UserDefaults {
static final UserDefaults shared = UserDefaults();
// 声明盒子
// 注意, main函数中这个盒子已经打开, 可以进行存储操作
final _box = Hive.box(basedataBox);
// 存储token
String get token => _box.get('token');
set token(String value) => _box.put('token', value);
// 是否登录
bool get isLogin => _box.get('isLogin');
set isLogin(bool value) => _box.put('isLogin', value);
// 用户安装App的时间
DateTime get installTime => _box.get('installTime');
set installTime(DateTime value) => _box.put('installTime', value);
}
核心思路: 充分使用setter
和getter
方法,
如果需要添加新的属性,可以模仿token, 声明getter
&setter
方法.
如下第五条代码你就会发现如此写调用起来非常明朗
五. 封装使用:
// 获取token
var token = UserDefaults.shared.token;
// 存储token
UserDefaults.shared.token = 'new_token';
当然, 声明的属性也可以是Map
此篇如有补充, 或者有更好的方案, 请不吝赐教,
总之, 在我的项目中不允许使用多个数据持久化插件[强迫症脸]
下一篇介绍 Hive存储对象的注意事项