我正在使用flutter_pdfview
(版本为^ 1.0.0 + 10)在Flutter应用中打开PDF文件。当我的应用程序处于调试模式时,没有错误。构建应用程序后,无法在应用程序中打开PDF文件。我的应用程序将崩溃并突然关闭。我已经在AndroidManifest.xml中打开了权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
如何解决此错误?
答案 0 :(得分:2)
首先,您需要在其中的proguard-rules.pro
处创建一个/android/app/
文件,如下所示:
#Flutter Wrapper
-keep class com.shockwave.**
然后在/android/app/build.gradle
添加:
buildTypes {
release {
signingConfig signingConfigs.release
**minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'**
}
}
答案 1 :(得分:1)
我只有在android上才有这个问题,但是在应用程序生产时。为了解决这个问题,我添加了权限处理程序插件并更改了路径。同样重要的是,在下载后但阅读之前,将扩展名“ .pdf”添加到文件中。
final filename = url.substring(url.lastIndexOf("/") + 1);
var request = await HttpClient().getUrl(Uri.parse(url));
var response = await request.close();
var bytes = await consolidateHttpClientResponseBytes(response);
String dir = (await getExternalStorageDirectory()).path;
File file = new File('$dir/$filename.pdf');
await file.writeAsBytes(bytes);
pathPDF = file.path;
return file;
答案 2 :(得分:0)
如果您是在仿真器上运行调试,然后在真实设备上发布,则可能是您的问题:
PdfViewPage(路径:'/ storage / emulated / 0 / Download / $ pdfName')));
即使没有导致崩溃,也很难像您一样对下载路径进行硬编码。不同的设备可以在不同的位置进行下载。您可以使用downloads_path_provider查找下载的位置。
此外,除了在清单中声明所需的权限外,还应该向用户请求权限,并在用户未授予权限时处理情况。对于该任务,我建议使用permission_handler。