如何使用Flutter在应用程序中打开pdf文件

时间:2020-03-10 12:43:52

标签: flutter

我正在使用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" />

如何解决此错误?

3 个答案:

答案 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