Beobachtbare Datenquelle mit Abfragezustand und asynchronem Laden. Schreiboperationen laden anschließend neu; der Eigentümer entsorgt die Instanz.
Standardkonfiguration: pageSize 20, pageIndex 0, paginate true; ArrayStore lokal, andere Stores entfernt. Der Vue-Arraykurzaufruf behält Paging bei; Dart TxDataSource.array verwendet paginate false. items startet leer; load() ist erforderlich, sofern kein gebundener Konsument initial lädt. Ungültiges Paging wird abgelehnt. Store und Schlüssel durch eine neue Instanz ersetzen. configure liefert Promise/Future der neu geladenen Liste. byKey liefert Promise/Future des Datensatzes oder undefined/null; insert/update liefern den geschriebenen Datensatz, remove keinen Wert. Vue push liefert die neue Liste, Dart push keinen Wert. cancel/dispose liefern keinen Wert. Lade-/Schreibfehler stehen zusätzlich in error. Bei Stores ohne optionale Operation wirft Vue Error, Dart UnsupportedError. Nach dispose schlägt load fehl.
TxDataSource
| Parameter | Typ | Standard | Bedeutung |
|---|---|---|---|
| config | TxDataSourceConfig<T> | erforderlich | Konfiguration der Instanz. |
TxDataSource.array
| Parameter | Typ | Standard | Bedeutung |
|---|---|---|---|
| items | List<T> | erforderlich | Einträge; bei Datenbindung durch dataSource ersetzt. |
| keyOf | TxKeyOf<T>? | null | Liest den stabilen Datensatzschlüssel. |
| paginate | bool | false | Aktiviert Paging; false lädt den gesamten Bestand. |
| Mitglied / Typ / Rückgabe | Bedeutung |
|---|---|
TxStore<T> get store | Datenbestand oder eigener Store-Vertrag. |
List<T> get items | Einträge; bei Datenbindung durch dataSource ersetzt. |
List<TxGroup<T>> groups = [] | Gruppenhierarchie des Ergebnisses. |
int totalCount = 0 | Gesamtanzahl gefilterter Datensätze vor Paging. |
int revision = 0 | Änderungszähler nach erfolgreichem Laden. |
bool? containsKey(Object key) | Liefert false für bekannte Löschungen, beim ArrayStore einen Wahrheitswert, sonst undefined/null. |
int? groupCount | Anzahl oberster Gruppen vor Paging. |
bool loading = false | Zeigt den Ladezustand. |
bool loaded = false | Mindestens ein Ladevorgang war erfolgreich. |
Object? error | Letzter Lade-/Schreibfehler. |
List<TxSort<T>> sort | Sortierbeschreibungen in Prioritätsreihenfolge. |
List<TxSort<T>> group | Gruppierungsbeschreibungen beziehungsweise Gruppenname. |
TxFilter<T>? filter | Filterausdruck. |
List<TxGetter<T>> searchExpr | Felder beziehungsweise Getter der Suche. |
String searchValue | Suchtext, lokal ohne Beachtung der Groß-/Kleinschreibung. |
int pageSize | Anzahl Datensätze je Seite. |
int pageIndex | Nullbasierter Seitenindex. |
Future<List<T>> load() | Lädt mit den angegebenen Optionen; bei DataSource ohne Argumente mit aktuellem Abfragezustand. Fehler werden weitergegeben. |
Future<List<T>> reload() | Lädt den aktuellen Abfragezustand erneut und liefert die sichtbaren Datensätze. |
Future<List<T>> configure({List<TxSort<T>>? sort, TxFilter<T>? filter, bool clearFilter = false, String? searchValue, List<TxGetter<T>>? searchExpr, List<TxSort<T>>? group, int? pageSize, int? pageIndex}) | Ändert Abfrageoptionen und lädt neu. Suche, Filter und Seitengröße setzen die Seite zurück, sofern nicht ausdrücklich angegeben. |
void cancel() | Synchron auf true setzen, um die Aktion abzubrechen. |
Future<T?> byKey(Object key) | Liest einen Datensatz anhand seines Schlüssels; fehlende Schlüssel ergeben undefined (Vue) beziehungsweise null (Dart). |
Future<T> insert(T item) | Fügt einen Datensatz mit eindeutigem Schlüssel ein und liefert ihn zurück. |
Future<T> update(Object key, T Function(T) change) | Aktualisiert eine Meldung beziehungsweise einen Datensatz. |
Future<void> remove(Object key) | Löscht den Datensatz beziehungsweise rekursiv den Datei-/Ordnerbestand. |
Future<void> push(List<TxPush<T>> changes) | Führt Store-Schreiboperationen nacheinander aus und lädt einmal neu; keine Transaktion, Teilerfolg bei Fehler möglich. |
void dispose() | Beendet Abfragen und Listener; danach die Instanz nicht mehr verwenden. |
import 'package:flutter/material.dart';
import 'package:tecexpress/tecexpress.dart';
Future<void> example() async {
final source = TxDataSource.array(<Map<String, Object>>[{'id': 1, 'name': 'One'}], keyOf: (row) => row['id']!);
void listener() => debugPrint('${source.loading}: ${source.error}');
source.addListener(listener);
await source.load();
await source.configure(searchExpr: [(row) => row['name']], searchValue: 'One');
await source.insert({'id': 2, 'name': 'Two'});
await source.update(2, (row) => {...row, 'name': 'Updated'});
await source.push([TxPush.update(2, (row) => {...row, 'name': 'Changed'})]);
print(await source.byKey(1));
print(source.containsKey(1));
await source.remove(2);
await source.reload();
source.cancel();
source.removeListener(listener);
source.dispose();
}