В моем приложении есть чат, где пользователь может отправлять текстовые сообщения или загружать файлы (только в формате jpg и pdf).Для файлов я отправляю их в кодировке base64 на сервер и выполняю преобразование на стороне сервера.Все следующее уже выполнено:
- Сервер получает строку base64 и сохраняет ее как изображение или pdf.
- Эти файлы в порядке, так как я могу открыть их изthe ftp.
- Пользователи приложения загружают файл с сервера, если они еще этого не сделали (сервер возвращает строку в кодировке base64 из файла)
Насторона флаттера, я получаю строку и декодирую ее.И вот здесь у меня проблема:
Если я использую декодированную строку base64 непосредственно в качестве Image.memory (Uint8List), он показывает без проблем.Таким образом, проблема не имеет ничего общего со строкой base64.
Но это не то поведение, которое мне нужно, так как я хочу, чтобы файл загружался в первый раз, если он не существуети затем, если он существует, я просто хочу открыть его (с помощью программного обеспечения OS по умолчанию для изображения или PDF)
Это код, который я использую для сохраненияfile:
String dir = (await getApplicationDocumentsDirectory()).path;
String archivoBase64 = await _repository.getArchivoBase64FromMensaje({'id': data['comentario']['id']});
await File('$dir/${data['comentario']['texto']}').writeAsBytes(base64.decode(archivoBase64).buffer.asUint8List());
await OpenFile.open('$dir/${data['comentario']['texto']}');
Функция OpenFile.open()
делает то, что от нее ожидают, она отображает параметры программного обеспечения, поэтому, когда это PDF-файл, или просто показывает изображение с помощью программы просмотра изображений по умолчанию.
ВАЖНО: я использую base64, поскольку файлы из этого чата являются личными (счета, банковские документы ...), поэтому к ним нельзя получить доступ, например, из браузера, поскольку они находятся в личной папке сервера..
Я использую следующие библиотеки:
- path_provider: ^ 0.5.0 + 1 (для получения путей к файлам или папкам)
- open_file: 1.2.2(для открытия сохраненного файла)
UPDATE
Я пробовал с iOS (iphone 8 iOS 12.2) и с моим личным телефоном (samsung s8plus android 9), и он работает отлично.Телефон, который я пробовал - это huawei p8 lite с android 6. Я буду продолжать делать дополнительные тесты, чтобы выяснить, не связана ли ошибка с этим конкретным телефоном, версия для Android и т. Д.
UPDATE2
Каким-то образом я решил это.Я перенес свой проект флаттера в AndroidX, а затем обновил все зависимости пакета флаттера до последней версии.Я не знаю, если это было то, что решило проблему, но теперь я могу открыть эти файлы с моего устройства Android 6.Ура!