9

重要提示 - 我希望此功能仅适用于移动应用程序,而不适用于 Flutter Web。

我在颤振应用程序中保存网站时遇到了一些问题。我已经尝试对 inappwebview 使用缓存方法和 savewebarchive 方法。该方法的问题在于它没有保存网站的全部内容。它只保存 HTML 和 CSS 文件。

我想用 HTML、CSS、js、字体文件、图像等所有内容保存整个网站,并将其存储在 Flutter 应用程序中。我已经浏览了一些插件,但它们都没有帮助。

我正在寻找与 httrack 相同的功能。

任何正确的方向都会被应用。

4

4 回答 4

3

这是您想要离线流行,流行,赢的一个例子!游戏。

支持离线模式需要大致如下:

  1. 确定将哪些资源放入缓存以供离线使用。
  2. 创建一个服务工作者来准备这些资源的缓存。
  3. 注册服务工作者,以便可以从离线缓存中处理后续请求(以防网络中断)。
  4. 在该服务工作者中,使用 URL 预填充离线缓存,并处理来自缓存或网络的适当获取请求。
  5. 确保服务工作者检测到应用程序或静态资产的更改,并将新版本放入缓存中。

要执行上述步骤,您将需要此包Progressive Web App (PWA) for Dart

应用程序中的更改将pwa包导入您的pubspec.yaml

dependencies:
  pwa: ^0.1.2

运行后pub get,将客户端添加到您的web/main.dart

import ‘package:pwa/client.dart’ as pwa;
main() {
  // register PWA ServiceWorker for offline caching.
  new pwa.Client();
}

自动生成的渐进式 Web 应用程序 pwa 包提供了处理上述列表中的项目 1-2 和 4-5 的代码生成。为确保正确使用缓存(填充缓存和使缓存无效),请使用以下工作流程:

  1. 使用所有的静态资源构建您的 Web 应用程序build/web

pub build

  1. Runpwa的代码生成器扫描(或重新扫描)您的离线资产:

pub run pwa

  1. 再次构建您的项目,因为您需要pwa.dart编译您的(新)文件:

pub build

这些步骤会生成一个名为的文件lib/pwa/offline_urls.g.dart,其中包含要缓存的脱机 URL 列表。.g.dart扩展名表示该文件已生成,可能会被 的代码生成器工具自动覆盖pwa

在第一次运行时,此工作流会生成web/pwa.dar包含具有合理默认值的 Service Worker 的 t 文件。您可以修改此文件(例如自定义离线 URL 或使用高级 API),因为代码生成器不会再次更改或覆盖它。

所有这些步骤都来自这篇文章,你可以在那里找到更好的细节。

于 2021-10-28T22:19:07.923 回答
2

如果没有现有的 Flutter 插件,最快的方法之一是简单地使用 Android 和 iOS 插件,并围绕它编写一个简单的 Flutter 包装器。

对于 android,您可能对此链接感兴趣。对于 iOS,此链接可能会有所帮助。这些链接只是示例 - 您可以在 Google 上进一步搜索以找到更多适合您需求的插件。(例如,搜索android kotlin save whole website等)。

在 android 和 ios 上找到解决方案后,您可以非常轻松地开发一个 Flutter 插件,以便让您的 Flutter 代码调用那些 Android/iOS 代码段。我个人建议在 Android 上使用 Kotlin,在 iOS 上使用 Swift,并且不要忘记使用pigeon进行代码生成。

顺便说一句,如果你想用 Android/iOS 代码而不是 Flutter 代码来绘制一些 UI,你可能还对平台视图感兴趣。

于 2021-11-08T09:33:33.543 回答
0

既然你问了一些方向:

如果您已经知道要离线查看哪些网站,您可以使用 HTTrack 下载它们并捆绑在 Flutter 应用程序中生成的文件。

如果你希望能够动态下载网站,目前还没有 Dart/Flutter 包可以为你做网站翻录。您要么必须自己实现它,要么可能制作一个使用已经制作的程序(例如 HTTrack)的 API,然后将文件发送到您的应用程序。

于 2021-11-04T13:45:26.813 回答
-1

您可以使用 webview_flutter 和 html 插件将整个网站下载为代码,将其存储为字符串变量,然后您可以使用 webview_flutter 打开它。

于 2021-10-26T13:10:52.237 回答