我已从Firestore数据库检索数据并将其放入列表,但发生错误。此外,异常块上的对话框根本不会触发。
class mDetail extends State<homeDetail>{
bool uniFlag = false;
var resultUni;
@override
void initState() {
super.initState();
try {
UniQuery().getUniBasedLocProg(selectedState,selectedProg).then((QuerySnapshot qsUni) {
uniFlag = true;
for (int i = 0; i < qsUni.documents.length; i++) {
resultUni.add(qsUni.documents[i]['name']);
}
});
}
catch(e){
print(e.message);
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Ops something gone wrong'),
content: Text('Your email or password is wrong'),
);
});
}
}
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(
title: Text('EduGradHomePage'),),
body: Form(
child: Column(
children: <Widget>[
RaisedButton(
onPressed: back,
child: Icon(
Icons.backspace
),
),
Text(resultUni[0])
],
)
)
);
}
}
此代码在其他软件包中具有独特性
class UniQuery {
getUniBasedLocProg(String uniLoc, String uniProg){
return dbReference.collection('University')
.where('State', isEqualTo: uniLoc)
.where('Programme', isEqualTo: uniProg)
.getDocuments();
}
}
它说错误NoSuchMethodError 方法'[]'被调用为null 好像值未添加到列表中
这是我在Firestore中的数据库
答案 0 :(得分:1)
更改为以下代码后。我设法获得价值 idState 和 idProg 是基于我的Firestore中收集文档的ID
class UniQuery {
getUniBasedLocProg(String uniLoc, String uniProg){
return dbReference.collection('University')
.where('State', isEqualTo: dbReference.collection('State')
.document(idState);)
.where('Programme', isEqualTo: dbReference.collection('Programme')
.document(idProg);)
.getDocuments();
}
}
答案 1 :(得分:0)
.getUniBasedLocProg(selectedState,selectedProg)是将来的回调,因此它返回数据 花费一些时间之后。在构建期间还会构建您的代码。 null,这就是为什么您会收到错误消息“方法'[]'在null上被调用”的原因。
因此在使用该变量之前,请先检查是否为空。
resultUni[0] ?? "" // if not null then return value otherwise return "" //
完整代码->
class mDetail extends State<homeDetail>{
bool uniFlag = false;
var resultUni;
@override
void initState() {
super.initState();
try {
UniQuery().getUniBasedLocProg(selectedState,selectedProg).then((QuerySnapshot qsUni)
{
uniFlag = true;
if(qsUni !=null&&qsUni.documents !=null ){
for (int i = 0; i < qsUni.documents.length; i++) {
if(qsUni.documents[i] !=null ){
resultUni.add(qsUni.documents[i]['name']);
}
}
}
});
}
catch(e){
print(e.message);
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Ops something gone wrong'),
content: Text('Your email or password is wrong'),
);
});
}
}
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(
title: Text('EduGradHomePage'),),
body: Form(
child: Column(
children: <Widget>[
RaisedButton(
onPressed: back,
child: Icon(
Icons.backspace
),
),
Text(resultUni[0] ?? ""),
],
)
)
);
}
}