Flutter数据加密插件easy_hive_encryption的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter数据加密插件easy_hive_encryption的使用

Easy HiveHive 数据库的一个包装器,旨在更简单、更容易地使用。

目录 📋

特性 🎁

Easy 🦊
🔐 加密
🐢 懒加载
🔑 枚举键支持
🎧 可监听

安装 💻

在你的 pubspec.yaml 文件中添加 easy_hive

dependencies:
  easy_hive: ^1.0.1+2

然后运行以下命令来安装它:

flutter pub get

使用 📖

你可以通过定义单例类或使用服务定位器(如 get_it)来定义你的盒子。

1. 定义盒子键 🔑

enum Settings {
  key, // 用作盒子键。你也可以使用字符串常量

  /// 其他键...
  themeMode,
  counter,
}

2. 定义一个盒子 📦

import 'package:easy_hive/easy_hive.dart';

class SettingsBox extends EasyBox {
  @override
  String get boxKey => Settings.key.toString();

  /// 单例。
  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();
}

3. 初始化盒子 🚀

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...
}

4. 定义数据的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);
}

5. 在任何地方使用 🔥

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,
),

高级用法 😈

启用加密 🔐

1. 安装 easy_hive_encryption
dependencies:
  easy_hive_encryption: ^1.0.1+2
2. 将 EncryptionMixin 添加到你的盒子类中:
class SettingsBox extends EasyBox with EncryptionMixin {
  @override
  String get boxKey => Settings.key.toString();

  /// 覆盖加密密钥名称(可选)。
  @override
  String get encryptionKeyName => "your-own-key-name";
}
3. 遵循 flutter_secure_storage 的指南进行特定平台设置。

启用懒加载 🐢

1. 将 LazyMixin 添加到你的盒子类中:
class SettingsBox extends EasyBox with LazyMixin {
  @override
  String get boxKey => Settings.key.toString();
}
2. 使用 await 来获取值:
extension GeneralSettingsExtension on SettingsBox {
  Future<ThemeMode> getThemeMode() async {
    final index = await get(
      Settings.themeMode,
      defaultValue: 0,
    );
    return ThemeMode.values[index];
  }
}

监听值变化 🎧

推荐:使用 RefreshableBox + provider
1. 继承 RefreshableBox 而不是 EasyBox
class SettingsBox extends RefreshableBox {
  @override
  String get boxKey => Settings.key.toString();
}
2. 将其作为提供者使用:
ChangeNotifierProvider(
  create: (_) => SettingsBox(),
  child: SomeWidget(),
),

SomeWidget 中:

Text(
  'You have pushed: ${context.select((SettingsBox _) => _.counter)} times.',
),

更多详情,请参阅 provider 包文档。

或者如果你不想使用 RefreshableBox
只需使用 ValueListenableBuilder 来监听变化:
ValueListenableBuilder(
  valueListenable: [Settings.counter].of(SettingsBox()),
  builder: (context, _, __) {
    return Text(
      '${SettingsBox().counter}',
    );
  },
),

更多关于Flutter数据加密插件easy_hive_encryption的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据加密插件easy_hive_encryption的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用easy_hive_encryption插件进行数据加密的代码示例。easy_hive_encryption是一个结合了hiveencrypt库的插件,用于在Flutter应用中安全地存储加密数据。

步骤 1: 添加依赖

首先,在你的pubspec.yaml文件中添加easy_hive_encryption依赖:

dependencies:
  flutter:
    sdk: flutter
  easy_hive_encryption: ^latest_version # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

步骤 2: 初始化Hive和EasyHiveEncryption

在你的应用的主入口文件中(通常是main.dart),初始化Hive和EasyHiveEncryption:

import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:easy_hive_encryption/easy_hive_encryption.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化Hive
  await Hive.initFlutter();

  // 设置加密密钥(请确保这是一个安全的密钥)
  final encryptionKey = Uint8List.fromList('your-256-bit-secret-key-here'.codeUnits);

  // 初始化EasyHiveEncryption
  await EasyHiveEncryption.init(encryptionKey);

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

步骤 3: 使用加密存储数据

在你的应用中,你可以使用EasyHiveEncryption来存储和读取加密数据。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:easy_hive_encryption/easy_hive_encryption.dart';

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  Box<String, String> _box;

  @override
  void initState() {
    super.initState();
    initBox();
  }

  Future<void> initBox() async {
    // 打开一个名为'myBox'的加密盒子
    _box = await EasyHiveEncryption.openBox<String, String>('myBox');
  }

  Future<void> saveData() async {
    await _box.put('key', 'This is some encrypted data!');
    print('Data saved!');
  }

  Future<void> readData() async {
    final data = await _box.get('key');
    print('Data retrieved: $data');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Easy Hive Encryption Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: saveData,
              child: Text('Save Data'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: readData,
              child: Text('Read Data'),
            ),
          ],
        ),
      ),
    );
  }
}

注意事项

  1. 密钥管理:确保你的加密密钥是安全的。不要将密钥硬编码在客户端代码中,考虑使用安全存储机制(如Keychain、Keystore)来管理密钥。
  2. 依赖版本:请确保你使用的是最新版本的easy_hive_encryption,以获取最新的功能和安全修复。
  3. 错误处理:在实际应用中,添加适当的错误处理逻辑,以处理可能的异常情况(如存储失败、密钥错误等)。

以上代码展示了如何在Flutter项目中使用easy_hive_encryption插件进行数据加密存储和读取。希望这对你有所帮助!

回到顶部