Actually I work on search screen page where first futurebuilder is responsible for showing all usernames and profilepic when searching by username and second futurebuilder is responsible for showing all posts when end user just normally open the search screen page just like instagram apk.
But problem is when I’m going to search for username, first futurebuilder doesn’t work properly as it’s snapshot become the same as the second’s snapshot.
I don’t know why? that’s why I’m getting “photoUrl” does not exist within the DocumentSnapshotPlatform error as second’s snapshot does not contain “photoUrl” field. Please suggest some solution.
I tried this code..
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:instagram_flutter/utils/colors.dart';
class SearchScreen extends StatefulWidget {
const SearchScreen({super.key});
@override
State<SearchScreen> createState() => _SearchScreenState();
}
class _SearchScreenState extends State<SearchScreen> {
final TextEditingController searchController=TextEditingController();
bool isShowUsers= false;
@override
void dispose() {
super.dispose();
searchController.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: mobileBackgroundColor,
title:TextFormField(
controller: searchController,
decoration: const InputDecoration(
labelText: 'Search for a user',
),
onFieldSubmitted: (String _){
setState(() {
isShowUsers=true;
});
},
),
),
body: isShowUsers?
FutureBuilder(
future: FirebaseFirestore.instance.collection('users')
.where('username',isGreaterThanOrEqualTo: searchController.text)
.get(),
builder: (context,snap){
if(!snap.hasData){
return const Center(
child: CircularProgressIndicator()
);
}
return ListView.builder(
itemCount: snap.data!.docs.length,
itemBuilder: (context,index){
return ListTile(
leading: CircleAvatar(
backgroundImage: NetworkImage(
(snap.data! as dynamic).docs[index]['photoUrl'],
),
),
title: Text(snap.data!.docs[index]['username']),
);
}
);
}
)
:
FutureBuilder(
future: FirebaseFirestore.instance.collection('posts').get(),
builder: (context,snapshot){
if(!snapshot.hasData){
return const Center(
child: CircularProgressIndicator(),
);
}
return MasonryGridView.count(
crossAxisCount: 3,
itemCount: snapshot.data!.docs.length,
itemBuilder: (context,index) => Image.network(
snapshot.data!.docs[index]['postUrl']
)
);
}
)
);
}
}
Nikhil Gupta is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.