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