首页 > 解决方案 > 转换为 GetX 会引发问题

问题描述

我正在将我的颤振应用程序转换为使用 GetX 而不是提供程序,并且在转换过程中我遇到了一些我不知道如何纠正的错误。

第一个错误:

在我的数据模型 AgentsModel 中,AgentsModel.fromSnapshot() 方法出现错误。该错误是一个空安全错误。我试过放一个“?” 在传入的参数的声明中,但它没有帮助。

错误信息:

无法无条件调用方法“[]”,因为接收者可以为“null”

Agents.dart数据模型文件

class AgentsModel {
  final String? agentId;
  final String? fName;
  final String? lName;
  final String? agency;
  final String? agencyId;
  final String? address1;
  final String? address2;
  final String? city;
  final String? state;
  final int? zipcode;
  final String? cellPhone;
  final String? officePhone;
  final String? email;
  final String? mls;
  final String? mlsId;

  AgentsModel(
      {this.cellPhone,
      this.address1,
      this.address2,
      this.fName,
      this.lName,
      this.email});

  Map<String, dynamic> toMap() {
    return {
      'cellPhone': cellPhone,
      'address1': address1,
      'address2': address2,
      'fName': fName,
      'lName': lName,
      'email': email
    };
  }

  AgentsModel.fromSnapshot(DocumentSnapshot snapshot)
      : cellPhone = snapshot.data()['cellPhone'] ?? null,
        address1 = snapshot.data()['address1'] ?? null,
        address2 = snapshot.data()['address2'] ?? null,
        fName = snapshot.data()['fName'] ?? null,
        lName = snapshot.data()['lName'] ?? null,
        email = snapshot.data()['email'] ?? null;
}

错误 2(与错误 1 ​​相关):

在我的 auth_controller.dart 文件中,我在声明我的 agentsModel 变量时遇到错误。这是错误:

A value of type 'Rx<AgentsModel>' can't be assigned to a variable of type 'Rxn<AgentsModel>'

这是引发错误的代码行:

  Rxn<AgentsModel> agentsModel = AgentsModel().obs;

错误 3(与前 2 个错误有关)

当我尝试从 auth_controller.dart 文件中调用 fromSnapshot() 时,我收到调用错误,agentModel.fromSnapshot(doc));,说明

没有为类型“Rxn”定义方法“fromSnapshot”。

_initializeUserModel(String userId) async {
    agentsModel.value =
      await _db.collection(agentsCollection)
        .doc(userId)
        .get()
        .then((doc) => agentsModel.fromSnapshot(doc));
  }

这是上面的定义:

  AgentsModel.fromSnapshot(DocumentSnapshot snapshot)
      : cellPhone = snapshot.data()['cellPhone'] ?? null,
        address1 = snapshot.data()['address1'] ?? null,
        address2 = snapshot.data()['address2'] ?? null,
        fName = snapshot.data()['fName'] ?? null,
        lName = snapshot.data()['lName'] ?? null,
        email = snapshot.data()['email'] ?? null;
}

奖励错误(与上述错误无关) 我在声明 firebaseUser 变量时遇到错误。

import 'package:firebase_auth/firebase_auth.dart';

下面一行的错误是“用户”类没有默认构造函数。

  User firebaseUser = User().obs;

以下行的错误是“Rx”类型的值无法分配给“用户”类型的变量。

  firebaseUser = Rx<User>(auth.currentUser);

下面一行的错误是他没有为“用户”类型定义方法“bindStream”。

  firebaseUser.bindStream(auth.userChanges());

由于其中一些错误与空安全性有关,因此我添加了“?” 和 ”!” 但没有变化。我是新手,正在学习,所以我能得到的任何帮助都将不胜感激。

标签: flutterdart-null-safetyflutter-getx

解决方案


  • 例如,您声明var x = bool.obs. 要访问 x 的值,您x.value不需要x.
  • obs不是装饰。它是实例化Rx对象的快捷方式。这意味着bool.obs != bool
  • 使用!运算符,当您确定它不是时强制为 null。(错误 1)

错误 2 - 类型不匹配,在这种情况下使用 var。

var agentsModel = AgentsModel().obs;

错误 3 - 您需要调用value属性。

agentsModel.value.fromSnapshot(doc))

奖金错误

与错误 2 和 3 相同


推荐阅读