如何解决 The method '<' was called on null.接收者:null 尝试调用:<(0.0)?
How to resolve The method '<' was called on null. Receiver: null Tried calling: <(0.0)?
我试图通过使用 FutureBuilder 从 firestore 检索所需的字段值来计算百分比,但这样做时我遇到了这个错误。有人可以让我知道这个错误的原因以及我在代码中哪里做错了吗?请帮我解决这个问题。
这是代码:
displayPercentage() :
dynamic percentage = 0.0;
displayPercentage() async {
var totalClassesTook;
var totalClassesAttended;
try {
totalClassesTook =
await tutor_details.doc(uid).snapshots().map((event) async {
var val = await event.data()['TotalClassesTook'];
return val;
});
totalClassesTook = await totalClassesTook == null ? 0 : totalClassesTook;
totalClassesAttended =
await tutor_details.doc(uid).snapshots().map((event) async {
var val = await event.data()['TotalClassesAttended'];
return val;
});
totalClassesAttended =
await totalClassesAttended == null ? 0 : totalClassesAttended;
return percentage =
await ((totalClassesAttended / totalClassesTook) * 100) / 100;
} catch (e) {
return percentage = 0.0;
}
}
从这里调用正文中的上述函数:
body: Center(
child: Padding(
padding: EdgeInsets.symmetric(vertical: 150.0),
child: FutureBuilder(
future: displayPercentage(),
builder: (context, snapshot) {
return new CircularPercentIndicator(
radius: 120.0,
lineWidth: 13.0,
animation: true,
percent: snapshot.data,
center: new Text(
"${snapshot.data}",
style: new TextStyle(
fontWeight: FontWeight.bold, fontSize: 20.0),
),
footer: Padding(
padding: EdgeInsets.symmetric(
horizontal: 10.0, vertical: 10.0),
child: new Text(
"Attendance Percentage",
style: new TextStyle(
fontWeight: FontWeight.bold, fontSize: 17.0),
),
),
circularStrokeCap: CircularStrokeCap.round,
progressColor: Colors.purple,
);
}),
),
),
输出
======== widgets库捕获异常===========================
构建 FutureBuilder 时抛出以下 NoSuchMethodError(脏,状态:_FutureBuilderState#bfce6):
在 null 上调用了方法“<”。
接收者:空
尝试调用:<(0.0)
在 builder
中放置一个 if
条件来检查 snapshot.hasData
。
builder: (context, snapshot) {
if (snapshot.hasData) {
// return CircularPercentIndicator here.
},
return Text('No Data');
},
我试图通过使用 FutureBuilder 从 firestore 检索所需的字段值来计算百分比,但这样做时我遇到了这个错误。有人可以让我知道这个错误的原因以及我在代码中哪里做错了吗?请帮我解决这个问题。
这是代码:
displayPercentage() :
dynamic percentage = 0.0;
displayPercentage() async {
var totalClassesTook;
var totalClassesAttended;
try {
totalClassesTook =
await tutor_details.doc(uid).snapshots().map((event) async {
var val = await event.data()['TotalClassesTook'];
return val;
});
totalClassesTook = await totalClassesTook == null ? 0 : totalClassesTook;
totalClassesAttended =
await tutor_details.doc(uid).snapshots().map((event) async {
var val = await event.data()['TotalClassesAttended'];
return val;
});
totalClassesAttended =
await totalClassesAttended == null ? 0 : totalClassesAttended;
return percentage =
await ((totalClassesAttended / totalClassesTook) * 100) / 100;
} catch (e) {
return percentage = 0.0;
}
}
从这里调用正文中的上述函数:
body: Center(
child: Padding(
padding: EdgeInsets.symmetric(vertical: 150.0),
child: FutureBuilder(
future: displayPercentage(),
builder: (context, snapshot) {
return new CircularPercentIndicator(
radius: 120.0,
lineWidth: 13.0,
animation: true,
percent: snapshot.data,
center: new Text(
"${snapshot.data}",
style: new TextStyle(
fontWeight: FontWeight.bold, fontSize: 20.0),
),
footer: Padding(
padding: EdgeInsets.symmetric(
horizontal: 10.0, vertical: 10.0),
child: new Text(
"Attendance Percentage",
style: new TextStyle(
fontWeight: FontWeight.bold, fontSize: 17.0),
),
),
circularStrokeCap: CircularStrokeCap.round,
progressColor: Colors.purple,
);
}),
),
),
输出
======== widgets库捕获异常===========================
构建 FutureBuilder 时抛出以下 NoSuchMethodError(脏,状态:_FutureBuilderState#bfce6): 在 null 上调用了方法“<”。 接收者:空 尝试调用:<(0.0)
在 builder
中放置一个 if
条件来检查 snapshot.hasData
。
builder: (context, snapshot) {
if (snapshot.hasData) {
// return CircularPercentIndicator here.
},
return Text('No Data');
},