init method
void
init()
Implementation
void init() async {
// Temprorary workaround for issue:
// https://github.com/appwrite/sdk-generator/issues/417
if (!(widget.database.client as ClientIO).initialized) {
await (widget.database.client as ClientIO).init();
}
// Set the initial set of documents and offset.
final documentList = await widget.database
.listDocuments(
collectionId: widget.collectionId,
limit: widget.itemsPerPage,
offset: _offset,
orderTypes: widget.orderTypes,
orderAttributes: widget.orderAttributes,
queries: widget.queries,
)
.timeout(Duration(milliseconds: widget.timeout), onTimeout: () {
setState(() => _widgetStates = WidgetStates.timeout);
return _documentList;
});
_documentList = documentList;
_offset = 0;
// Bind to the page controller.
_pageControllerDirection = PageControllerDirection.initial;
_pageControllerSubscription =
widget.pageController!.controller.stream.listen((event) async {
_pageControllerDirection = event;
await listDocuments().timeout(Duration(milliseconds: widget.timeout),
onTimeout: () {
setState(() => _widgetStates = WidgetStates.timeout);
return _documentList;
});
});
// Bind to the realtime subscription.
if (widget.realtime) {
widget.pageController?._isAtStart = true;
widget.pageController?._isAtEnd = false;
_realtime = appwrite.Realtime(widget.database.client);
_realtimeSubscription = _realtime.subscribe([
'databases.${widget.database.databaseId}.collections.${widget.collectionId}.documents',
'databases.${widget.database.databaseId}.collections.${widget.collectionId}.documents.*.create',
'databases.${widget.database.databaseId}.collections.${widget.collectionId}.documents.*.delete',
'databases.${widget.database.databaseId}.collections.${widget.collectionId}.documents.*.update',
]);
_realtimeSubscription.stream.listen((event) async {
_pageControllerDirection = PageControllerDirection.updateCurrent;
await listDocuments().timeout(Duration(milliseconds: widget.timeout),
onTimeout: () {
setState(() => _widgetStates = WidgetStates.timeout);
return _documentList;
});
});
} else {
null;
}
if (_widgetStates == WidgetStates.timeout) {
setState(() => _widgetStates = WidgetStates.timeout);
} else if (_documentList.total <= 0) {
setState(() => _widgetStates = WidgetStates.empty);
// Start/End are true for empty document lists.
widget.pageController?._isAtStart = true;
widget.pageController?._isAtEnd = true;
} else {
setState(() => _widgetStates = WidgetStates.data);
}
}