Firebase 参数类型';未来<;动态>';can';不能分配给参数类型';字符串';
我也看到过类似的问题,但我的问题有点不同,因为我保持我的应用程序模块化,所以我在不同的dart文件(只是一个类,而不是小部件)中定义了以下方法:Firebase 参数类型';未来<;动态>';can';不能分配给参数类型';字符串';,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我也看到过类似的问题,但我的问题有点不同,因为我保持我的应用程序模块化,所以我在不同的dart文件(只是一个类,而不是小部件)中定义了以下方法: Future getProfile()异步{ 返回await userscolection.doc(uid.get()。然后((DocumentSnapshot快照)异步{ 打印(snapshot.data()['name']); if(snapshot.data()['name']==null){ 打印(“不存在名称”); } 否则{ 返回snaps
Future getProfile()异步{
返回await userscolection.doc(uid.get()。然后((DocumentSnapshot快照)异步{
打印(snapshot.data()['name']);
if(snapshot.data()['name']==null){
打印(“不存在名称”);
}
否则{
返回snapshot.data()['name'];
}
});
我试图在我的家庭小部件上使用它的价值:
import 'package:flutter/material.dart';
import 'package:carpoolapp/services/auth.dart';
import 'package:carpoolapp/services/database.dart';
import 'package:firebase_auth/firebase_auth.dart';
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
final AuthService _auth = AuthService();
User user = FirebaseAuth.instance.currentUser;
DatabaseService db = DatabaseService(uid: FirebaseAuth.instance.currentUser.uid);
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.redAccent,
appBar: AppBar(
title: Text('Signed in'),
backgroundColor: Colors.blueAccent,
elevation: 0.0, //no drop shadow
actions: <Widget>[
FlatButton.icon(
onPressed: () async {
await _auth.signOutUser();
},
icon: Icon(Icons.person),
label: Text('logout')),
],
),
body: Text(db.getProfile()), // Error is here
//body: UserTile(user: FirebaseAuth.instance().getCurrentUser()),
);
}
}
导入“包装:颤振/材料.省道”;
导入“package:carpoolapp/services/auth.dart”;
导入“包:carpoolapp/services/database.dart”;
导入“包:firebase_auth/firebase_auth.dart”;
类Home扩展了StatefulWidget{
@凌驾
_HomeState createState()=>\u HomeState();
}
类(HomeState扩展状态){
最终AuthService_auth=AuthService();
User User=FirebaseAuth.instance.currentUser;
DatabaseService db=DatabaseService(uid:FirebaseAuth.instance.currentUser.uid);
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:Colors.redAccent,
appBar:appBar(
标题:文本(“已登录”),
背景颜色:Colors.blueAccent,
标高:0.0,//无阴影
行动:[
FlatButton.icon(
onPressed:()异步{
等待_auth.signOutUser();
},
图标:图标(Icons.person),
标签:文本(“注销”),
],
),
body:Text(db.getProfile()),//此处有错误
//正文:UserTile(用户:FirebaseAuth.instance().getCurrentUser()),
);
}
}
我如何在不牺牲模块性的情况下完成这项工作
参数类型“Future”无法分配给参数类型“String”
这和
Text(db.getProfile())
问题是db.getProfile()
是一种异步
方法。这就是为什么不能将它的告诉未来分配给String
,因为文本小部件数据键的类型是String
而不是Future
您可以在正文中使用FutureBuilder
,并在文本中使用快照,该快照将具有字符串值
参数类型“Future”无法分配给参数类型“String”
这和
Text(db.getProfile())
问题是db.getProfile()
是一种异步
方法。这就是为什么不能将它的告诉未来分配给String
,因为文本小部件数据键的类型是String
而不是Future
您可以在正文中使用FutureBuilder
,并在文本中使用快照,该快照将具有字符串
值。成功了!太棒了,我忘记了FutureBuilder()。成功了!太棒了,我忘记了FutureBuilder()。
import 'package:flutter/material.dart';
import 'package:carpoolapp/services/auth.dart';
import 'package:carpoolapp/services/database.dart';
import 'package:firebase_auth/firebase_auth.dart';
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
final AuthService _auth = AuthService();
User user = FirebaseAuth.instance.currentUser;
DatabaseService db = DatabaseService(uid: FirebaseAuth.instance.currentUser.uid);
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.redAccent,
appBar: AppBar(
title: Text('Signed in'),
backgroundColor: Colors.blueAccent,
elevation: 0.0, //no drop shadow
actions: <Widget>[
FlatButton.icon(
onPressed: () async {
await _auth.signOutUser();
},
icon: Icon(Icons.person),
label: Text('logout')),
],
),
body: Text(db.getProfile()), // Error is here
//body: UserTile(user: FirebaseAuth.instance().getCurrentUser()),
);
}
}