firebase - 参数类型'Future'不能分配给参数类型'String'
问题描述
我已经看到与此相关的类似问题,但我的问题有点不同,因为我保持我的应用程序模块化,所以我在不同的 dart 文件中定义了以下方法(只是一个类,而不是小部件) :
Future getProfile() async {
return await usersCollection.doc(uid).get().then<dynamic>((DocumentSnapshot snapshot) async {
print(snapshot.data()['name']);
if(snapshot.data()['name'] == null){
print("No name exists");
}
else {
return 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()),
);
}
}
我如何在不牺牲模块化的情况下完成这项工作?
解决方案
通过看到
The argument type 'Future<dynamic>' can't be assigned to the parameter type 'String'
这和
Text(db.getProfile())
问题是db.getProfile()
一种async
方法。这就是为什么它告诉 Future 不能被分配给,String
因为 Text 小部件数据键的类型是String
not Future<String>
。
您可以FutureBuilder
在正文中使用并在具有String
值的文本中使用快照。
推荐阅读
- reactjs - React 和 React Native 的区别
- python - MeSH(医学主题标题)数据集(mesh.nt)在 RDFLib Python 中不起作用
- javascript - 在 IE 11 中单击时无法显示多个工具提示
- flutter - Flutter:iOS 通知后台处理程序
- c++ - 使用堆栈和中序遍历检查 Tree 是否为 BST
- ios - 如何在swift 5中为表格视图单元格添加滑动操作
- arguments - 在 Lisp/Racket/Scheme 中,怎么可能有一个名为 `list` 的参数?
- javascript - Laravel 侧边栏导航链接不起作用
- laravel - 使用 laravel 在插入之前检查记录是否存在
- sql - 替代 SAFE_OFFSET 从 SQL 中的数组中提取信息?