Pakete, Repositories und App-Kategorien suchen

Paketdetailsv2.2.0

simple_json_persistence

Flutter-Datenbank basierend auf einfachen JSON-Dateien mit Unterstützung für mehrere Speicherinstanzen, Streams usw.

AndroidiOSWebmacOSWindowsLinux
30-Tage-Downloads
296
Likes
5
Pub-Punkte
150

Paket installieren

flutter pub add simple_json_persistence

Paketübersicht

Aus öffentlichen Paketdaten erstellte Orientierung.

Ein Flutter-Paket für einfache JSON-basierte Datenpersistenz, das die Speicherung strukturierter Daten in JSON-Dateien auf mehreren Plattformen ermöglicht. Es unterstützt mehrere unabhängige Speicherinstanzen, Echtzeit-Datenströme und nahtlose Integration mit dem asynchronen Modell von Dart. Ideal für Apps, die eine leichtgewichtige, dateibasierte Speicherung ohne den Overhead komplexer Datenbanken benötigen. Das Paket ist einfach zu verwenden, erfordert minimale Einrichtung und bietet klare APIs zum Lesen, Schreiben und Beobachten von Änderungen. Besonders nützlich für kleine bis mittelgroße Anwendungen, bei denen vollständige Datenbanksysteme überflüssig sind.

Anwendungsfälle

  • Speichern von Benutzereinstellungen
  • App-Zustand zwischen Sitzungen speichern
  • Lokale Konfigurationsdateien verwalten
  • Persistenz kleiner Datensätze
  • Offline-Datenzugriff aktivieren

Hauptmerkmale

  • Mehrere Speicherinstanzen
  • Echtzeit-Datenströmung
  • Plattformübergreifende Unterstützung
  • Einfache API
  • Dateibasierte JSON-Speicherung

Geeignet für

  • Leichte Datenspeicherungsanforderungen
  • Prototyping und kleine Apps
  • Offline-first-Anwendungen
  • Apps, die komplexe Datenbanken vermeiden

Hinweise

  • Nicht geeignet für große Datensätze
  • Eingeschränkte Abfragefunktionen
  • Keine integrierte Verschlüsselung
  • Die Leistung kann bei sehr großen Dateien abnehmen

Original-README

Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.

simple_json_persistence

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:

  1. It is completely written in dart, so no communication with native ios/android code.
  2. It is possible to have multiple storages for different base types. While the shared preferences load the whole data into memory at once, this allows you to split it up into multiple json storage. (e.g. one small storage for app data/config which needs to be loaded on startup and a larger json storage with larger application data).

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.

Getting Started

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');
  });
}

Usage in flutter (StreamBuilder)

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'}'),
  );
}

Kategorien

Abhängigkeiten

Abhängigkeiten 8 Einträge

Quell-Repository

Projekte, die dieses Paket verwenden