Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 参数类型';未来<;动态>';can';不能分配给参数类型';字符串';_Firebase_Flutter_Google Cloud Firestore - Fatal编程技术网

Firebase 参数类型';未来<;动态>';can';不能分配给参数类型';字符串';

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

我也看到过类似的问题,但我的问题有点不同,因为我保持我的应用程序模块化,所以我在不同的dart文件(只是一个类,而不是小部件)中定义了以下方法:

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()),
    );
  }
}