Flutter Share Image/File(mimeType 问题)

Flutter Share Image/File ( mimeType issue )

所以我需要使用 Flutter 将图像共享到另一个应用程序,我使用 esys_flutter_share 1.0.2 插件

Future<void> _shareImage(int index) async {
    final filename = _imageList[index].split("/")[2];
    try {
      final ByteData bytes = await rootBundle.load(_imageList[index]);
      await Share.file(
          'esys image', 'esys.png', bytes.buffer.asUint8List(), 'image/png',
          text: '$filename');
    } catch (e) {
      print('error: $e');
    }
  }

这是示例页面中的相同代码,将我的图像从我的应用程序共享到另一个应用程序,唯一的问题是 Android/Ios 无法识别作为图像并作为文本共享的 mimeType(已尝试在 Ios 模拟器甚至在真实 ios phone)

Screenshot of the problem Screenshot how i need it

尝试了'image/png','image/jpg' ecc,总是像文本文件一样共享文件。

发现我的问题,如果我让可选的字符串文本为空,插件将文件共享为图像文件,示例:

final ByteData bytes = await rootBundle.load('assets/images/p1.jpg');
      await Share.file(
          'Preset image', '$filename.jpg', bytes.buffer.asUint8List(), '',
          text: '');

enter image description here

相反,如果我在可选描述字符串 "text: 'My optional text.'" 中写入任何内容,当我共享时,我会像原始问题一样像文本一样共享文件。

share_extend iOS 和 Android 的插件,用于共享文本、图像、视频和文件。

使用:

https://pub.dev/packages/share_extend#-installing-tab-

而不是:

https://pub.dev/packages/esys_flutter_share#-installing-tab-

首先,将 share_extend 添加为 pubspec.yaml 文件中的依赖项。

dependencies:
share_extend: "^1.1.7"

将以下密钥添加到位于 /ios/Runner/Info.plist 的 info.plist 文件中,用于将共享图像保存到照片库。

<key>NSPhotoLibraryAddUsageDescription</key>
<string>describe why your app needs access to write photo library</string>

如果您的项目需要共享外部存储文件的读写权限,请将以下权限添加到您的AndroidManifest.xml,位于/android/app/src/main/AndroidManifest.xml

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

进口

import 'package:share_extend/share_extend.dart';

分享文字

ShareExtend.share("Enter Text Here", "text"); //don't change second parameter it's 
//defining the type of file to share.

分享图片

ShareExtend.share("Enter Image path Here", "image"); //don't change second parameter 
//it's defining the type of file to share.

分享视频

ShareExtend.share("Enter Video path Here", "video"); //don't change second parameter 
//it's defining the type of file to share.

共享文件

ShareExtend.share("Enter File path Here", "file"); //don't change second parameter 
//it's defining the type of file to share.

您还可以使用此库共享多个图像。