首页 > 解决方案 > 如何让 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);
  }
}

标签: flutter

解决方案


尝试这样做

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 方法。


推荐阅读