gpt4 book ai didi

android - Flutter - 如何在 WebView 中下载文件?

转载 作者:行者123 更新时间:2023-12-03 02:39:40 24 4
gpt4 key购买 nike

我正在使用 flutter_webview_plugin: ^0.3.8但我对 webview_flutter: ^0.3.13 有同样的问题.

在 webview 中,我想使用一个在成功完成验证码时触发文件下载的网站。但是,我完成了验证码,没有任何 react ,没有下载。

Flutter 中是否有类似 webview 下载监听器(“webview.setDownloadListener”)的东西?我只需要这个用于Android。

如果没有,有没有办法从 Flutter 中的 webview 下载文件?

最佳答案

可以找到类似的问题 here !

你可以使用我的插件flutter_inappwebview ,这是一个 Flutter 插件,允许您添加内联 WebViews 或打开应用内浏览器窗口,并且有很多事件、方法和选项来控制 WebViews。它可以识别 Android(使用 setDownloadListener )和 iOS 平台上的可下载文件!

我在这里报告相同的answer我给了类似的问题:

为了能够识别可下载的文件,您需要设置 useOnDownloadStart: true选项,然后您可以收听onDownloadStart事件!

此外,例如,在 Android 上,您需要在 AndroidManifest.xml 中添加写入权限。文件:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

然后,您需要使用 permission_handler 请求许可插入。相反,为了有效地下载您的文件,您可以使用 flutter_downloader插入。

这是使用 http://ovh.net/files/ 的完整示例(特别是 http://ovh.net/files/1Mio.dat 作为 URL)来测试下载:

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();
await FlutterDownloader.initialize(
debug: true // optional: set false to disable printing logs to console
);
await Permission.storage.request();
runApp(new MyApp());
}

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

class _MyAppState extends State<MyApp> {
InAppWebViewController webView;

@override
void initState() {
super.initState();
}

@override
void dispose() {
super.dispose();
}

@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('InAppWebView Example'),
),
body: Container(
child: Column(children: <Widget>[
Expanded(
child: InAppWebView(
initialUrl: "http://ovh.net/files/1Mio.dat",
initialHeaders: {},
initialOptions: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
debuggingEnabled: true,
useOnDownloadStart: true
),
),
onWebViewCreated: (InAppWebViewController controller) {
webView = controller;
},
onLoadStart: (InAppWebViewController controller, String url) {

},
onLoadStop: (InAppWebViewController controller, String url) {

},
onDownloadStart: (controller, url) async {
print("onDownloadStart $url");
final taskId = await FlutterDownloader.enqueue(
url: url,
savedDir: (await getExternalStorageDirectory()).path,
showNotification: true, // show download progress in status bar (for Android)
openFileFromNotification: true, // click on notification to open downloaded file (for Android)
);
},
))
])),
),
);
}
}

在这里,如您所见,我也在使用 path_provider插件来获取我要保存文件的文件夹。

关于android - Flutter - 如何在 WebView 中下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57937664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com