simple_json_persistence
Armazenamento de dados do Flutter com base em arquivos JSON simples, com suporte a múltiplas instâncias de armazenamento, streams, etc.
Armazenamento de dados do Flutter com base em arquivos JSON simples.
{"sdk":"flutter"}>=1.3.0 <2.0.0>=1.8.0 <2.0.0>=1.0.0 <2.0.0>=0.26.0 <1.0.0>=2.0.0 <3.0.0>=3.0.0 <4.0.0>=1.0.0 <2.0.0>=0.5.1 <2.0.0{"sdk":"flutter"}^4.0.0^1.2.0^1.0.0Texto original em inglês. Visite o GitHub para a versão atual.
codecov Pub Cirrus CI - Base Branch Build Status
Flutter data storage based on simple json files. The main advantage to using for example the shared preference plugin is that:
It is still not suitable for large datasets, since all data will be kept in memory and written into the json file at once, but it's a good middle ground between shared preferences and complicated database.
To make use of SimpleJsonPersistence you have to create your
data models to serialize to and from json. I personally prefer to use
built_value with it's
serialization, or json_serializable.
Anyway, it is recommended that persistence models are immutable.
import 'package:simple_json_persistence/simple_json_persistence.dart';
@JsonSerializable(nullable: false)
class MyModel {
MyModel({this.property,});
factory MyModel.fromJson(Map<String, dynamic> json) =>
_$MyModelFromJson(json);
Map<String, dynamic> toJson() => _$MyModelToJson(this);
final String property;
}
void doSomething() async {
final store = SimpleJsonPersistence.forType(
(json) => MyModel.fromJson(json),
name = 'MyModel',
);
await store.save(MyModel(property: 'foo'));
final foo = await store.load();
// since every SimpleJsonPersistence for the same type/name is the same instance
// you can also subscribe to changes.
store.onValueChanged.listen((newValue) {
print('got a new value $newValue');
});
}
See also the example application.
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'}'),
);
}