flutter - 如何让 updateProfile() 在 Firebase 中工作?
问题描述
我正在尝试使用 Firebase 创建一个应用程序。但是当我使用 updateProfile() 时,我得到了这个错误。没有为“Future”类型定义方法“updateProfile”。
Future updateProfilePic(picUrl) {
var userInfo = new UserUpdateInfo();
userInfo.photoUrl = picUrl;
final user = FirebaseAuth.instance.currentUser();
user.updateProfile(userInfo).then((val) {
FirebaseAuth.instance.currentUser().then((user) {
Firestore.instance
.collection('/Recycling Points')
.where('uid', isEqualTo: user.uid)
.getDocuments()
.then((docs) {
Firestore.instance
.document('/Recycling Points/${docs.documents[0].documentID}')
.updateData({'image': picUrl}).then((value){
print ('uploaded');
});
});
}).catchError((e) {
print(e);
});
});
}
编辑: 这是完整的代码。
导入包
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:smartbin/models/recycle.dart';
import 'package:smartbin/models/user.dart';
数据库服务
class DatabaseService {
final String uid;
DatabaseService({this.uid});
收藏参考
final CollectionReference recyclepointsCollection =
Firestore.instance.collection('Recycle Points');
Future updateUserData(String name, String email, String image,
int organicWaste, int nonOrganicWaste, int recycleWaste) async {
return await recyclepointsCollection.document(uid).setData({
'name': name,
'email': email,
'image': image,
'Organic Waste ': organicWaste,
'Non Organic Waste': nonOrganicWaste,
'Recycling Waste ': recycleWaste,
});
}
从快照中回收点列表
List<Recycle> _recycleListFromSnapshot(QuerySnapshot snapshot) {
return snapshot.documents.map((doc) {
return Recycle(
name: doc.data['name'] ?? '',
email: doc.data['email'] ?? '',
image: doc.data['image'] ?? '',
organicWaste: doc.data['organicWaste'] ?? 0,
nonOrganicWaste: doc.data['nonOrganicWaste'] ?? 0,
recycleWaste: doc.data['recycleWaste'] ?? 0);
}).toList();
}
更新个人资料图片代码
void updateProfilePic(picUrl) {
var userInfo = new UserUpdateInfo();
userInfo.photoUrl = picUrl;
final user = FirebaseAuth.instance.currentUser();
user.updateProfile(userInfo).then((val) {
FirebaseAuth.instance.currentUser().then((user) {
Firestore.instance
.collection('/Recycling Points')
.where('uid', isEqualTo: user.uid)
.getDocuments()
.then((docs) {
Firestore.instance
.document('/Recycling Points/${docs.documents[0].documentID}')
.updateData({'image': picUrl}).then((value){
print ('uploaded');
});
});
}).catchError((e) {
print(e);
});
});
}
来自快照的用户数据
UserData _userDataFromSnapshot(DocumentSnapshot snapshot) {
return UserData(
uid: uid,
name: snapshot.data['name'],
email: snapshot.data['email'],
image: snapshot.data['image'],
organicWaste: snapshot.data['organicWaste'],
nonOrganicWaste: snapshot.data['nonOrganicWaste'],
recycleWaste: snapshot.data['recycleWaste']);
}
获取回收点流
Stream<List<Recycle>> get recyclePoints {
return recyclepointsCollection.snapshots().map(_recycleListFromSnapshot);
}
获取用户文档流
Stream<UserData> get userData {
return recyclepointsCollection
.document(uid)
.snapshots()
.map(_userDataFromSnapshot);
}
}
解决方案
尝试这样做
void updateProfilePic(picUrl) {
var userInfo = new UserUpdateInfo();
userInfo.photoUrl = picUrl;
final user = FirebaseAuth.instance.currentUser();
user.updateProfile(userInfo).then((val) {
FirebaseAuth.instance.currentUser().then((user) {
Firestore.instance
.collection('/Recycling Points')
.where('uid', isEqualTo: user.uid)
.getDocuments()
.then((docs) {
Firestore.instance
.document('/Recycling Points/${docs.documents[0].documentID}')
.updateData({'image': picUrl}).then((value){
print ('uploaded');
});
});
}).catchError((e) {
print(e);
});
});
}
从 Future 更改为 void 方法。
推荐阅读
- rust - Rust 中隐藏的代理和实现模式?
- java - 在 Android 中共享自定义文本
- reactjs - 如何实现卡片媒体内的图片会以某种方式弹出或悬停在上方的样式?
- git - 如何删除 git 较旧的提交并仅保留最新的提交?
- android - 错误:不兼容的类型:当我运行 @Test 注释时,NonExistentClass 无法转换为注释 @error.NonExistentClass()
- flutter - Flutter 在后台离线推送通知
- dependencies - python3.9-dev 依赖错误 deadsnakes Mint 20
- python - Slurm 作业处于运行状态但不产生任何结果
- powershell - 带有 PowerShell 的 SAP .Net 连接器:在 SAP 系统中打开 PDF
- sql - 如何使用更改表查询在 AWS Redshift 中添加多列