如何正确地从异步函数获取字符串?

时间:2019-08-25 14:47:36

标签: firebase flutter firebase-authentication firebase-storage

在整个Flutter环境中,我仍然是新手,欢迎提供任何帮助!在我的应用中执行注册过程时,步骤之一是上传用户个人资料图片。我想将个人资料图片存储在Firebase存储上,然后将其从Firebase身份验证重命名为User UID。问题是整个注册过程完成后我获得的用户UID,因此我必须在这里使用Future类来获取它。

我想这样保存它,以便我可以更轻松地找到每个用户的个人资料照片(我的应用具有多个用户角色,用户A,B,C ...),并在需要时提取它

Future<String> getUID() async {
  final FirebaseUser user = await FirebaseAuth.instance.currentUser();
  final String uid = user.uid;
  _getUID(uid);
  return uid;
}

String getterUID;

void _getUID(String uid) {
  getterUID = uid;
}

Future<void> uploadPicture() async {
  final StorageReference firebaseStorageReference =
      FirebaseStorage.instance.ref().child(getUID.toString());
  final StorageUploadTask task =
      firebaseStorageReference.putFile(_pictureData['image']);
}

我设法将图片上传到Firebase存储,但是它是使用name(1)而不是使用Firebase Auth中的用户UID上传的。有什么技巧可以使它起作用吗?在此先感谢:)

(1)闭包()=>函数'getUID'的未来

1 个答案:

答案 0 :(得分:0)

您正在将函数getUID转换为字符串,而不是评估函数并将函数结果转换为字符串,这甚至不需要执行,因为您的函数已经返回了{{1} },放在String内。

有两个步骤:

  1. 将函数引用更改为函数调用:
Future
  1. getUID -> getUID() await获得Future的结果:
String

您的最终功能将如下所示:

getUID() -> await getUID()