Flutter数据持久化插件get_rx_persist的使用
Flutter数据持久化插件get_rx_persist的使用
get_rx_persist
一个用于自动恢复和持久化的Flutter项目。
示例
请查看示例
特性
- 易于使用
- 支持所有平台
- 支持各种自定义存储
- 在多个实际项目中使用
- 100% 测试覆盖率
支持的数据类型
int, num, double, String, bool, Null, Object, List, Set, Map
维护
此项目正在维护中。
安装
flutter pub add get_rx_persist
存储
提供的存储
- DefaultStorageProvider/GetStorageProvider: 使用GetStorage作为存储
- MemoryStorageProvider: 使用内存作为存储
- MockStorageProvider: 用于测试,提供一些测试辅助方法,请参阅源码获取更多信息
自定义存储
创建一个继承自StorageProvider
的自定义类:
import 'package:get_rx_persist/src/storage_provider.dart';
// 您的自定义存储提供器
class CustomizedStorageProvider extends StorageProvider {
// 实现所有抽象方法
}
完整示例
0. 设置
始终记得执行以下操作:
import 'package:get_rx_persist/get_rx_persist.dart';
void main() async {
await GetRxPersist.init(); // 这一行非常重要!!!!
runApp(const App());
}
1. 基础用法
class Product {
final name = 'Code'.obs.persist('product.name'); // 键 [product.name] 可以更改为您喜欢的任何值
final createdAt = 123141212412.obs.persist('product.createdAt');
final isOnTop = false.obs.persist('product.isOnTop');
final Rx<String> introduction = Rx<String>('free to use').persist('product.introduction');
}
2. 可空用法
class Product {
final uuid = Rx<String?>(null).obs.persist('product.uuid');
}
Product().uuid.value = null;
Product().uuid.value = 'uuid';
3. 对象用法
方法 1: 序列化对象
您可以使用在线 JSON 到 Dart 转换器生成序列化对象。
注意: 您不需要为序列化对象提供序列化器。
class Profile {
String? name;
Profile({this.name});
Profile.fromJson(Map<String, dynamic> json) {
name = json['name'];
}
// 必须实现: 这个方法会被 [get_rx_persist] 自动调用
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['name'] = this.name;
return data;
}
}
class User {
final profile = Profile().obs.persist(
'user.profile',
deserializer: Profile.fromJson, // 当您持久化一个对象值时,必须提供反序列化器。
);
}
方法 2: 序列化器和反序列化器
class Profile {
String? name;
Profile({this.name});
}
class User {
final profile = Profile().obs.persist(
'user.profile',
serializer: (obj) => {'name': obj.name}, // 必须实现
deserializer: (jsonMap) => Profile(name: jsonMap['name']), // 必须实现
);
}
更多关于Flutter数据持久化插件get_rx_persist的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据持久化插件get_rx_persist的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
get_rx_persist
是一个用于 Flutter 的数据持久化插件,它结合了 get
状态管理库和 rxdart
响应式编程库,提供了一种简单且强大的方式来持久化和管理应用程序的状态数据。通过 get_rx_persist
,你可以轻松地将应用程序的状态保存到本地存储(如 SharedPreferences 或 Hive),并在应用程序重新启动时恢复这些状态。
安装 get_rx_persist
首先,你需要在 pubspec.yaml
文件中添加 get_rx_persist
依赖:
dependencies:
flutter:
sdk: flutter
get_rx_persist: ^1.0.0
然后运行 flutter pub get
来安装依赖。
基本用法
1. 初始化 GetRxPersist
在使用 get_rx_persist
之前,你需要初始化它。通常你可以在 main.dart
文件中进行初始化:
import 'package:flutter/material.dart';
import 'package:get_rx_persist/get_rx_persist.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 GetRxPersist
await GetRxPersist.init();
runApp(MyApp());
}
2. 创建可持久化的 Rx 变量
你可以使用 RxPersist
来创建可持久化的 Rx 变量。这些变量会在应用程序重启时自动从本地存储中恢复。
import 'package:get/get.dart';
import 'package:get_rx_persist/get_rx_persist.dart';
class MyController extends GetxController {
// 创建一个可持久化的 RxInt 变量
final RxPersistInt counter = RxPersistInt('counter', defaultValue: 0);
void increment() {
counter.value++;
}
}
3. 在 UI 中使用可持久化的 Rx 变量
你可以在 UI 中使用 GetX
或 Obx
来观察和更新这些可持久化的 Rx 变量。
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'controller.dart'; // 假设你的控制器在 controller.dart 文件中
class MyApp extends StatelessWidget {
final MyController controller = Get.put(MyController());
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('GetRxPersist Example')),
body: Center(
child: Obx(() => Text('Counter: ${controller.counter.value}')),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
controller.increment();
},
child: Icon(Icons.add),
),
),
);
}
}
支持的持久化类型
get_rx_persist
支持多种类型的持久化变量,包括:
RxPersistInt
RxPersistDouble
RxPersistString
RxPersistBool
RxPersistList
RxPersistMap
自定义存储
默认情况下,get_rx_persist
使用 SharedPreferences
作为存储后端。你也可以通过实现 PersistStorage
接口来自定义存储后端。
class CustomStorage implements PersistStorage {
[@override](/user/override)
Future<void> init() async {
// 初始化自定义存储
}
[@override](/user/override)
Future<void> write<T>(String key, T value) async {
// 将值写入自定义存储
}
[@override](/user/override)
Future<T?> read<T>(String key) async {
// 从自定义存储中读取值
}
[@override](/user/override)
Future<void> delete(String key) async {
// 从自定义存储中删除值
}
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 使用自定义存储初始化 GetRxPersist
await GetRxPersist.init(storage: CustomStorage());
runApp(MyApp());
}