我创建了一个 Firebase 文档,并在 Firebase 函数中检索文档 ID 作为 DocumentReference。
但是,我需要将文档 ID 从调用树传递回原始调用函数。我不知道该怎么做。
我在 ConsumerStatefulWidget 类中进行原始调用。它位于按钮的 OnPress 事件中。电话如下:
onPressed: () async {
setState(() {
showSpinner = true;
});
try {
ref.read(globalsNotifierProvider.notifier).updatenewCompany(true);
// Get docRef here after saving the company
ref.read(companyNotifierProvider.notifier).saveCompany(ref);
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) => const UserProfileScreen(),
),
);
setState(() {
showSpinner = false;
});
} catch (e) {
// TODO: Add better error handling
// debugPrint(e.toString());
}
},
这是
saveCompany
类中的函数 companyNotifierProvider
:
saveCompany(WidgetRef ref, [companyId]) async {
var newCompany = Company(
companyName: ref.read(companyNotifierProvider).companyName,
address1: ref.read(companyNotifierProvider).address1,
address2: ref.read(companyNotifierProvider).address2,
city: ref.read(companyNotifierProvider).city,
companyState: ref.read(globalsNotifierProvider).currentCompanyState,
zipCode: ref.read(companyNotifierProvider).zipCode,
cellPhone: ref.read(companyNotifierProvider).cellPhone,
officePhone: ref.read(companyNotifierProvider).officePhone,
email: ref.read(companyNotifierProvider).email,
website: ref.read(companyNotifierProvider).website,
);
// If the company is new, retrieve the document ID and save it
if (ref.read(globalsNotifierProvider).newCompany == true) {
ref.read(globalsNotifierProvider.notifier).updatenewCompany(false);
try {
DocumentReference? newDocRef = await firestoreService.saveNewCompany(toMap(newCompany));
return newDocRef;
} catch (e) {
debugPrint(e.toString());
return null;
}
} else {
firestoreService.saveCompany(toMap(newCompany), companyId!);
}
}
这是我创建文档的
firestoreService.saveCompany
:
Future<DocumentReference?> saveNewCompany(company) async {
try {
DocumentReference docRef = await _db.collection('company').add(company);
return docRef;
} catch (e) {
return null;
}
}
好的,所以我用新创建的文档中的 DocumentReference 填充 docRef 变量。
我将 docRef 返回到 saveCompany,然后从那里将其返回到原始 OnPress 事件,但我如何获取它?我会做这样的事情吗?
DocumentReference newDocRef = ref.read(companyNotifierProvider.notifier)
.saveCompany(ref);
这对我不起作用。我如何将其传递回
onPress
事件?
无法将您自己的自定义参数传递给
onPress
事件。您通常可以通过将值保留在类的字段中来完成相同的用例,然后所有必要的代码路径都可以访问它。