扩展从另一个文件调用的 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']);
}
}
大家晚上好,实际上我创建了一个文件,其中包含一些基于 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']);
}
}