【发布时间】:2021-09-20 03:18:44
【问题描述】:
当我输入此代码时:
buildSearchRes() {
return FutureBuilder(
future: searchResultsFuture,
builder: (context, snapshot) {
if (!snapshot.hasData) {
return cargandoCircular();
}
List<UserRes> searchRes = [];
snapshot.data!.docs.forEach((doc) {
User user = User.fromDocument(doc);
UserRes searchRes = UserRes(user);
searchRes.add(searchRes);
});
return ListView(
children: searchRes,
);
},
);
}
我得到错误:
The getter 'docs' isn't defined for the type 'Object'.
Try importing the library that defines 'docs', correcting the name to the name of an existing getter, or defining a getter or field named 'docs'.
我已经在导入 cloud_firestore 包。
我曾经得到一个“'docs' can't be unconditionally access because the reciever can be null”错误,但添加一个空检查解决了它。
这是其余代码以及其他相关部分
class _BuscarPerfilState extends State<BuscarPerfil> {
TextEditingController searchController = TextEditingController();
late Future<QuerySnapshot>? searchResultsFuture;
handleSearch(String query) {
Future<QuerySnapshot> users = usersRef
.where("displayName", isGreaterThanOrEqualTo: query)
.get(); //getDocuments();
setState(() {
searchResultsFuture = users;
});}
AppBar buildSearchField() {
return AppBar(
backgroundColor: Colors.white,
title: TextFormField(
controller: searchController,
decoration: InputDecoration(
hintText: "Buscar un usuario...",
filled: true,
prefixIcon: Icon(
Icons.account_box,
size: 28.0,
),
suffixIcon: IconButton(
icon: Icon(Icons.clear),
onPressed: clearSearch,
),
),
onFieldSubmitted: handleSearch,
),
);}
buildSearchResults() {
return FutureBuilder(
future: searchResultsFuture,
builder: (context, snapshot) {
if (!snapshot.hasData) {
return cargandoCircular();
}
List<UserResult> searchResults = [];
snapshot.data!.docs.forEach((doc) {
User user = User.fromDocument(doc);
UserResult searchResult = UserResult(user);
searchResults.add(searchResult);
});
return ListView(
children: searchResults,
);
},
);}
@override
Widget build(context) {
return Scaffold(
backgroundColor: Theme.of(context).primaryColor.withOpacity(0.2),
appBar: buildSearchField(),
body:
searchResultsFuture == null ? buildNoContent() : buildSearchResults(),
);}}
为了对用户数据进行建模,我在另一个 .dart 文档中创建并导入了它:
class User {
final String id;
final String username;
final String email;
final String photoUrl;
final String displayName;
final String bio;
User(
{required this.id,
required this.username,
required this.email,
required this.photoUrl,
required this.displayName,
required this.bio});
factory User.fromDocument(DocumentSnapshot doc) {
return User(
id: doc['id'],
email: doc['email'],
username: doc['username'],
photoUrl: doc['photoUrl'],
displayName: doc['displayName'],
bio: doc['bio'],
);}}
【问题讨论】:
-
请完整提供与 Firestore 查询相关的
searchResultsFuture声明
标签: flutter dart google-cloud-firestore