如何在flutter中将应用程序文件中的语音文件mpeg共享给其他应用程序如whatsapp

问题描述

我尝试了 Flutter share 2.0.1 插件来共享语音文件,但没有用(没有这样的文件)。你能解决这个问题吗,或者我如何将语音文件分享给其他应用程序?这是我的代码错误截图。


E/Flutter (31567): [ERROR:Flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: PlatformException(assets/voices/pırt.mpeg (No such file or directory),null,null)
E/Flutter (31567): #0      StandardMethodCodec.decodeEnvelope (package:Flutter/src/services/message_codecs.dart:597:7)
E/Flutter (31567): #1      MethodChannel._invokeMethod (package:Flutter/src/services/platform_channel.dart:158:18)

IconButton(
              icon: Icon(Icons.send),color: Colors.black,iconSize: 35,onpressed: () {
                try{
                  Share.shareFiles(["assets/voices/pırt.mpeg"],text: "Share");
                }
                catch(ex){
                  print(ex);
                }
              },),

解决方法

如错误所述,assets/voices/pırt.mpeg 不是操作系统上文件的有效路径。这是一种资产,打包到您的应用程序中。如果您想共享资产,您需要先在设备上将它们设为文件。

您需要添加 path_provider 依赖项:

dependencies:
  path_provider: ^2.0.1

然后,创建一个新的 File 并将资产中的数据写入 File

//Get directory and make a file object
final Directory dir = await getTemporaryDirectory();
final File file = File(dir.path + '/mpeg_data');

//Get data from assets
ByteData data = await rootBundle.load('assets/voices/pırt.mpeg');

//Write actual data
await file.writeAsBytes(data.buffer.asUint8List());

这一切都应该在您共享文件之前完成。然后当你共享文件时,使用你创建的文件对象的路径:

//Get directory and make a file object
final Directory dir = await getTemporaryDirectory();
final File file = File(dir.path);

//Get data from assets
ByteData data = await rootBundle.load('assets/voices/pırt.mpeg');

//Write actual data
await file.writeAsBytes(data.buffer.asUint8List());

try{
  Share.shareFiles([file.path],text: "Share");
}
catch(ex){
  print(ex);
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...