Aus öffentlichen Paketdaten erstellte Orientierung.
Flutter Data bietet einen vereinfachten Ansatz zur Verwaltung persistenter Datenmodelle in Flutter-Anwendungen, der sich von Ember Data und ActiveRecord inspirieren lässt. Es vereinfacht CRUD-Vorgänge, Zustandsverwaltung und Datensynchronisation über Geräte hinweg, indem es eine einheitliche API für die Arbeit mit lokalen und remote Datenquellen bereitstellt. Das Paket integriert sich nahtlos in das Flutter-Ökosystem und unterstützt typensichere Modelle, automatische Serialisierung und eingebautes Caching. Entwickler können Datenmodelle und Beziehungen einfach definieren, wodurch eine effiziente Datenhandhabung ohne Boilerplate-Code möglich ist.
Anwendungsfälle
Verwaltung von Datenworkflows mit Fokus auf Offline
Synchronisieren von Daten zwischen lokaler Speicherung und APIs
Skalierbare CRUD-Anwendungen erstellen
Behandlung komplexer Datenbeziehungen
Reaktive Datenaktualisierungen implementieren
Hauptmerkmale
Automatische Modellserialisierung
Eingebaute Persistenz mit SQLite
reaktive Zustandsverwaltung
Unterstützung für REST- und GraphQL-APIs
Typsichere Datenmodelle und Abfragen
Geeignet für
Apps, die einen Offline-Zugriff auf Daten erfordern
Projekte mit REST- oder GraphQL-Backends
Entwickler, die weniger Boilerplate suchen
Teams, die eine MVC-ähnliche Datenarchitektur übernehmen
Anwendungen mit komplexen Datenbeziehungen
Hinweise
Lernkurve für neue Benutzer
Eingeschränkte Dokumentation im Vergleich zu etablierten Alternativen
Kann zusätzliche Einrichtung für benutzerdefinierte Endpunkte erfordern
Nicht ideal für sehr einfache Apps mit geringem Datenbedarf
Abhängig von externen Abhängigkeiten wie json_serializable
Original-README
Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.
Flutter Data
Persistent reactive models in Flutter with zero boilerplate
Flutter Data is a local-first data framework with a customizable REST client and powerful model relationships, built on Riverpod.
In Flutter Data, every model gets its default adapter. These adapters can be extended by mixing in custom adapters.
Annotate a model with @DataAdapter and pass a custom adapter:
@JsonSerializable()
@DataAdapter([MyJSONServerAdapter])
classUserextendsDataModel<User> {
@overridefinalint? id; // ID can be of any typefinalString name;
User({this.id, requiredthis.name});
// `User.fromJson` and `toJson` optional
}
mixinMyJSONServerAdapteronRemoteAdapter<User> {
@overrideStringget baseUrl => "https://my-json-server.typicode.com/flutterdata/demo/";
}
After code-gen, Flutter Data will generate the resulting Adapter<User> which is accessible via Riverpod's ref.users or container.users.
@overrideWidgetbuild(BuildContext context, WidgetRef ref) {
final state = ref.users.watchOne(1);
if (state.isLoading) {
returnCenter(child: constCircularProgressIndicator());
}
final user = state.model;
returnText(user.name);
}
ref.users.watchOne(1) will make a background HTTP request (to https://my-json-server.typicode.com/flutterdata/demo/users/1 in this case), deserialize data and listen for any further local changes to the user.
state is of type DataState which has loading, error and data substates.
In addition to the reactivity, models have ActiveRecord-style extension methods so the above becomes:
Appwrite Offline. A Flutter Data adapter for Appwrite that provides offline support, real-time updates, and seamless integration with Flutter Data's powerful features.
🚨 BREAKING CHANGES IN 2.0
All methods are now directly on Adapter, there is no Repository, RemoteAdapter or LocalAdapter. Any method you are looking for is probably on Adapter, for example, findAll from LocalAdapter is now called findAllLocal
For initialization we no longer call the configure... method on the Riverpod overrides, we just do localStorageProvider.overrideWithValue and pass a LocalStorage instance; the actual initialization is done via initializeFlutterData which needs an adapter map. An adapterProvidersMap is conveniently code-generated and available on main.data.dart
Offline operations are still supported, but retries are not, it is up to clients to implement them
📚 Public API
Initialization
First you need to supply a local storage provider, via Riverpod configuration. A popular option for the base directory is using the path_provider package.