gpt4 book ai didi

android - 如何使用 Flutter 将图像上传到 Firebase

转载 作者:IT老高 更新时间:2023-10-28 12:34:18 37 4
gpt4 key购买 nike

我正在使用 image_picker 库 https://pub.dartlang.org/packages/image_picker用于选择/拍摄我要上传的照片。到目前为止的代码成功地将图像上传到 Firebase 存储,唯一的问题是图像上传后应用程序关闭(并没有真正崩溃,它只是关闭并且 VS 代码失去了与设备的连接)。代码如下:

 File _image;

Future _takeProfilePicture() async{
var image = await ImagePicker.pickImage(source: ImageSource.camera);

setState((){
_image = image;
});
}

Future _selectProfilePicture() async{
var image = await ImagePicker.pickImage(source: ImageSource.gallery);

setState((){
_image = image;
});
}

Future<Null> _uploadProfilePicture() async{
FirebaseUser user = await FirebaseAuth.instance.currentUser();

final StorageReference ref = FirebaseStorage.instance.ref().child('${user.email}/${user.email}_profilePicture.jpg');
final StorageUploadTask uploadTask = ref.putFile(_image);
final Uri downloadUrl = (await uploadTask.future).downloadUrl;
}

void _selectAndUploadPicture() async{
await _selectProfilePicture();
await _uploadProfilePicture();
}

void _takeAndUploadPicture() async{
await _takeProfilePicture();
await _uploadProfilePicture();
}

终端打印以下内容:

W/Firestore( 6873): (0.6.6-dev) [Firestore]: The behavior for java.util.Date objects stored in Firestore is going to change AND YOUR APP MAY BREAK.
W/Firestore( 6873): To hide this warning and ensure your app does not break, you need to add the following code to your app before calling any other Cloud Firestore methods:
W/Firestore( 6873):
W/Firestore( 6873): FirebaseFirestore firestore = FirebaseFirestore.getInstance();
W/Firestore( 6873): FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
W/Firestore( 6873): .setTimestampsInSnapshotsEnabled(true)
W/Firestore( 6873): .build();
W/Firestore( 6873): firestore.setFirestoreSettings(settings);
W/Firestore( 6873):
W/Firestore( 6873): With this change, timestamps stored in Cloud Firestore will be read back as com.google.firebase.Timestamp objects instead of as system java.util.Date objects. So you will also need to update code expecting a java.util.Date to instead expect a Timestamp. For example:
W/Firestore( 6873):
W/Firestore( 6873): // Old:
W/Firestore( 6873): java.util.Date date = snapshot.getDate("created_at");
W/Firestore( 6873): // New:
W/Firestore( 6873): Timestamp timestamp = snapshot.getTimestamp("created_at");
W/Firestore( 6873): java.util.Date date = timestamp.toDate();
W/Firestore( 6873):
W/Firestore( 6873): Please audit all existing usages of java.util.Date when you enable the new behavior. In a future release, the behavior will be changed to the new behavior, so if you do not follow these steps, YOUR APP MAY BREAK.

我尝试从终端实现建议的 java 代码,但我似乎找不到使用 cloud_firestore 库 https://pub.dartlang.org/packages/cloud_firestore 在 Flutter 中编写等效代码的方法,它没有 FirebaseFirestoreSettings 的等价物(或者我似乎找不到)。有没有办法解决这个问题?

提前谢谢你!

最佳答案

mmccabe 答案的更新版本,适用于 firebase_storage 插件的 1.0.4 版本

Future<String> _pickSaveImage(String imageId) async {
File imageFile = await ImagePicker.pickImage(source: ImageSource.camera);
StorageReference ref =
FirebaseStorage.instance.ref().child(imageId).child("image.jpg");
StorageUploadTask uploadTask = ref.putFile(imageFile);
return await (await uploadTask.onComplete).ref.getDownloadURL();
}

现在你必须做的:

var downloadURL = (await uploadTask.onComplete).ref.getDownloadURL();

因为 error: The getter 'future' isn't defined for the class 'StorageUploadTask'. (undefined_getter at [timetracker] lib/screens/image_detection.dart:63)

关于android - 如何使用 Flutter 将图像上传到 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51328368/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com