问题描述
我尝试了 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);
}