我想了解如何在 2021 年 2 月之前将 Firebase 与 Flutter 结合使用。我的教程参考了 Firestore.instance
,但它不起作用。最终我陷入了 FirebaseFirestore.instance
,这些是同一个库吗?
我正在使用的代码块如下。但是,我被这个编译器错误困住了:
The argument type 'Future<GridView>' can't be assigned to the parameter type 'Widget'.
我怎样才能摆脱这个错误?
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class MyFavorites extends StatelessWidget {
@override
Widget build(BuildContext ctx) {
return Scaffold(
appBar: MainAppBar(),
body: displayFavorites();
);
}
Future<DocumentSnapshot> _userName() async {
FirebaseFirestore firestore = FirebaseFirestore.instance;
final user = await FirebaseAuth.instance.currentUser;
final userData = await firestore.collection('AppUser').doc(user.uid).get();
return userData;
}
Future<GridView> displayFavorites() async {
DocumentSnapshot userName = await _userName();
return GridView.count(
crossAxisCount: 2,
// Generate 4 widgets that display their index in the List.
children: List.generate(6, (index) {
return Center(
//child: Text(favorites.elementAt(index)),
child: Text(userName["firstName"]),
);
}),
);
}
}
答案 0 :(得分:0)
尝试在单独的函数中获取您的用户名,不要将 Future 用作小部件。这是一个示例代码:
class MyFavorites extends StatefulWidget {
@override
_MyFavoritesState createState() => _MyFavoritesState();
}
class _MyFavoritesState extends State<MyFavorites> {
String userName;
@override
void initState() {
super.initState();
_userName();
}
@override
Widget build(BuildContext ctx) {
return Scaffold(
appBar: MainAppBar(),
body: (userName==null)?CircularProgressIndicator(): displayFavorites();
);
}
Future<DocumentSnapshot> _userName() async {
FirebaseFirestore firestore = FirebaseFirestore.instance;
final user = await FirebaseAuth.instance.currentUser;
final userData = await firestore.collection('AppUser').doc(user.uid).get();
// return userData;
if(userData["firstName"] != null)
setState(){
userName = userData["firstName"];
}
}
GridView displayFavorites() async {
return GridView.count(
crossAxisCount: 2,
// Generate 4 widgets that display their index in the List.
children: List.generate(6, (index) {
return Center(
//child: Text(favorites.elementAt(index)),
child: Text(userName),
);
}),
);
}
}