Сжатие изображения с флаттером дает результат в виде нуля

# #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());
    }