错误:未为类型"对象"定义运算符"[]"。(undefined_operator at [lets_chat] lib/view/search.dart:34)



这是我的search.dart文件在这个中出错

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:flutter/painting.dart';
import 'package:flutter/rendering.dart';
import 'package:lets_chat/services/database.dart';
import 'package:lets_chat/widgets/widget.dart';
class SearchScreen extends StatefulWidget {
@override
_SearchScreenState createState() => _SearchScreenState();
}
class _SearchScreenState extends State<SearchScreen> {
DatabaseMethods databaseMethods = new DatabaseMethods();
TextEditingController searchTextEditingController = new TextEditingController();
QuerySnapshot searchSnapshot;
initiateSearch(){
databaseMethods
.getUserByUsername(searchTextEditingController.text)
.then((val){
searchSnapshot = val;
});
}
Widget searchList(){
return ListView.builder(
itemCount:searchSnapshot.docs.length ,
itemBuilder: (context, index){
return SearchTile(
userName:  searchSnapshot.docs[index].data()["name"],
userEmail: searchSnapshot.docs[index].data()["email"],
);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBarMain(context),
body: Container(
child: Column(
children: [
Container(
padding: EdgeInsets.symmetric(horizontal: 24, vertical: 16),
child: Row(
children: [
Expanded(
child: TextField(
controller: searchTextEditingController,
style: TextStyle(
color: Colors.orangeAccent
),
decoration: InputDecoration(
hintText: "search username...",
hintStyle: TextStyle(
color: Colors.orangeAccent
),
border: InputBorder.none
)
)
),
GestureDetector(
onTap: (){
initiateSearch();
},
child: Container(
padding: EdgeInsets.all(4),
child: Image.asset("assets/images/SearchIcon.png", height: 35, width: 40,)),
)
],
),
)
],
),
),
);
}
}
class SearchTile extends StatelessWidget {
final String userName;
final String userEmail;
SearchTile({this.userName, this.userEmail});
@override
Widget build(BuildContext context) {
return Container(
child: Row(
children: [
Column(
children: [
Text(userName, style: simpleTextStyle(),),
Text(userEmail, style: simpleTextStyle(),)
],
),
Spacer(),
Container(
decoration: BoxDecoration(
color: Colors.deepOrange,
borderRadius: BorderRadius.circular(30)
),
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: Text("Message"),
)
],
),
);
}
}

请有人帮忙,我会非常感谢你:(

错误:没有为类型"Object"定义运算符"[]"。([lets_chat]lib/view/search.dart:34上的undefined_operator(

如果需要,我也会分享其他文件请告诉我我只是一个乞丐,所以请帮助

我们只是在这里分配结果值,而不是更新状态。

应该是

initiateSearch(){
databaseMethods
.getUserByUsername(searchTextEditingController.text)
.then((val) {
setState(() { searchSnapshot = val; })
});
}

此外,最初searchSnapshot的值可能是null因为这里的searchSnapshot.docs[index],我们可能会遇到错误,说您已经调用了[]

提示:在从数据库获取数据之前,加载状态为false。

bool isLoaded = false;

并且在设置状态时,

setState(() { 
searchSnapshot = val;
isLoaded = true;
})

参考:https://flutter.dev/docs/development/data-and-backend/state-mgmt

行中存在语法错误

userName:  searchSnapshot.docs[index].data["name"],
userEmail: searchSnapshot.docs[index].data["email"]

应该是

userName:  searchSnapshot.docs[index].data["name"],
userEmail: searchSnapshot.docs[index].data["email"]