【问题标题】:Converting to GetX raises issues转换为 GetX 会引发问题
【发布时间】:2021-10-18 17:23:02
【问题描述】:

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

第一个错误:

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

错误信息:

方法'[]'不能被无条件调用,因为receiver可以是'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());

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

【问题讨论】:

    标签: flutter dart-null-safety flutter-getx


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

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

    var agentsModel = AgentsModel().obs;
    

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

    agentsModel.value.fromSnapshot(doc))
    

    奖励错误

    与错误 2 和 3 相同

    【讨论】:

    • 感谢您的回复。对于错误 1,我尝试了 cellPhone = snapshot.data()!['cellPhone'] ??空添加“!”但它接着说 cellPhone 没有定义。我会在哪里添加“!”在?错误 2 现已修复。对于额外的错误,我改为声明为 var (var firebaseUser = User().obs;) 但现在我得到了 The class 'User' doesn't have a default constructor。我试过 User.instance.obs 但它不起作用。
    • 我将最终的 FirebaseAuth auth = FirebaseAuth.instance 更改为 var auth = FirebaseAuth.instance;现在这给了我一个错误 firebaseUser = Rxnauth.currentUser;说“没有为类型'Type'定义运算符'
    • 在大多数情况下,IDE 会帮助您放置正确的! 运算符。
    猜你喜欢
    • 2018-06-07
    • 1970-01-01
    • 2021-12-22
    • 2015-10-29
    • 2014-07-03
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2018-11-23
    相关资源
    最近更新 更多