Flutter中InAppWebView无法打开PDF文件的问题解决请求
Flutter中InAppWebView无法打开PDF文件的问题解决请求
我现在在开发Flutter应用的WebView页面,遇到了一个头疼的问题:当尝试在InAppWebView里打开PDF文件时,完全没反应,控制台还输出了一些摸不着头脑的日志。想请教下各位大佬,怎么修复这个问题,让PDF能正常打开或者支持下载呢?
问题详情
我的页面是用InAppWebView加载一个远程链接,里面有指向PDF文件的跳转,但点击PDF链接后页面毫无动静,控制台日志如下:
I/chromium(17997): [INFO:CONSOLE:1] "[object HTMLAnchorElement]", source: https://testurl.com/_next/static/chunks/pages/%5B%5B...slug%5D%5D-f8d06f337de73a8f.js (1) I/chromium(17997): [INFO:CONSOLE:1] "end", source: https://testurl.com/_next/static/chunks/pages/%5B%5B...slug%5D%5D-f8d06f337de73a8f.js (1) [AndroidInAppWebViewController] (android) WebView ID 0 calling "onConsoleMessage" using {messageLevel: 1, message: [object HTMLAnchorElement]} [AndroidInAppWebViewController] (android) WebView ID 0 calling "onConsoleMessage" using {messageLevel: 1, message: end} [AndroidInAppWebViewController] (android) WebView ID 0 calling "onProgressChanged" using {progress: 10} [AndroidInAppWebViewController] (android) WebView ID 0 calling "onProgressChanged" using {progress: 100} [AndroidInAppWebViewController] (android) WebView ID 0 calling "onProgressChanged" using {progress: 100}
我的当前代码
import 'package:flutter/material.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:loading_indicator/loading_indicator.dart'; import '../../widgets/constants.dart'; import '../../env.dart'; import '../../localization/app_localizations.dart'; import '../../widgets/api_services.dart'; import '../../widgets/size_config.dart'; class WeddingPlansScreen extends StatefulWidget { @override _WeddingPlansScreenState createState() => _WeddingPlansScreenState(); } class _WeddingPlansScreenState extends State<WeddingPlansScreen> { late InAppWebViewController _webViewController; bool isLoading = true; @override void initState() { super.initState(); } @override Widget build(BuildContext context) { SizeConfig().init(context); return WillPopScope( onWillPop: () async { if (await _webViewController.canGoBack()) { // 让WebView内部返回上一页 _webViewController.goBack(); return false; // 阻止关闭当前页面 } return true; // 允许关闭WebView页面 }, child: Scaffold( appBar: AppBar( automaticallyImplyLeading: false, leading: IconButton( icon: Icon( Icons.arrow_back_ios_new_outlined, color: Environment.appTheme, size: Constants.space25, ), onPressed: () { Navigator.pop(context); }, ), backgroundColor: Constants.whiteColor, title: Text("Wedding Packages"), ), body: Stack( children: [ InAppWebView( initialUrlRequest: URLRequest( url: WebUri.uri(Uri.parse('${Environment.testUrl}')), ), onLoadStart: (controller, url) { setState(() { isLoading = true; }); }, onLoadStop: (controller, url) async { setState(() { isLoading = false; }); }, onWebViewCreated: (controller) { _webViewController = controller; }, ), if (isLoading) Center( child: Container( height: Constants.height35, width: Constants.height35, child: LoadingIndicator( strokeWidth: 3.0, indicatorType: Indicator.lineSpinFadeLoader, colors: [Constants.darkGreyColor.withOpacity(0.6), Constants.darkGreyColor.withOpacity(0.6),], ), ) ), ], ), ), ); } }
我的初步猜测
我自己瞎琢磨了下,会不会是InAppWebView默认不支持PDF渲染?或者是不是需要拦截PDF链接,做一些特殊处理?但具体怎么操作完全没头绪。
期望的解决效果
我有两个小期望,满足其中一个就行:
- 要么能在InAppWebView里直接渲染PDF内容
- 要么能自动触发PDF文件的下载,让用户可以用本地的PDF阅读器打开
麻烦各位大佬帮忙看看怎么修改代码来解决这个问题,万分感谢!
内容来源于stack exchange
相关产品推荐
相关产品推荐

