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

Flutter如何使用inappwebview实现网页内文件下载功能

Flutter InAppWebView 下载功能参数报错解决方案

你遇到的参数报错是因为flutter_inappwebview v6.0及以上版本对原有API做了不兼容更新,旧教程中的v5.x版本参数已废弃,按以下规则修改即可:

  • initialUrl参数已废弃,替换为initialUrlRequest,传入URLRequest(url: WebUri("目标页面链接"))
  • debuggingEnabled配置已从InAppWebViewOptions中移除,改为全局静态方法调用,在main函数初始化阶段执行InAppWebViewController.setWebContentsDebuggingEnabled(true)即可
  • useOnDownloadStart配置已废弃,不需要额外声明即可监听下载事件
  • onDownloadStart回调的url参数类型从字符串改为WebUri对象,传给FlutterDownloader时需要调用toString()方法转换类型
  • Android 13及以上版本需要额外申请POST_NOTIFICATIONS权限才能正常显示下载通知

修改后的完整可运行代码如下:

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_downloader/flutter_downloader.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';

Future main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 开启webview调试
  await InAppWebViewController.setWebContentsDebuggingEnabled(true);
  await FlutterDownloader.initialize(
    debug: true // 可选:发布版本设为false关闭控制台日志
  );
  // 同时适配低版本存储权限和高版本通知权限
  Map<Permission, PermissionStatus> statuses = await [
    Permission.storage,
    Permission.postNotifications,
  ].request();
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => new _MyAppState();
}

class _MyAppState extends State<MyApp> {
  InAppWebViewController? _webViewController;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('InAppWebView 下载示例'),
        ),
        body: Container(
          child: Column(children: <Widget>[
            Expanded(
              child: InAppWebView(
                // 替换旧的initialUrl参数
                initialUrlRequest: URLRequest(url: WebUri("http://ovh.net/files/1Mio.dat")),
                initialOptions: InAppWebViewGroupOptions(
                  crossPlatform: InAppWebViewOptions(
                    // 移除废弃的debuggingEnabled和useOnDownloadStart配置
                  ),
                ),
                onWebViewCreated: (InAppWebViewController controller) {
                  _webViewController = controller;
                },
                onDownloadStart: (controller, url) async {
                  print("onDownloadStart $url");
                  final taskId = await FlutterDownloader.enqueue(
                    // 转换WebUri为字符串
                    url: url.toString(),
                    savedDir: (await getExternalStorageDirectory())!.path,
                    showNotification: true, // Android端在状态栏显示下载进度
                    openFileFromNotification: true, // Android端点击通知打开下载的文件
                  );
                },
              ),
            ),
          ]),
        ),
      ),
    );
  }
}

内容的提问来源于stack exchange,提问作者lukman azhari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:36:01