getListView method

Widget getListView({
  1. required Widget itemBuilder(
    1. BuildContext,
    2. FireDocTuple
    ),
  2. void onRefresh(
    1. BuildContext
    )?,
  3. int pageSize = 10,
  4. FirestoreLoadingBuilder? loadingBuilder,
  5. FirestoreErrorBuilder? errorBuilder,
  6. FirestoreEmptyBuilder? emptyBuilder,
  7. Axis scrollDirection = Axis.vertical,
  8. bool reverse = false,
  9. ScrollController? controller,
  10. bool? primary,
  11. ScrollPhysics? physics,
  12. bool shrinkWrap = false,
  13. EdgeInsetsGeometry? padding,
  14. double? itemExtent,
  15. Widget? prototypeItem,
  16. bool addAutomaticKeepAlives = true,
  17. bool addRepaintBoundaries = true,
  18. bool addSemanticIndexes = true,
  19. double? cacheExtent,
  20. int? semanticChildCount,
  21. DragStartBehavior dragStartBehavior = DragStartBehavior.start,
  22. ScrollViewKeyboardDismissBehavior keyboardDismissBehavior = ScrollViewKeyboardDismissBehavior.manual,
  23. String? restorationId,
  24. Clip clipBehavior = Clip.hardEdge,
  25. (String, Object?)? equalWith,
  26. List<(String, Object?)>? filters,
  27. (String, bool)? orderBy,
})

To build a list view with pagination

Implementation

Widget getListView({
  required Widget Function(BuildContext, FireDocTuple) itemBuilder,
  void Function(BuildContext)? onRefresh,
  int pageSize = 10,
  FirestoreLoadingBuilder? loadingBuilder,
  FirestoreErrorBuilder? errorBuilder,
  FirestoreEmptyBuilder? emptyBuilder,
  Axis scrollDirection = Axis.vertical,
  bool reverse = false,
  ScrollController? controller,
  bool? primary,
  ScrollPhysics? physics,
  bool shrinkWrap = false,
  EdgeInsetsGeometry? padding,
  double? itemExtent,
  Widget? prototypeItem,
  bool addAutomaticKeepAlives = true,
  bool addRepaintBoundaries = true,
  bool addSemanticIndexes = true,
  double? cacheExtent,
  int? semanticChildCount,
  DragStartBehavior dragStartBehavior = DragStartBehavior.start,
  ScrollViewKeyboardDismissBehavior keyboardDismissBehavior =
      ScrollViewKeyboardDismissBehavior.manual,
  String? restorationId,
  Clip clipBehavior = Clip.hardEdge,
  // TODO: remove this and use filters
  (String, Object?)? equalWith,
  List<(String, Object?)>? filters,
  (String, bool)? orderBy,
}) {
  Query query = _reference;

  // filter
  if (equalWith != null) {
    query = query.where(equalWith.$1, isEqualTo: equalWith.$2);
  }
  if (filters != null) {
    for (final filter in filters) {
      query = query.where(filter.$1, isEqualTo: filter.$2);
    }
  }

  if (orderBy != null) {
    query = query.orderBy(orderBy.$1, descending: orderBy.$2);
  }

  return FirestoreListView(
      query: query,
      onRefresh: onRefresh,
      pageSize: pageSize,
      loadingBuilder: loadingBuilder,
      errorBuilder: errorBuilder,
      emptyBuilder: emptyBuilder,
      scrollDirection: scrollDirection,
      reverse: reverse,
      controller: controller,
      primary: primary,
      physics: physics,
      shrinkWrap: shrinkWrap,
      padding: padding,
      itemExtent: itemExtent,
      prototypeItem: prototypeItem,
      addAutomaticKeepAlives: addAutomaticKeepAlives,
      addRepaintBoundaries: addRepaintBoundaries,
      addSemanticIndexes: addSemanticIndexes,
      cacheExtent: cacheExtent,
      semanticChildCount: semanticChildCount,
      dragStartBehavior: dragStartBehavior,
      keyboardDismissBehavior: keyboardDismissBehavior,
      restorationId: restorationId,
      clipBehavior: clipBehavior,
      itemBuilder: (context, snapshot) {
        final casedSnapshot =
            snapshot as QueryDocumentSnapshot<Map<String, dynamic>>;
        return itemBuilder(
            context, FireDocTuple(casedSnapshot, FireDoc.castMap));
      });
}