Flutter数据持久化插件hawk_meta的使用

Flutter数据持久化插件hawk_meta的使用

特性

自动为您的项目生成Hawk风格的方法调用处理器。

开始使用

在您的pubspec.yaml文件中添加hawk_metahawk_source_gen包依赖:

dependencies:
  hawk_meta:
dev_dependencies:
  hawk_source_gen:
  build_runner:

使用方法

  1. 使用[@HawkEntryPoint](/user/HawkEntryPoint)注解标记一个类或函数。
class UserInfo {
  final String userId;
  final String userToken;
  final String userName;

  UserInfo(this.userId, this.userToken, this.userName);

  UserInfo.fromMap(Map map)
      : userId = map['userId'] as String,
        userToken = map['userToken'] as String,
        userName = map['userName'] as String;
}

[@HawkEntryPoint](/user/HawkEntryPoint)()
class AuthService {
  Future<UserInfo> login(String userId, String userToken) async {
    await Future.delayed(const Duration(seconds: 2));
    return UserInfo(userId, userToken, 'test');
  }
}

注意: [@HawkEntryPoint](/user/HawkEntryPoint)注解可以用于类或顶级函数/获取器/设置器。如果用于类,则该类的所有公共方法都将被注册为入口点。如果您想忽略某些元素,请使用@HawkApi(ignore: true)注解。

  1. 运行以下命令以生成代码:
flutter pub run build_runner build --delete-conflicting-outputs

生成的代码将放置在您的项目的.dart_tool/build/generated/{pkg}lib/src文件夹中,并且这些文件都具有.hawk.dart后缀。目前,您需要手动将这些文件复制到目标文件夹。

  1. 然后您可以使用生成的代码来调用入口点。
void testHawk() {
  final handler = HawkMethodCallDispatcher();
  
  // 这一步是不必要的
  // 如果存在,Hawk 将自动查找类型的方法 fromMap/toJson。
  // 如果这不是您想要的,您可以注册自定义的 fromMap/toMap 方法。
  handler.registerTypeConverter(
    fromMap: (map) async => UserInfo.fromMap(map),
    toMap: (UserInfo info) => {
      'userId': info.userId,
      'userToken': info.userToken,
      'userName': info.userName,
    },
  );
  
  // 这一步是必要的
  handler.registerMethodCallHandler(
    'AuthService',
    instanceGetter: () async => AuthService(),
    handlers: [HawkAuthService.handleHawkMethodCall],
  );
  
  // 将 `handler` 传递给 `IntegratedManager`
  IntegratedManager.instance.init(
      // 其他参数
      // ...
      caseList: [handler],
  );
}

示例代码

以下是一个完整的示例代码,展示了如何使用hawk_meta插件:

import 'dart:async';
import 'package:hawk_meta/hawk_meta.dart';

class UserInfo {
  final String userId;
  final String userToken;
  final String userName;

  UserInfo(this.userId, this.userToken, this.userName);

  UserInfo.fromMap(Map map)
      : userId = map['userId'] as String,
        userToken = map['userToken'] as String,
        userName = map['userName'] as String;
}

[@HawkEntryPoint](/user/HawkEntryPoint)()
class AuthService {
  Future<UserInfo> login(String userId, String userToken) async {
    await Future.delayed(const Duration(seconds: 2));
    return UserInfo(userId, userToken, 'test');
  }
}

void testHawk() {
  final handler = HawkMethodCallDispatcher();
  
  // 注册自定义的 fromMap/toMap 方法
  handler.registerTypeConverter(
    fromMap: (map) async => UserInfo.fromMap(map),
    toMap: (UserInfo info) => {
      'userId': info.userId,
      'userToken': info.userToken,
      'userName': info.userName,
    },
  );
  
  // 注册方法调用处理器
  handler.registerMethodCallHandler(
    'AuthService',
    instanceGetter: () async => AuthService(),
    handlers: [HawkAuthService.handleHawkMethodCall],
  );
  
  // 初始化 IntegratedManager 并传递 handler
  IntegratedManager.instance.init(
      // 其他参数
      // ...
      caseList: [handler],
  );
}

void main() {
  testHawk();
}

更多关于Flutter数据持久化插件hawk_meta的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


hawk_meta 是一个用于 Flutter 应用的数据持久化插件,它基于 hawk 包,提供了简单易用的 API 来存储和检索键值对数据。hawk 是一个轻量级的、高性能的、支持多平台的键值存储库,支持异步操作和加密存储。

安装 hawk_meta

首先,你需要在 pubspec.yaml 文件中添加 hawk_meta 依赖:

dependencies:
  flutter:
    sdk: flutter
  hawk_meta: ^0.1.0

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

初始化 hawk_meta

在使用 hawk_meta 之前,你需要初始化它。通常在应用的 main 函数中进行初始化:

import 'package:flutter/material.dart';
import 'package:hawk_meta/hawk_meta.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  await HawkMeta.init(); // 初始化 hawk_meta
  
  runApp(MyApp());
}

存储数据

你可以使用 HawkMeta 提供的 put 方法将数据存储到本地。

await HawkMeta.put('key1', 'value1');
await HawkMeta.put('key2', 123);
await HawkMeta.put('key3', {'name': 'John', 'age': 30});

检索数据

使用 get 方法可以从本地存储中检索数据。

String? value1 = await HawkMeta.get<String>('key1');
int? value2 = await HawkMeta.get<int>('key2');
Map<String, dynamic>? value3 = await HawkMeta.get<Map<String, dynamic>>('key3');

print(value1); // 输出: value1
print(value2); // 输出: 123
print(value3); // 输出: {name: John, age: 30}

删除数据

使用 delete 方法可以删除存储的数据。

await HawkMeta.delete('key1');

检查数据是否存在

使用 containsKey 方法可以检查某个键是否存在。

bool exists = await HawkMeta.containsKey('key1');
print(exists); // 输出: false (如果 key1 已被删除)

清空所有数据

使用 clear 方法可以清空所有存储的数据。

await HawkMeta.clear();

加密存储

hawk_meta 支持加密存储数据,你可以在初始化时设置加密密钥:

await HawkMeta.init(encryptionKey: 'your-encryption-key');
回到顶部