# #firebase #flutter #firebase-storage
Вопрос:
Сжатый выходит как нулевой
File compressed = await FlutterImageCompress.compressAndGetFile(
img.path,
img.path.split('/').last,
quality: 80,
);
ref = firebase_storage.FirebaseStorage.instance
.ref()
.child('postimages/${Path.basename(img.path)}');
await ref.putFile(compressed);
Вот какую ошибку я получаю
E/flutter (12851): [ОШИБКА:flutter/lib/ui/ui_dart_state.cc(199)] Необработанное исключение:
NoSuchMethodError: метод чтения «абсолютный», был вызван на нуль.
Е/трепетание (12851): получатель: нуль,
е/трепетание (12851): звонила: абсолютная
е/трепетание (12851): #0 объект.noSuchMethod (Dart о:ядро-патчи/object_patch.Дарт:54:5)
е/трепетание (12851): #1 Ссылка.putFile
упаковки:firebase_storage/в src/ссылкой.Дарт:126
е/трепетание (12851): #2 _AddImageState.протоколу
упаковки:softclaw/…/addpost/addimage.Дарт:228
адрес e/флаттер (12851):
е/трепетание (12851):
Комментарии:
1. вместо
img.path.split('/').last
этого вам нужно пройти полный путь — полный путь, в который будет записан сжатый файл2. это целевой путь, если я передам полный путь, он скажет, что путь к изображению не может совпадать с путем к изображению, а если я передам другой путь, то он запросит имя изображения; поэтому вместо пути я передал имя файла.
3.
FlutterImageCompress.compressAndGetFile("/data/user/0/com.softclaw.in/cache/image_picker8531589453832627480.jpg", "/data/user/0/com.softclaw.in/cache/image_picker8531589453832627480.webp", quality: 80, format: CompressFormat.webp);
— что такое то же самое? вход естьjpg
выход естьwebp
4.
final path = '/data/user/0/com.softclaw.in/cache/image_picker8531589453832627480.jpg'); final imageUri = Uri.parse(path); final outputUri = imageUri.resolve('output.webp'); print(imageUri.toFilePath()); print(outputUri.toFilePath());
5. @pskink 👍 Есть ли шанс, что вы сможете записать окончательный результат в ответе, чтобы мы могли проголосовать, а ОП может принять?
Ответ №1:
Это будет работать совершенно нормально
final imageUri = Uri.parse(img.path);
final String outputUri = imageUri.resolve('./output.webp').toString();
print(imageUri.toFilePath());
File compressed = await FlutterImageCompress.compressAndGetFile(
img.path, outputUri,
quality: 80, format: CompressFormat.webp);
print(img.path);
print(outputUri);
ref = firebase_storage.FirebaseStorage.instance
.ref()
.child('postimages/${Path.basename(img.path)}');
await ref.putFile(compressed);
_imageName.add(await ref.getDownloadURL());
}