【问题标题】:How to resolve The method '<' was called on null. Receiver: null Tried calling: <(0.0)?如何解决方法 '<' 在 null 上被调用。接收者:null 尝试调用:<(0.0)?
【发布时间】:2021-08-14 14:03:40
【问题描述】:

我试图通过使用 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 上调用了方法“

【问题讨论】:

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


    【解决方案1】:

    builder 中输入if 条件以检查snapshot.hasData

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-05
      • 2021-07-31
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 2021-12-28
      相关资源
      最近更新 更多