Flutter数据持久化插件simple_json_persistence的使用
Flutter数据持久化插件simple_json_persistence的使用
simple_json_persistence
是一个基于简单JSON文件的Flutter数据存储插件。它完全用Dart编写,无需与原生iOS/Android代码进行通信,并支持多种存储类型。下面是如何使用这个插件的详细指南。
主要特点
- 纯Dart实现:不需要与原生代码交互。
- 多存储支持:可以为不同类型的数据创建多个存储。
- 适合中等规模数据集:适用于不适合使用SharedPreferences但又不想使用复杂数据库的场景。
开始使用
1. 创建数据模型
首先,你需要创建一个数据模型,并实现从JSON到对象和从对象到JSON的转换。这里推荐使用built_value
或json_serializable
库来简化这一过程。
import 'package:simple_json_persistence/simple_json_persistence.dart';
[@JsonSerializable](/user/JsonSerializable)(nullable: false)
class MyModel {
MyModel({required this.property});
factory MyModel.fromJson(Map<String, dynamic> json) => _$MyModelFromJson(json);
Map<String, dynamic> toJson() => _$MyModelToJson(this);
final String property;
}
2. 初始化存储并保存/加载数据
接下来,初始化SimpleJsonPersistence
实例,并保存或加载数据。
void doSomething() async {
// 初始化存储
final store = SimpleJsonPersistence.forType(
(json) => MyModel.fromJson(json),
name: 'MyModel',
);
// 保存数据
await store.save(MyModel(property: 'foo'));
// 加载数据
final foo = await store.load();
// 监听值变化
store.onValueChanged.listen((newValue) {
print('got a new value $newValue');
});
}
在Flutter应用中使用(StreamBuilder)
你可以将SimpleJsonPersistence
与StreamBuilder
结合使用,以便在数据变化时自动更新UI。
Widget build(BuildContext context) {
final store = SimpleJsonPersistence.forType(
(json) => AppData.fromJson(json),
defaultCreator: () => AppData(counter: 0));
return StreamBuilder<AppData>(
stream: store.onValueChangedAndLoad,
initialData: store.cachedValue,
builder: (context, snapshot) => Text('Counter: ${snapshot.data?.counter ?? 'Loading'}'),
);
}
完整示例
以下是一个完整的示例,展示了如何在一个简单的计数器应用中使用simple_json_persistence
:
import 'package:flutter/material.dart';
import 'package:simple_json_persistence/simple_json_persistence.dart';
// 数据模型
[@JsonSerializable](/user/JsonSerializable)(nullable: false)
class AppData {
AppData({required this.counter});
factory AppData.fromJson(Map<String, dynamic> json) => _$AppDataFromJson(json);
Map<String, dynamic> toJson() => _$AppDataToJson(this);
final int counter;
}
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(primarySwatch: Colors.blue),
home: const SimpleCounter(),
);
}
}
class SimpleCounter extends StatelessWidget {
const SimpleCounter({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
final store = SimpleJsonPersistence.getForTypeSync(
(json) => AppData.fromJson(json),
defaultCreator: () => AppData(counter: 0),
name: 'AppData',
);
return StreamBuilder<AppData?>(
stream: store.onValueChangedAndLoad,
initialData: store.cachedValue,
builder: (context, snapshot) {
final data = snapshot.data;
return Scaffold(
appBar: AppBar(title: const Text('SimpleJsonPersistence Example')),
body: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: data == null
? <Widget>[const Center(child: CircularProgressIndicator())]
: <Widget>[
const Text(
'You have pushed the button:',
textAlign: TextAlign.center,
),
Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text(
'${data.counter}',
style: Theme.of(context).textTheme.headlineSmall,
),
const Text(' times')
],
),
const SizedBox(height: 32),
const Text(
'Value will be persisted on every touch, so feel free to restart the app at any time.',
textScaler: TextScaler.linear(0.75),
textAlign: TextAlign.center,
),
],
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () => store.save(AppData(counter: (data?.counter ?? 0) + 1)),
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
});
}
}
更多关于Flutter数据持久化插件simple_json_persistence的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据持久化插件simple_json_persistence的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter应用中使用simple_json_persistence
插件进行数据持久化的示例代码。simple_json_persistence
是一个简单且易于使用的Flutter插件,用于将数据保存为JSON文件到本地存储中。
首先,确保你已经在pubspec.yaml
文件中添加了simple_json_persistence
依赖:
dependencies:
flutter:
sdk: flutter
simple_json_persistence: ^x.y.z # 替换为最新版本号
然后运行flutter pub get
来获取依赖。
接下来,你可以按照以下步骤在你的Flutter应用中使用simple_json_persistence
进行数据持久化:
- 导入依赖:
在你的Dart文件中导入simple_json_persistence
包:
import 'package:simple_json_persistence/simple_json_persistence.dart';
- 创建持久化实例:
创建一个SimpleJsonPersistence
实例,指定存储数据的目录和文件名:
final _persistence = SimpleJsonPersistence(
storageDirectory: (await getApplicationDocumentsDirectory()).path,
fileName: 'data.json',
);
- 保存数据:
使用save
方法将数据存储为JSON格式:
Map<String, dynamic> data = {
'name': 'John Doe',
'age': 30,
'email': 'john.doe@example.com',
};
await _persistence.save(data);
- 加载数据:
使用load
方法从JSON文件中加载数据:
Map<String, dynamic>? loadedData = await _persistence.load();
if (loadedData != null) {
print('Loaded Data: ${loadedData}');
} else {
print('No data found.');
}
- 删除数据:
使用delete
方法删除存储的数据文件:
await _persistence.delete();
以下是一个完整的示例,展示了如何在Flutter应用中初始化SimpleJsonPersistence
实例,保存、加载和删除数据:
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:simple_json_persistence/simple_json_persistence.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late SimpleJsonPersistence _persistence;
@override
void initState() {
super.initState();
initPersistence();
}
Future<void> initPersistence() async {
_persistence = SimpleJsonPersistence(
storageDirectory: (await getApplicationDocumentsDirectory()).path,
fileName: 'data.json',
);
}
Future<void> saveData() async {
Map<String, dynamic> data = {
'name': 'John Doe',
'age': 30,
'email': 'john.doe@example.com',
};
await _persistence.save(data);
print('Data saved.');
}
Future<void> loadData() async {
Map<String, dynamic>? loadedData = await _persistence.load();
if (loadedData != null) {
print('Loaded Data: ${loadedData}');
} else {
print('No data found.');
}
}
Future<void> deleteData() async {
await _persistence.delete();
print('Data deleted.');
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Simple Json Persistence Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: saveData,
child: Text('Save Data'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: loadData,
child: Text('Load Data'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: deleteData,
child: Text('Delete Data'),
),
],
),
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,有三个按钮分别用于保存、加载和删除数据。每个按钮点击时都会调用相应的方法来执行数据持久化操作。