如何解决方法 '<' 在 null 上被调用。接收方:null 尝试调用:<(0.0)?

时间:2021-05-26 10:23:12

标签: flutter dart google-cloud-firestore stream-builder flutter-futurebuilder

我试图通过使用 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)

1 个答案:

答案 0 :(得分:0)

builder 中放置一个 if 条件来检查 snapshot.hasData

builder: (context, snapshot) {
  if (snapshot.hasData) {
    // return CircularPercentIndicator here.
  },
  return Text('No Data');
},