需要将 DocumentReference 从一个函数传递回 flutter 中的另一个函数

问题描述 投票:0回答:1

我创建了一个 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
事件?

flutter dart
1个回答
0
投票

无法将您自己的自定义参数传递给

onPress
事件。您通常可以通过将值保留在类的字段中来完成相同的用例,然后所有必要的代码路径都可以访问它。

© www.soinside.com 2019 - 2024. All rights reserved.