我正在尝试使用 Firebase Cloud Firestore 作为我的数据库在 Flutter 中构建一些东西。我有一个集合(“学生”),其中包含每个学生的文档。
在每个学生文档中都有一个数组,其中包含学生的分数图。见下文。
在 Flutter 中,我有以下课程:
class Student {
final String name;
final String subject;
final List<Mark> marks;
Student({this.name, this.subject, this.marks});
}
class Mark {
final int mark;
final String grade;
final String markedBy;
final String feedback;
Mark({this.mark, this.grade, this.markedBy, this.feedback});
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 Provider 流检索数据,如下所示:
Stream<List<Student>> get firebaseStudents {
return Firestore.instance.collection('students').snapshots().map(_firebaseStudentsFromSnapshot);
}
List<Student> _firebaseStudentsFromSnapshot(QuerySnapshot snapshot) {
return snapshot.documents.map((doc) {
return Student(
name: doc.data['name'] ?? '',
subject: doc.data['subject'] ?? '',
//trying to figure out how to …Run Code Online (Sandbox Code Playgroud) 我尝试将 GetX Builder 与控制器中的 bool 结合使用,在获取数据时显示加载旋转器,然后再显示数据。
将更新打印到 bool 显示它已完成加载并更改变量,但 UI 永远不会更新以反映这一点。
控制器
class AuthController extends GetxController {
//final RxBool isLoading = true.obs;
//var isLoading = true.obs;
final Rx<bool> isLoading = Rx<bool>(true);
setLoading(bool status) {
isLoading.value = status;
print(isLoading.value);
update();
}
fetchUserData() async {
setLoading(true);
_firebaseUser.bindStream(_auth.authStateChanges());
if (_auth.currentUser != null) {
bool profileRetrieved =
await FirestoreDB().getUserProfile(_auth.currentUser!.uid).then((_) {
return true;
});
setLoading(!profileRetrieved);
}
}
}
Run Code Online (Sandbox Code Playgroud)
个人资料页
class ProfileCard extends StatelessWidget {
const ProfileCard({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) { …Run Code Online (Sandbox Code Playgroud)