You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 08:15:32