【问题标题】:Flutter How to observ UserModel with GetX after 2.8.1Flutter 2.8.1之后如何用GetX观察用户模型
【发布时间】:2022-01-17 15:53:27
【问题描述】:

我正在使用 getX 从 Firebase 获取数据。

我在 2.8 更新之前使用过这个。它工作正常。

class UserController extends GetxController {
  final Rx<UserModel> _userModel = UserModel(
    email: '',
    name: '',
    uid: '',
    kullaniciAdi: '',
    bildirim: 0,
    userRole: 0,
  ).obs;

  UserModel get user => _userModel.value;

  set user(UserModel value) => _userModel.value = value;

  void clear() {
    _userModel.value = UserModel(
      email: '',
      name: '',
      uid: '',
      kullaniciAdi: '',
      bildirim: 0,
      userRole: 0,
    );
  }
}

我可以通过 GetX 或 Obx 小部件观察到这一点。但现在,我不能再这样做了。

这是我获取用户代码的 Firebase 数据库代码:

Future getUserFromDB(String uid) async {
    try {
      var userData = await _firestore.collection("customers").doc(uid).get();
      var map = userData.data();
      //debugPrint(map!['email']);
      return UserModel.fromData(userData.data());
    } on FirebaseException catch (e) {
      return e.message;
    }
  }

这是我的用户模型:

class UserModel {
  String? uid;
  String? name;
  String? email;
  int? bildirim;
  int? userRole;
  String? kullaniciAdi;
  String? pphoto;

  UserModel({
    this.uid,
    this.name,
    this.email,
    this.bildirim,
    this.userRole,
    this.kullaniciAdi,
    this.pphoto,
  });

  UserModel.fromData(Map<String, dynamic>? dataMap)
      : uid = dataMap!['id'],
        name = dataMap['name'],
        email = dataMap['email'],
        bildirim = dataMap['bildirim'],
        kullaniciAdi = dataMap['kullaniciAdi'];



  Map<String, dynamic> toData() {
    return {
      'uid': uid,
      'name': name,
      'email': email,
      'userRole': userRole,
      'bildirim': bildirim,
      'kullaniciAdi': kullaniciAdi,
      'pphoto': pphoto,
    };
  }
}

我想在获取数据后收听这个 userModel。但每当我使用 Obx 或 GetX 小部件时,它们都会返回错误。 这是 GetX 小部件和错误;

GetX<UserController>(
          initState: (_) async {
            Get.find<UserController>().user = await FirebaseDatabase()
                .getUserData(homeController.userVeri!.uid);
          },
          builder: (_) {
            if (_.user.uid != null) {
              return Text(
                _.user.name.toString(),
                style: const TextStyle(
                    color: Colors.white,
                    fontSize: 30,
                    fontWeight: FontWeight.w500),
              );
            } else {
              return const Text("...");
            }
          },
        ),

错误是:

Null check operator used on nulls value

【问题讨论】:

  • 返回哪个错误?
  • 我已将其添加到帖子中。

标签: firebase flutter flutter-getx


【解决方案1】:

在我看来,该错误的唯一可能原因是您得到了userVeri!.uid,带有一个空检查(!)。在 GetX 小部件的 initState 构建器中。我建议在请求他们的数据之前先检查userVeri.uid 是否不为空。我的意思更像是这样。

GetX<UserController>(
          initState: (_) async {

           if(homeController.userVeri != null){

            Get.find<UserController>().user = await FirebaseDatabase()
                .getUserData(homeController.userVeri!.uid); 
           }
          },
          builder: (_) {
            if (_.user.uid != null && homeController.userVeri != null) {
              return Text(
                _.user.name.toString(),
                style: const TextStyle(
                    color: Colors.white,
                    fontSize: 30,
                    fontWeight: FontWeight.w500),
              );
            } else {
              return const Text("...");
            }
          },
        ),

【讨论】:

  • 不,伙计,它不起作用。
猜你喜欢
  • 1970-01-01
  • 2023-02-15
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 2021-04-07
  • 2021-10-26
  • 2021-03-15
  • 2010-12-25
相关资源
最近更新 更多