PDF文件未在颤动的android发行版中打开[关闭]
Posted
技术标签:
【中文标题】PDF文件未在颤动的android发行版中打开[关闭]【英文标题】:PDF file not opening in release version of android in flutter [closed] 【发布时间】:2020-09-19 14:29:21 【问题描述】:在 android Studio Emulator 中,pdf 文件正在打开,但是当我发布其 .apk 文件并将其安装到手机上时,pdf 文件无法打开。我使用flutter_pdfview包来加载pdf文件。
这是显示页面的位置。
import 'package:darpandentalhome/services/api_for_report.dart';
import 'package:darpandentalhome/shared/loading.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_pdfview/flutter_pdfview.dart';
import 'package:google_fonts/google_fonts.dart';
class Report extends StatefulWidget
final String url;
Report(this.url);
@override
_ReportState createState() => _ReportState();
class _ReportState extends State<Report>
String path;
@override
void initState()
// TODO: implement initState
super.initState();
ApiService(pdfURL: widget.url).loadPDF().then((value)
setState(()
path=value;
);
);
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(
elevation: 0,
centerTitle: true,
title: Text(
'Report',
style: GoogleFonts.rubik(
textStyle: TextStyle(
color: Colors.black,
fontWeight: FontWeight.w500
)
),
),
leading: IconButton(
icon: Icon(Icons.arrow_back_ios,color: Colors.black,),
onPressed: ()
Navigator.pop(context);
,
),
backgroundColor: Color(0xfff9f9f9),
),
backgroundColor: Color(0xfff9f9f9),
body: path != null ? Container(
child: PDFView(
filePath: path,
),
) : Loading(),
floatingActionButton: IconButton(
icon: Icon(Icons.refresh,size: 30,),
onPressed: ()
setState(()
path = null;
ApiService(pdfURL: widget.url).loadPDF().then((value)
setState(()
path=value;
);
);
);
,
),
);
这是用于从 HTTP URL 获取 pdf 文件的 HTTP API 服务。
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:path_provider/path_provider.dart';
class ApiService
final String pdfURL;
ApiService(this.pdfURL);
Future<String> loadPDF() async
var response = await http.get(pdfURL);
var dir = await getExternalStorageDirectory();
File file = File(dir.path + "/data.pdf");
await file.writeAsBytes(response.bodyBytes, flush: true);
return file.path;
我认为这是手机的权限问题,然后我在 AndroidManifest 文件中使用了存储权限,然后在我的手机上手动允许了此权限,但它也不起作用。 这里有什么问题?
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
【问题讨论】:
【参考方案1】:这是因为android版本之间的差异 如果您的 android 版本是 29,请在清单中使用此代码 android:requestLegacyExternalStorage="true"
【讨论】:
您建议的代码没有选项。当我复制/粘贴您的代码时,它会显示未知属性。【参考方案2】:以下是修复的步骤:
1. Add proguard-rules.pro in android/app folder file if its not already there
2. Inside of the proguard-rules.pro file put this:
-keep class com.shockwave.**
-keepclassmembers class com.shockwave.** *;
3.In app/build.gradle add this:
buildTypes
release
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
【讨论】:
【参考方案3】:由于 http api 需要从 Internet 获取数据,因此在授予应用程序 Internet 权限后,此问题已解决。
【讨论】:
以上是关于PDF文件未在颤动的android发行版中打开[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Advance_pdf_viewer 在发行版中不起作用
print() 语句未在 Android Studio 中的颤动 iOS 应用程序中打印到控制台