首页 > 解决方案 > 根据闭包上下文的要求,返回类型“Transaction”不是“Future<_>”

问题描述

Future<void> init() async {
    if (!_initialized) {
      _firebaseMessaging.requestNotificationPermissions();

      User user = FirebaseAuth.instance.currentUser;
      _uid = user.uid;

      _firebaseMessaging.onTokenRefresh.listen((event) {
        var db = FirebaseFirestore.instance;
        var ref = FirebaseFirestore.instance.doc("users/$_uid");
        db.runTransaction(
            (transaction) => transaction.update(ref, {constants.fcm: event}));
      });

我在这一行收到返回类型错误:

db.runTransaction(
                (transaction) => transaction.update(ref, {constants.fcm: event}));

根据闭包上下文的要求,返回类型“Transaction”不是“Future<_>”

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


你没有从显式方法返回任何东西,所以 Dart 尝试返回最后一行代码 ( db.runTransaction) 的结果,它返回一个Transaction.

由于该方法被标记为 return Future<void>,这与 a 不同Transaction,因此您会收到您发布的错误。

为什么将方法标记为返回 a Future?真的需要退货吗?如果是这样,是什么?


推荐阅读