我有一个 flutter 应用程序,其中新用户被带到用户个人资料屏幕。他们可以在这里输入更多信息并保存数据。
在 save 方法之前,我将所有数据放入 Riverpod NotifierProvider 中,并将这些数据传递给 save 方法。这个效果很好。
保存新用户信息后,他们将进入公司资料屏幕,可以在其中输入有关其公司的所有数据。
保存公司后,我检索公司文档 ID,并希望将其保存到用户记录中,以便将它们链接起来。
但是,在保存新用户和保存公司之间的某个时间,我丢失了用户 NotifierProvider 中的所有数据。在尝试将公司 ID 保存到用户记录中之前,我没有收到任何错误。
两个屏幕都扩展了 ConsumerState,如果有帮助的话。
我已经能够将范围缩小到以下代码:
我将用户数据传递给保存方法
ref.read(usersNotifierProvider.notifier).
saveUser(ref.read(globalsNotifierProvider), ref.read(usersNotifierProvider),);
方法是这样的:
saveUser(globals, user) async {
if (ref.watch(globalsNotifierProvider).newUser == true) {
// final DocumentSnapshot currentCompanyProfile =
final newUser = Users(
userId: user.userId,
fName: user.fName,
lName: user.lName,
mls: user.mls,
mlsId: user.mlsId,
address1: user.address1,
address2: user.address2,
city: user.city,
userState: user.userState,
zipCode: user.zipCode,
cellPhone: user.cellPhone,
officePhone: user.officePhone,
companyId: globals.companyId,
companyName: user.companyName,
email: user.email,
businessType: user.businessType,
deviceToken: user.deviceToken,
);
firestoreService.saveNewUser(toMap(newUser));
ref.read(globalsNotifierProvider.notifier).updatenewUser(false);
} else {
final DocumentSnapshot currentuserProfile =
await userDB.doc(user.UserId).get();
var newUser = Users(
userId: ref.read(globalsNotifierProvider).currentUid,
fName: (state.fName != null && state.fName != "")
? state.fName
: currentuserProfile.get('fName'),
lName: (state.lName != null && state.lName != "")
? state.lName
: currentuserProfile.get('lName'),
address1: (state.address1 != null && state.address1 != "")
? state.address1
: currentuserProfile.get('address1'),
address2: (state.address2 != null && state.address2 != "")
? state.address2
: currentuserProfile.get('address2'),
city: (state.city != null && state.city != "")
? state.city
: currentuserProfile.get('city'),
userState: (userState != null && userState != "")
? userState
: currentuserProfile.get('state'),
/*state: (globals.selectedState != null)
? globals.selectedState
: globals.currentuserState,*/
zipCode: (state.zipCode != null && state.zipCode != "")
? state.zipCode
: currentuserProfile.get('zipCode'),
cellPhone: (state.cellPhone != null && state.cellPhone != "")
? state.cellPhone
: currentuserProfile.get('cellPhone'),
officePhone: (state.officePhone != null && state.officePhone != "")
? state.officePhone
: currentuserProfile.get('officePhone'),
companyId: companyId,
companyName: (state.companyName != null && state.companyName != "")
? state.companyName
: currentuserProfile.get('Company'),
mlsId: ref.read(globalsNotifierProvider).mlsId,
mls: (state.mls != null && state.mls != "")
? state.mls
: currentuserProfile.get('mls'),
deviceToken: (state.deviceToken != null && state.deviceToken != "")
? state.deviceToken
: currentuserProfile.get('deviceToken'));
businessType:
ref.read(globalsNotifierProvider).userBusinessType;
firestoreService.saveUser(
newUser, ref.read(globalsNotifierProvider).currentUserId!);
}
这是我实际保存的地方:
Future<void> saveNewUser(users) {
return _db.collection('users').add(users);
}
当我保存数据回来时,提供程序是空的。
谢谢
我删除了这一行并且它起作用了:
firestoreService.saveNewUser(toMap(newUser));
ref.read(globalsNotifierProvider.notifier).updatenewUser(false); <<<< REMOVED