我试图通过使用 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,
);
}),
),
),
输出
======== 小部件库捕获的异常 ============================
在构建 FutureBuilder(dirty, state: _FutureBuilderState#bfce6) 时抛出了以下 NoSuchMethodError: 方法 '<' 在 null 上被调用。 接收器:空 尝试调用:<(0.0)
答案 0 :(得分:0)
在 builder
中放置一个 if
条件来检查 snapshot.hasData
。
builder: (context, snapshot) {
if (snapshot.hasData) {
// return CircularPercentIndicator here.
},
return Text('No Data');
},