扩展从另一个文件调用的 Widget

Extend a Widget called from another file

大家晚上好,实际上我创建了一个文件,其中包含一些基于 firestore 的函数,我必须在其他文件中重用这些函数,这是代码:

import 'dart:math';
import 'dart:async';
import 'package:cron/cron.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:provider/provider.dart';
import 'package:goodgoals_android/services/authentication.dart';

abstract class Service {
  Future<void> NumberGenerator();

  Future<void> MissionRetriever1();

  Future<void> MissionRetriever2();

  Future<void> MissionRetriever3();

  Future<void> MissionRetriever4();

}

class MissionService implements Service {
  MissionService({this.auth});
  int missionNumber1;
  int missionNumber2;
  int missionNumber3;
  int missionNumber4;
  int test = 10;
  final BaseAuth auth;
  final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
  final databaseReference = FirebaseFirestore.instance;



  Future<void> NumberGenerator() {
    final cron= Cron();
    cron.schedule(Schedule.parse('*0**1'), () async { //Tutti i Lunedì alle 00;
    Random random = new Random();
    missionNumber1 = random.nextInt(10);
    missionNumber2 = random.nextInt(10);
    missionNumber3 = random.nextInt(10);
    missionNumber4 = random.nextInt(10);
  });
  }


  Future<void> MissionRetriever1() async{
    await FirebaseFirestore.instance
        .collection("quest")
        .doc("1")
        .get();
    }

  Future<void> MissionRetriever2() async{
    return await FirebaseFirestore.instance
        .collection("quest")
        .doc(missionNumber2.toString())
        .get();
  }

  Future<void> MissionRetriever3() async{
    return await FirebaseFirestore.instance
        .collection("quest")
        .doc(missionNumber3.toString())
        .get();
  }

  Future<void> MissionRetriever4() async{
    return await FirebaseFirestore.instance
        .collection("quest")
        .doc(missionNumber4.toString())
        .get();
  }




  }

实际上我需要在另一个文件中调用 MissionRetriever1 函数,然后像这样用 then 保存值:

  Future<void> getMission1() async{
    return await widget.mservice.MissionRetriever2
        .then((QuerySnapshot querySnapshot) => {
      querySnapshot.docs.forEach((doc) {
        print("Done");
        setState(() {
          MissionData1.add(doc["Name"]);
        });
      }),
    });
  }

但是这样做给我错误:方法 'then' 没有为类型 'Function' 定义。

有什么建议吗?

您在 MissionRetriever2 后遗漏了 ()。您的 IDE 可能没有警告您,因为您拥有 class 名称标准的所有大写字母,但不是函数。函数应遵循驼峰式,例如:missionRetriever2

Future<void> getMission1() async{
    return await widget.mservice.MissionRetriever2()
        .then((QuerySnapshot querySnapshot) => {
      querySnapshot.docs.forEach((doc) {
        print("Done");
        setState(() {
          MissionData1.add(doc["Name"]);
        });
      }),
    });
    }

请注意,您也不需要结合使用 await 和 .then() 回调,更简洁的方法是:

Future<void> getMission1() async{
    var snap = await widget.mService.missionRetriever2();
    for(var doc in snap.docs){
        missionData1.add(doc.data()['Name']);
    }
}