Для загрузки файла и непосредственного получения изображения downloadUrl после этого я создал несколько функций c, которые я вызываю на своей странице, например:
StorageUploadTask imageUploadTask = await ImageProcessProvider.setImageToStorage(_destinationImage, generatedRandomId);
String imageDownloadUrl = await ImageProcessProvider.getImageDownloadUrlAfterUploading(imageUploadTask);
Функции c (включая как я загружаю: 'setImageToStorage'):
import 'dart:async';
import 'dart:io';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:image_picker_modern/image_picker_modern.dart';
class ImageProcessProvider {
static Future<String> getImageDownloadUrl(String imageId) async {
try {
final String downloadUrl = await FirebaseStorage.instance.ref().child(imageId + '.jpg').getDownloadURL();
return downloadUrl;
} catch (error) {
print('getImageDownloadUrl: $error');
throw error;
}
}
static Future<String> getImageDownloadUrlAfterUploading(StorageUploadTask uploadTask) async {
try {
final StorageTaskSnapshot url = (await uploadTask.onComplete);
final String downloadUrl = (await url.ref.getDownloadURL());
return downloadUrl;
} catch (error) {
print('getImageDownloadUrlAfterUploading: $error');
throw error;
}
}
static Future<StorageUploadTask> setImageToStorage(File image, String imageId) async {
try {
final String fileName = imageId + '.jpg';
final StorageReference storageRef = FirebaseStorage.instance.ref().child(fileName);
final StorageUploadTask uploadTask = storageRef.putFile(
File(image.path),
StorageMetadata(
contentType: 'image/jpeg',
),
);
return uploadTask;
} catch (error) {
print('setImageToStorage: $error');
throw error;
}
}
}
Надеюсь, это поможет вам.