FirestoreListView<Document>.separated constructor
FirestoreListView<Document>.separated ({
- Key? key,
- required Query<
Document> query, - required FirestoreItemBuilder<
Document> itemBuilder, - int pageSize = 10,
- FirestoreLoadingBuilder? loadingBuilder,
- FirestoreFetchingIndicatorBuilder? fetchingIndicatorBuilder,
- FirestoreErrorBuilder? errorBuilder,
- FirestoreEmptyBuilder? emptyBuilder,
- required IndexedWidgetBuilder separatorBuilder,
- Axis scrollDirection = Axis.vertical,
- bool showFetchingIndicator = false,
- bool reverse = false,
- ScrollController? controller,
- bool? primary,
- ScrollPhysics? physics,
- bool shrinkWrap = false,
- EdgeInsetsGeometry? padding,
- ChildIndexGetter? findChildIndexCallback,
- bool addAutomaticKeepAlives = true,
- bool addRepaintBoundaries = true,
- bool addSemanticIndexes = true,
- double? cacheExtent,
- DragStartBehavior dragStartBehavior = DragStartBehavior.start,
- ScrollViewKeyboardDismissBehavior keyboardDismissBehavior = ScrollViewKeyboardDismissBehavior.manual,
- String? restorationId,
- Clip clipBehavior = Clip.hardEdge,
Shows a separator between list items just as in ListView.separated
Implementation
FirestoreListView.separated({
super.key,
required super.query,
required FirestoreItemBuilder<Document> itemBuilder,
super.pageSize,
FirestoreLoadingBuilder? loadingBuilder,
FirestoreFetchingIndicatorBuilder? fetchingIndicatorBuilder,
FirestoreErrorBuilder? errorBuilder,
FirestoreEmptyBuilder? emptyBuilder,
required IndexedWidgetBuilder separatorBuilder,
Axis scrollDirection = Axis.vertical,
bool showFetchingIndicator = false,
bool reverse = false,
ScrollController? controller,
bool? primary,
ScrollPhysics? physics,
bool shrinkWrap = false,
EdgeInsetsGeometry? padding,
ChildIndexGetter? findChildIndexCallback,
bool addAutomaticKeepAlives = true,
bool addRepaintBoundaries = true,
bool addSemanticIndexes = true,
double? cacheExtent,
DragStartBehavior dragStartBehavior = DragStartBehavior.start,
ScrollViewKeyboardDismissBehavior keyboardDismissBehavior =
ScrollViewKeyboardDismissBehavior.manual,
String? restorationId,
Clip clipBehavior = Clip.hardEdge,
}) : super(
builder: (context, snapshot, _) {
if (snapshot.isFetching) {
return loadingBuilder?.call(context) ??
const Center(child: CircularProgressIndicator());
}
if (snapshot.hasError && errorBuilder != null) {
return errorBuilder(
context,
snapshot.error!,
snapshot.stackTrace!,
);
}
if (snapshot.docs.isEmpty && emptyBuilder != null) {
return emptyBuilder(context);
}
final itemCount = snapshot.docs.length;
return ListView.separated(
itemCount: itemCount,
itemBuilder: (context, index) {
final isLastItem = index + 1 == itemCount;
if (!showFetchingIndicator && isLastItem && snapshot.hasMore) {
snapshot.fetchMore();
}
final doc = snapshot.docs[index];
return showFetchingIndicator
? OnMountListener(
onMount: () {
if (isLastItem && snapshot.hasMore) {
snapshot.fetchMore();
}
},
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
itemBuilder(context, doc),
if (isLastItem && snapshot.hasMore)
fetchingIndicatorBuilder?.call(context) ??
const Padding(
padding: EdgeInsets.symmetric(
vertical: 16.0,
),
child: Center(
child: LoadingIndicator(
size: 30.0,
borderWidth: 2.0,
),
),
),
],
),
)
: itemBuilder(context, doc);
},
separatorBuilder: separatorBuilder,
scrollDirection: scrollDirection,
reverse: reverse,
controller: controller,
primary: primary,
physics: physics,
shrinkWrap: shrinkWrap,
padding: padding,
findChildIndexCallback: findChildIndexCallback,
addAutomaticKeepAlives: addAutomaticKeepAlives,
addRepaintBoundaries: addRepaintBoundaries,
addSemanticIndexes: addSemanticIndexes,
cacheExtent: cacheExtent,
dragStartBehavior: dragStartBehavior,
keyboardDismissBehavior: keyboardDismissBehavior,
restorationId: restorationId,
clipBehavior: clipBehavior,
);
},
);