首页 > 解决方案 > 颤振:返回值为 NULL

问题描述

我正在开发一个练习应用程序。我正在使用带有 StreamBuilder 的 FIREBASE 来检索我的应用程序中收藏的“练习 ID”。这工作正常,我得到了正确的 ID。然后我将它传递给一个简单的方法来检索实际的“练习”,以便我可以显示它。此方法通过一个练习列表,检查是否找到练习 ID,然后我希望它返回练习。但是,我总是返回 null。我不明白为什么会这样。

我真的很感激一些帮助,因为现在非常坚持。

下面是我的代码:

这是方法:

Exercise getExerciseByID(String exerciseId) {
  _exercises.forEach((exercise) {
    print('COMPARE1: ${exercise.id} AND $exerciseId');
    if (exercise.id == exerciseId) {
      print('COMPARE2: ${exercise.id} AND ${exerciseId}');
      return exercise;
    }
  });
}

请注意,这两个打印语句都打印并显示匹配的 id

这是使用 StreamBuilder 等构建的。

    return Scaffold(
  body: StreamBuilder(
    stream: FirebaseFirestore.instance
        .collection('favorites')
        .doc('${_firebaseAuth.currentUser.uid}')
        .collection('userFavorites')
        .snapshots(),
    builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
      if (!snapshot.hasData)
        return Center(
          child: CircularProgressIndicator(),
        );
      return ListView.builder(
        itemCount: snapshot.data.docs.length,
        itemBuilder: (context, index) {
          //TODO: GET EXERCISE FOR DOC
          String _exerciseId = snapshot.data.docs[index].id;
          _exercise = getExerciseByID(_exerciseId);
          //TODO: DISPLAY CARD
          print("Retrieved Exercise: $_exercise");
          return Center(child: Text(""));
        },
      );
    },
    //   padding: EdgeInsets.only(left: sideMargin),
    // },
  ),
);

注意:打印语句:print("Retrieved Exercise: $_exercise"); 是我总是找到NULL的地方。

非常感谢您的帮助。

标签: flutterflutter-dependencies

解决方案


改变这个

Exercise getExerciseByID(String exerciseId) {
  _exercises.forEach((exercise) {
    print('COMPARE1: ${exercise.id} AND $exerciseId');
    if (exercise.id == exerciseId) {
      print('COMPARE2: ${exercise.id} AND ${exerciseId}');
      return exercise;
    }
  });
}

对此

Exercise getExerciseByID(String exerciseId) {
Exercise returningExercise;
  _exercises.forEach((exercise) {
    print('COMPARE1: ${exercise.id} AND $exerciseId');
    if (exercise.id == exerciseId) {
      print('COMPARE2: ${exercise.id} AND ${exerciseId}');
      returningExercise = exercise;
    }
  });
return returningExercise;
}

您正在 ForEach 语句中返回。这不会返回您的功能。将 return 语句放在 ForEach 语句之外。
注意:此解决方案不是最好的。但你现在知道出了什么问题。


推荐阅读