FirestorePageView<Document> constructor

FirestorePageView<Document>({
  1. Key? key,
  2. required Query<Document> query,
  3. required Widget itemBuilder(
    1. BuildContext,
    2. QueryDocumentSnapshot<Document>,
    3. int index
    ),
  4. int pageSize = 20,
  5. FirestoreLoadingBuilder? loadingBuilder,
  6. FirestoreErrorBuilder? errorBuilder,
  7. Widget? emptyBuilder,
  8. Axis scrollDirection = Axis.vertical,
  9. bool reverse = false,
  10. PageController? controller,
  11. ScrollPhysics physics = const BouncingScrollPhysics(),
  12. int? semanticChildCount,
  13. DragStartBehavior dragStartBehavior = DragStartBehavior.start,
  14. String? restorationId,
  15. Clip clipBehavior = Clip.hardEdge,
})

Implementation

FirestorePageView({
  Key? key,
  required Query<Document> query,
  required Widget Function(
    BuildContext,
    QueryDocumentSnapshot<Document>,
    int index,
  )
      itemBuilder,
  int pageSize = 20,
  FirestoreLoadingBuilder? loadingBuilder,
  FirestoreErrorBuilder? errorBuilder,
  Widget? emptyBuilder,
  Axis scrollDirection = Axis.vertical,
  bool reverse = false,
  PageController? controller,
  ScrollPhysics physics = const BouncingScrollPhysics(),
  int? semanticChildCount,
  DragStartBehavior dragStartBehavior = DragStartBehavior.start,
  String? restorationId,
  Clip clipBehavior = Clip.hardEdge,
}) : super(
        key: key,
        query: query,
        pageSize: pageSize,
        builder: (context, snapshot, _) {
          if (snapshot.isFetching) {
            return loadingBuilder?.call(context) ??
                const Center(child: CircularProgressIndicator());
          }

          if (snapshot.docs.isEmpty) {
            return emptyBuilder ??
                const Center(
                  child: Text(
                    'No Data',
                    style: TextStyle(fontSize: 20, color: Colors.white),
                  ),
                );
          }

          if (snapshot.hasError && errorBuilder != null) {
            return errorBuilder(
              context,
              snapshot.error!,
              snapshot.stackTrace!,
            );
          }

          return PageView.builder(
            itemCount: snapshot.docs.length,
            itemBuilder: (context, index) {
              final isLastItem = index + 1 == snapshot.docs.length;
              if (isLastItem && snapshot.hasMore) {
                snapshot.fetchMore();
              }

              final doc = snapshot.docs[index];

              return itemBuilder(
                context,
                doc,
                index,
              );
            },
            scrollDirection: scrollDirection,
            reverse: reverse,
            controller: controller,
            physics: physics,
            dragStartBehavior: dragStartBehavior,
            restorationId: restorationId,
            clipBehavior: clipBehavior,
          );
        },
      );