flutter - 转换为 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());
由于其中一些错误与空安全性有关,因此我添加了“?” 和 ”!” 但没有变化。我是新手,正在学习,所以我能得到的任何帮助都将不胜感激。
解决方案
- 例如,您声明
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 相同
推荐阅读
- c++ - 析构函数执行后缓冲区的值是否可以更改
- java - 使用 Repository Save 或 SaveAll 方法对 Hibernate JPA 模型进行部分插入更新,而模型中没有 @Transient 或 @DynamicUpdate 注释
- kubernetes - 两个不同 Kubernetes 集群中的 Redis 集群数据迁移
- multithreading - TCL 多线程函数调用未使用线程池执行
- indexing - 无法在 neo4j 4.2.X 中创建全文索引
- python - 无法进行迁移
- c++ - 如何区分这两个插入函数
- embedded-linux - 在设备树中命名 GPIO 数组并从 sysfs 中回显值
- webpack - Shopware 6:bin/watch-storefront.sh 导致 chrome 出现 CORS 错误
- xamarin - 如何阅读 Xamarin 页面中的所有标签以将它们保存到 SQlite 中?