Flutter数据库管理插件easy_hive的使用
Flutter数据库管理插件easy_hive的使用
Easy Hive
Easy Hive 是一个封装了 Hive 数据库的插件,使得数据管理更加简单易用。
Outline 📋
- Features 🎁
- Installation 💻
- Usage 📖
- Advanced Usage 😈
Features 🎁
- Encryption 🔐
- Lazy loading 🐢
- Enum key support ✅
- Listenable 🎧
Installation 💻
在 pubspec.yaml
中添加依赖:
dependencies:
easy_hive: ^1.0.1+2
安装插件:
flutter pub get
Usage 📖
你可以将你的盒子定义为 Singleton
类,或者使用服务定位器如 get_it
。
1. 定义盒子键 🔑
enum Settings {
key, // 使用作为盒子键。可以使用字符串常量代替。
themeMode,
counter,
}
1. 定义一个盒子 📦
import 'package:easy_hive/easy_hive.dart';
class SettingsBox extends EasyBox {
@override
String get boxKey => Settings.key.toString();
/// Singleton.
static final SettingsBox _instance = SettingsBox._();
factory SettingsBox() => _instance;
SettingsBox._();
}
或者使用 get_it
import 'package:easy_hive/easy_hive.dart';
class SettingsBox extends EasyBox {
@override
String get boxKey => Settings.key.toString();
}
2. 初始化盒子 🚀
import 'package:easy_hive/easy_hive.dart';
Future<void> main() async {
await EasyBox.initialize();
await SettingsBox().init();
runApp(...);
}
或者使用 get_it
import 'package:easy_hive/easy_hive.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Hive.initFlutter();
final settingsBox = SettingsBox();
await settingsBox.init();
GetIt.I.registerSingleton<SettingsBox>(settingsBox);
runApp(...);
}
3. 定义 getter & setter 为你的数据 💄
extension GeneralSettingsExtension on SettingsBox {
ThemeMode get themeMode {
final index = get(Settings.themeMode, defaultValue: 0);
return ThemeMode.values[index];
}
set themeMode(ThemeMode value) => put(Settings.themeMode, value.index);
int get counter => get(Settings.counter, defaultValue: 0);
set counter(int value) => put(Settings.counter, value);
}
4. 在任何地方使用它 🔥
Text(
'You have pushed: ${SettingsBox().counter} times.',
style: Theme.of(context).textTheme.headlineMedium,
),
FilledButton(
onPressed: () {
SettingsBox().counter++;
},
child: Text('Increment'),
),
FilledButton(
onPressed: () {
SettingsBox().themeMode = ThemeMode.dark;
},
child: Text('Dark Theme'),
),
或者使用 get_it
Text(
'Count: ${GetIt.I<SettingsBox>().counter}',
style: Theme.of(context).textTheme.headlineMedium,
),
Advanced Usage 😈
启用加密 🔐
- 安装
easy_hive_encryption
:import 'package:easy_hive/easy_hive.dart'; import 'package:easy_hive_encryption/easy_hive_encryption.dart'; class SettingsBox extends EasyBox with EncryptionMixin { @override String get boxKey => Settings.key.toString(); /// 自定义加密密钥名称(可选)。 @override String get encryptionKeyName => "your-own-key-name"; }
- 按照
flutter_secure_storage
的特定平台设置指南进行配置。
启用懒加载 🐢
- 将
LazyMixin
添加到你的盒子类中:class SettingsBox extends EasyBox with LazyMixin { @override String get boxKey => Settings.key.toString(); }
- 使用
await
获取值:extension GeneralSettingsExtension on SettingsBox { Future<ThemeMode> getThemeMode() async { final index = await get(Settings.themeMode, defaultValue: 0); return ThemeMode.values[index]; } }
监听值的变化 🎧
推荐:使用 RefreshableBox
+ provider
:
- 延伸
RefreshableBox
而不是EasyBox
:class SettingsBox extends RefreshableBox { @override String get boxKey => Settings.key.toString(); }
- 作为提供者使用:
ChangeNotifierProvider( create: (_) => SettingsBox(), child: SomeWidget(), ),
// 在 SomeWidget 内部。 Text( 'You have pushed: ' '${context.select((SettingsBox _) => _.counter)} times.', ),
如果你不想使用 RefreshableBox
:
只需使用 ValueListenableBuilder
来监听变化:
ValueListenableBuilder(
valueListenable: [
Settings.counter,
].of(SettingsBox()),
builder: (context, _, __) {
return Text(
'${SettingsBox().counter}',
);
},
),
更多关于Flutter数据库管理插件easy_hive的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库管理插件easy_hive的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用Flutter数据库管理插件easy_hive
的代码案例。这个插件提供了一个简单的键值存储解决方案,适用于Flutter应用中的本地数据存储。
首先,确保你已经在pubspec.yaml
文件中添加了easy_hive
依赖:
dependencies:
flutter:
sdk: flutter
easy_hive: ^latest_version # 替换为实际最新版本号
然后运行flutter pub get
来安装依赖。
接下来,让我们编写一些代码来演示如何使用easy_hive
。
1. 初始化Hive
在你的应用入口文件(通常是main.dart
)中初始化Hive:
import 'package:flutter/material.dart';
import 'package:easy_hive/easy_hive.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化Hive
await Hive.initFlutter();
// 打开一个Box(类似于一个表)
var box = await Hive.openBox<String>('myBox');
// 你可以在这里关闭Box,但通常不需要在main函数中关闭
// await box.close();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
2. 读写数据
在你的主页面或其他需要读写数据的组件中,使用Hive Box来进行数据操作:
import 'package:flutter/material.dart';
import 'package:easy_hive/easy_hive.dart';
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Box<String>? box;
@override
void initState() {
super.initState();
// 打开Box
box = Hive.box<String>('myBox');
}
@override
void dispose() {
// 关闭Box(可选,通常在应用关闭时Hive会自动处理)
box?.close();
super.dispose();
}
void _writeValue() async {
await box?.put('key', 'value');
print('Value written: key -> value');
}
void _readValue() async {
var value = await box?.get('key');
print('Value read: $value');
}
void _deleteValue() async {
await box?.delete('key');
print('Value deleted: key');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Easy Hive Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _writeValue,
child: Text('Write Value'),
),
ElevatedButton(
onPressed: _readValue,
child: Text('Read Value'),
),
ElevatedButton(
onPressed: _deleteValue,
child: Text('Delete Value'),
),
],
),
),
);
}
}
3. 运行应用
运行你的Flutter应用,你应该会看到三个按钮:写值、读值和删除值。点击这些按钮将分别在控制台中打印相应的日志,表示数据已经被写入、读取或删除。
这个示例展示了如何使用easy_hive
进行基本的键值存储操作。根据你的需求,你可以进一步扩展这些功能,例如处理更复杂的数据类型、批量操作等。