Flutter数据持久化插件keeper的使用
Flutter数据持久化插件keeper的使用
Keeper简化了状态存储。只需指定存储位置,Keeper就会处理其余的事情。你不需要编写代码来加载、保存和转换数据,Keeper会为你处理这些事情。
特性
- ✅ 同步存储
- 🚧 异步存储*
- ✅ 存储单个异步值
- ❌ 在同步键中存储值
- ❌ MobX存储支持
- ❌ 函数类型
- ❌ 观察存储更改
- ✅ 可扩展为多种存储容器
支持的存储容器:
- ✅ 内存存储
- ✅ Hive存储(通过keeper_hive)
* 每个字段仅支持一个异步注解,异步字段不支持同步注解
✅ 可用 | 🚧 开发中 | ❌ 不支持
入门指南
Keeper依赖于代码生成来避免编写存储代码。代码由keeper_codegen生成,该工具需要build_runner。
⚠️ 这是一个实验性项目。谨慎使用。
使用方法
在pubspec.yaml
文件中添加依赖项:
dependencies:
keeper: ^0.0.1
dev_dependencies:
build_runner: ^2.1.5 # 检查pub.dev上的最新版本
keeper_codegen: ^0.0.1 # 检查pub.dev上的最新版本
在你的Dart文件中导入keeper
:
import 'package:keeper/keeper.dart';
设置存储键:
KeepKey counterValue() => MemoryKeep().key('counter_value');
设置类:
part 'counter.g.dart';
class Counter = _Counter with _$CounterKeeper;
[@kept](/user/kept)
class _Counter {
@At(counterValue)
int value = 0;
void increment() {
value++;
}
}
当值发生变化时,它将自动存储。
不同的存储机制可能需要不同的初始化。
额外信息
欢迎贡献和报告问题!请包含相关信息以帮助解决问题。
该项目在MIT许可证下授权。
示例
以下是简单的计数器类示例。它们展示了如何使用插件与同步和异步键。
计数器 (counter.dart)
使用同步键的计数器示例:
import 'package:keeper/keeper.dart';
part 'counter.g.dart';
class Counter = _Counter with _$CounterKeeper;
KeepKey counterValue() => MemoryKeep().key('counter_value');
[@kept](/user/kept)
class _Counter {
@At(counterValue)
int value = 0;
void increment() {
value++; // 增加计数值
}
}
异步计数器 (counter_async.dart)
使用异步键的计数器示例:
import 'package:keeper/keeper.dart';
part 'counter_async.g.dart';
class CounterAsync = _CounterAsync with _$CounterAsyncKeeper;
KeepAsyncKey<int> counterAsyncValue() => MemoryKeep().asyncKey('counter_async');
[@kept](/user/kept)
class _CounterAsync {
[@AtAsync](/user/AtAsync)(counterAsyncValue)
KeepAsyncValue<int> value = KeepAsyncValue(0); // 初始化计数值为0
Future increment() async {
await value.set(await value.get() + 1); // 增加计数值并存储
}
}
更多关于Flutter数据持久化插件keeper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据持久化插件keeper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用keeper
插件进行数据持久化的代码示例。keeper
是一个轻量级、易用的Flutter本地存储插件,支持简单的键值对存储。
步骤 1: 添加依赖
首先,在你的pubspec.yaml
文件中添加keeper
依赖:
dependencies:
flutter:
sdk: flutter
keeper: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
步骤 2: 导入并使用Keeper
在你的Dart文件中导入keeper
包,并使用它来存储和检索数据。
import 'package:flutter/material.dart';
import 'package:keeper/keeper.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Keeper Example',
home: KeeperExampleScreen(),
);
}
}
class KeeperExampleScreen extends StatefulWidget {
@override
_KeeperExampleScreenState createState() => _KeeperExampleScreenState();
}
class _KeeperExampleScreenState extends State<KeeperExampleScreen> {
final Keeper _keeper = Keeper();
String? _savedValue;
@override
void initState() {
super.initState();
// 尝试从Keeper中获取之前保存的值
_loadValue();
}
Future<void> _loadValue() async {
String? value = await _keeper.getString('my_key');
setState(() {
_savedValue = value;
});
}
Future<void> _saveValue(String value) async {
await _keeper.setString('my_key', value);
setState(() {
_savedValue = value;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Keeper Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
'Saved Value:',
style: TextStyle(fontSize: 18),
),
SizedBox(height: 8),
Text(
_savedValue ?? 'No value saved yet',
style: TextStyle(fontSize: 16),
),
SizedBox(height: 24),
TextField(
decoration: InputDecoration(labelText: 'Enter a value'),
onChanged: (value) {
// 你可以在这里实时保存数据,或者点击按钮保存
// _saveValue(value);
},
),
SizedBox(height: 16),
ElevatedButton(
onPressed: () async {
// 获取TextField中的当前值(这里假设你有一个controller来获取它)
// String currentValue = textFieldController.text;
// 由于示例中未使用controller,这里直接用一个示例值
String currentValue = 'Example Value';
await _saveValue(currentValue);
},
child: Text('Save Value'),
),
],
),
),
);
}
}
注意事项
- TextField Controller: 在实际项目中,你可能需要一个
TextEditingController
来管理TextField
的值。上面的代码为了简化,没有使用TextEditingController
。 - 异常处理: 在实际项目中,进行异步操作时应该添加异常处理,以确保应用的健壮性。
- 清理资源: 在适当的时机清理资源,例如在应用关闭时取消未完成的异步操作。
这个示例展示了如何使用keeper
插件进行简单的键值对存储。keeper
还提供了其他类型的数据存储方法,如setInt
、setDouble
、setBool
等,你可以根据需求选择合适的方法进行数据持久化。