我想使用 Flutter firebase 更改用户的个人资料图像,但无法将下载 url 分配给 profileImage

问题描述

前辈,我想更新用户的当前个人资料图片 我已成功将图片上传到 Firebase 存储,但现在无法将该图片的网址自动分配给 firestore 文档。我在过去 3 天里一直在尝试这个,但无法实现我的目标。

这是我在 Cloud Firestore 中的文档结构。

doc structure in cloud firestore

我将图片上传到 Firestore 的代码

class StorageRepo{ FirebaseStorage storage = FirebaseStorage(
storageBucket: "myrepolink");
Future<String>uploadfile(File image) async{
var user = FirebaseAuth.instance.currentUser;
var storageRef = storage.ref().child('user/profile/${user.uid}');
user.uid;
UploadTask uploadTask = storageRef.putFile(image);
String downloadUrl = (await uploadTask).ref.getDownloadURL().toString();
return downloadUrl }}

我的图片显示代码

GestureDetector(
                                  onTap: ()async {
                                    File image =  await ImagePicker.pickImage(source: ImageSource.gallery);
                                    await UserController().uploadProfileImage(image);
                                    setState(() {});
                                  },child: Center(
                                    child: profileImage == null
                                    ? CircleAvatar(
                                      radius: 50.0,backgroundColor: redColor,child: Icon(Icons.camera_alt,color: Colors.white,),)
                                      : CircleAvatar(
                                        radius: 50.0,backgroundImage: NetworkImage(profileImage),

我的 UserController 类

import 'package:brain_dareus_ministries/models/user_model.dart';
import 'package:brain_dareus_ministries/models/auth.dart';
import 'dart:io';
import 'storageController.dart';

class UserController {OurUser _currentUser;
AuthRepo _authRepo =AuthRepo();


Future init;

UserController() {
init = initUser();
}
Future<OurUser> initUser() async {
_currentUser = await _authRepo.getUser();
return _currentUser;
}

OurUser get currentUser => _currentUser;

UploadProfile 图片类

uploadProfileImage(File image) async {
_currentUser.profileImage = await StorageRepo().uploadfile(image);  }}
              

在 AuthRipo 中获取用户类

final FirebaseAuth _auth = FirebaseAuth.instance;
Future<OurUser> getUser() async {
var firebaseUser = await _auth.currentUser;
return OurUser(uid: firebaseUser.uid,displayName: firebaseUser.displayName);
}

我们的用户类

class OurUser{
 String uid;
 String displayName;
 String email;
 String mobileNumber;
 String profileImage;
 String password;
OurUser({
  this.displayName,this.uid,this.email,this.mobileNumber,this.profileImage,this.password
 });
   }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)