t×tecexpressby TeKOcloud
ENv0.7.1
API & Datentypen / FLUTTER

TxDataSource.

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

ParameterTypStandardBedeutung
configTxDataSourceConfig<T>erforderlichKonfiguration der Instanz.

TxDataSource.array

ParameterTypStandardBedeutung
itemsList<T>erforderlichEinträge; bei Datenbindung durch dataSource ersetzt.
keyOfTxKeyOf<T>?nullLiest den stabilen Datensatzschlüssel.
paginateboolfalseAktiviert Paging; false lädt den gesamten Bestand.
Mitglied / Typ / RückgabeBedeutung
TxStore<T> get storeDatenbestand oder eigener Store-Vertrag.
List<T> get itemsEinträge; bei Datenbindung durch dataSource ersetzt.
List<TxGroup<T>> groups = []Gruppenhierarchie des Ergebnisses.
int totalCount = 0Gesamtanzahl 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? groupCountAnzahl oberster Gruppen vor Paging.
bool loading = falseZeigt den Ladezustand.
bool loaded = falseMindestens ein Ladevorgang war erfolgreich.
Object? errorLetzter Lade-/Schreibfehler.
List<TxSort<T>> sortSortierbeschreibungen in Prioritätsreihenfolge.
List<TxSort<T>> groupGruppierungsbeschreibungen beziehungsweise Gruppenname.
TxFilter<T>? filterFilterausdruck.
List<TxGetter<T>> searchExprFelder beziehungsweise Getter der Suche.
String searchValueSuchtext, lokal ohne Beachtung der Groß-/Kleinschreibung.
int pageSizeAnzahl Datensätze je Seite.
int pageIndexNullbasierter 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.
dart
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();
}