Flutter Getx Stream值在InIt之后更改为Instance



我正在使用Getx将流绑定到userDataModel。初始化时,值从firestore数据库中打印出来,但后来值为空。

当您尝试使用print(_userDataController.userDataModel.value.foodData);打印值时,会提示为null。

附言:在之前的一个项目中,我使用了相同的代码。在那里,它仍然有效。

代码如下

用户型号:

Map? foodData;
UserDataModel({this.foodData});
factory UserDataModel.fromMap({dynamic dbData}) {
return UserDataModel(
foodData: dbData['foodData'],
);
}
}

控制器

class UserDataController extends GetxController {
// ================================= >  Stream READ
/// Stream User Model
Rx<UserDataModel> userDataModel = UserDataModel().obs;
/// Stream
Stream<UserDataModel> dbStream() {
return FirebaseFirestore.instance
.collection('Users')
.doc('user1')
.snapshots()
.map(
(ds) {
var _mapData = ds.data();
print(_mapData); // ONINIT THIS DATA IS PRINTING BUT LATER IT PROMPTS THE ABOVE ERROR
UserDataModel extractedModel = UserDataModel.fromMap(dbData: _mapData);
return extractedModel;
},
);
}
/// FN to bind stream to user model
void bindStream() {
userDataModel.bindStream(dbStream());
}
// ================================= >  OnInIt
@override
void onInit() {
bindStream();
super.onInit();
}
}

要了解Instance of '_MapStream<DocumentSnapshot<Map<String, dynamic>>, UserDataModel>'的内容,请尝试使用foodData.toString()

您收到此提示是因为您没有将响应转换为正确的DataModel类。

您必须映射json to DataModel类。为此,您可以将控制台中打印的响应粘贴到https://jsontodart.com/这将为您准备数据模型类。然后你可以通过iterating访问元素,并获得相应的instance variable

参考:

  • 如何将Firebase实时数据库中的数据放入Flutter中的列表
  • Flutter列表返回的实例
  • 如何打印实例

最新更新