diff --git a/docs/firebase-ui-firestore.md b/docs/firebase-ui-firestore.md index ae40a21d..9b554852 100644 --- a/docs/firebase-ui-firestore.md +++ b/docs/firebase-ui-firestore.md @@ -40,7 +40,7 @@ final usersQuery = FirebaseFirestore.instance.collection('users').orderBy('name' FirestoreListView>( query: usersQuery, - itemBuilder: (context, snapshot) { + itemBuilder: (context, snapshot, index) { Map user = snapshot.data(); return Text('User name is ${user['name']}'); @@ -109,7 +109,7 @@ final usersQuery = FirebaseFirestore.instance.collection('users') FirestoreListView( query: usersQuery, - itemBuilder: (context, snapshot) { + itemBuilder: (context, snapshot, index) { // Data is now typed! User user = snapshot.data(); diff --git a/packages/firebase_ui_firestore/example/lib/main.dart b/packages/firebase_ui_firestore/example/lib/main.dart index 50fe4ed0..2854e830 100644 --- a/packages/firebase_ui_firestore/example/lib/main.dart +++ b/packages/firebase_ui_firestore/example/lib/main.dart @@ -35,7 +35,7 @@ class FirebaseUIFirestoreExample extends StatelessWidget { body: FirestoreListView( query: collection, padding: const EdgeInsets.all(8.0), - itemBuilder: (context, snapshot) { + itemBuilder: (context, snapshot, index) { final user = snapshot.data(); return Column( children: [ diff --git a/packages/firebase_ui_firestore/lib/src/query_builder.dart b/packages/firebase_ui_firestore/lib/src/query_builder.dart index f5ba6910..aef40140 100644 --- a/packages/firebase_ui_firestore/lib/src/query_builder.dart +++ b/packages/firebase_ui_firestore/lib/src/query_builder.dart @@ -361,6 +361,7 @@ class _Sentinel { typedef FirestoreItemBuilder = Widget Function( BuildContext context, QueryDocumentSnapshot doc, + int index, ); /// A type representing the function passed to [FirestoreListView] for its `loadingBuilder`. @@ -419,7 +420,7 @@ typedef FirestoreEmptyBuilder = Widget Function(BuildContext context); /// ```dart /// FirestoreListView( /// query: moviesCollection.orderBy('title'), -/// itemBuilder: (context, snapshot) { +/// itemBuilder: (context, snapshot, index) { /// Movie movie = snapshot.data(); /// return Text(movie.title); /// }, @@ -504,7 +505,7 @@ class FirestoreListView extends FirestoreQueryBuilder { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - itemBuilder(context, doc), + itemBuilder(context, doc, index), if (isLastItem && snapshot.hasMore) fetchingIndicatorBuilder?.call(context) ?? const Padding( @@ -521,7 +522,7 @@ class FirestoreListView extends FirestoreQueryBuilder { ], ), ) - : itemBuilder(context, doc); + : itemBuilder(context, doc, index); }, scrollDirection: scrollDirection, reverse: reverse, @@ -615,7 +616,7 @@ class FirestoreListView extends FirestoreQueryBuilder { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - itemBuilder(context, doc), + itemBuilder(context, doc, index), if (isLastItem && snapshot.hasMore) fetchingIndicatorBuilder?.call(context) ?? const Padding( @@ -632,7 +633,7 @@ class FirestoreListView extends FirestoreQueryBuilder { ], ), ) - : itemBuilder(context, doc); + : itemBuilder(context, doc, index); }, separatorBuilder: separatorBuilder, scrollDirection: scrollDirection, diff --git a/tests/integration_test/firebase_ui_firestore/firestore_list_view_test.dart b/tests/integration_test/firebase_ui_firestore/firestore_list_view_test.dart index 392748f1..900835f0 100644 --- a/tests/integration_test/firebase_ui_firestore/firestore_list_view_test.dart +++ b/tests/integration_test/firebase_ui_firestore/firestore_list_view_test.dart @@ -61,7 +61,8 @@ void main() { body: FirestoreListView( query: collection.orderBy('value'), loadingBuilder: (context) => const Text('loading...'), - itemBuilder: (context, snapshot) => throw UnimplementedError(), + itemBuilder: (context, snapshot, index) => + throw UnimplementedError(), ), ), ), @@ -84,7 +85,8 @@ void main() { home: Scaffold( body: FirestoreListView( query: collection.orderBy('value'), - itemBuilder: (context, snapshot) => throw UnimplementedError(), + itemBuilder: (context, snapshot, index) => + throw UnimplementedError(), ), ), ), @@ -105,7 +107,8 @@ void main() { body: FirestoreListView( query: collection, cacheExtent: 0, - itemBuilder: (context, snapshot) => throw UnimplementedError(), + itemBuilder: (context, snapshot, index) => + throw UnimplementedError(), ), ), ), @@ -144,7 +147,7 @@ void main() { cacheExtent: 0, pageSize: 5, itemExtent: size, - itemBuilder: (context, snapshot) { + itemBuilder: (context, snapshot, index) { final v = snapshot.data()['value'] as int; return Container( @@ -208,6 +211,7 @@ class ListViewBuilderSpy extends Mock { Widget call( BuildContext? context, T? snapshot, + int? index, ) { return super.noSuchMethod( Invocation.method(#call, [context, snapshot]),