Actually, I work on a search screen page where the first futurebuilder is responsible for showing all usernames and profilepic when searching by username, and the second futurebuilder is responsible for showing all posts when the end user just normally opens the search screen page, just like Instagram APK.
But the problem is that when I’m going to search for usernames, the first futurebuilder doesn’t work properly as its snapshot becomes 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 solutions.
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.
1