前端analysis | 知其所以然

Flutter 加载本地文件

2025-07-25

  • Flutter SDK: ^3.8.1
  • webview_flutter: ^4.0.7 ✅(是较新的版本)
  • 报告的问题:JavascriptMode 无法导入 / 使用。

✅ 正确使用 webview_flutter: ^4.x 的方式

webview_flutter 4.x 起,官方推荐的新用法如下 👇:

🔧 示例代码(适配 webview_flutter: ^4.0.7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import '../services/resource_manager.dart';

class TabWebView extends StatefulWidget {
final String tabName;
const TabWebView({required this.tabName, super.key});

@override
State<TabWebView> createState() => _TabWebViewState();
}

class _TabWebViewState extends State<TabWebView> {
late final WebViewController _controller;
bool _isReady = false;

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

Future<void> _setupWebView() async {
final path = await ResourceManager().getTabHtmlPath(widget.tabName);

_controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..loadFile(path) // 本地 HTML 文件路径
..setNavigationDelegate(NavigationDelegate(
onPageFinished: (_) => setState(() => _isReady = true),
));
}

@override
Widget build(BuildContext context) {
return _isReady
? WebViewWidget(controller: _controller)
: const Center(child: CircularProgressIndicator());
}
}

📌 注意点汇总:

项目 说明
✅ WebViewWidget 替代旧版 WebView(...) 构造函数方式。
✅ WebViewController 用于加载本地 HTML、设置 JS 模式、导航等。
✅ loadFile(path) 加载本地 HTML 文件,返回的是 file:// 路径。
initialUrl 已不推荐直接传本地路径(容易出现跨平台问题)。
NavigationDelegate 可用于处理加载完成、跳转等事件。

🔍 还要确保的内容

1. 在 Android 项目中添加网络权限:

android/app/src/main/AndroidManifest.xml 中添加:

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

2. 在 main.dart 初始化 WebView:

1
2
3
4
5
6
7
8
9
10
11
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

void main() {
WidgetsFlutterBinding.ensureInitialized();
if (Platform.isAndroid) {
WebView.platform = SurfaceAndroidWebView();
}
runApp(const MyApp());
}

✅ 结论

当前的 webview_flutter 版本(4.0.7)确实已经 弃用了旧的 WebView(...) 构造方式,请用 WebViewWidget + WebViewController 的组合方式来替代,否则 JavascriptMode 无法被正确使用或识别。

已为生成了一份完整的 Flutter 项目模板,包含以下功能:

✅ 功能特性:

  • ✅ 本地 Vue3 页面打包为静态资源
  • ✅ 动态加载并展示 Tab 页面(WebView 实现)
  • ✅ 支持远程检测更新并下载替换本地资源(模拟热更新机制)
  • ✅ 资源管理封装在 ResourceManager
  • ✅ Flutter WebView 支持本地文件加载

可以通过以下链接下载这个完整项目的压缩包:
👉 点击下载 Flutter+Vue3 热更新项目模板


📁 项目结构简要说明:

1
2
3
4
5
6
7
8
9
10
11
12
flutter_vue_tab_loader/
├── assets/
│ └── tabs/
│ ├── tab1.html
│ └── tab2.html
├── lib/
│ ├── main.dart
│ ├── tab_webview.dart
│ └── services/
│ └── resource_manager.dart
├── pubspec.yaml
└── ...

🔧 核心文件说明:

main.dart

入口文件,包含 Tab 控制界面和底部导航。

tab_webview.dart

通过 WebView 加载本地 HTML 页面。

resource_manager.dart

封装资源检测、加载和远程更新逻辑。


🧪 模拟热更新说明:

resource_manager.dart 中包含伪代码逻辑:

  • checkForUpdates():通过远程 JSON 文件检测是否有更新。
  • downloadResources():下载更新的 HTML 文件替换本地资源。

🚀 下一步操作建议:

  1. 使用 Flutter ≥ 3.13 版本运行
  2. 使用 webview_flutter 版本 4.0.7 或更高
  3. 本地打包的 Vue3 项目,产出 HTML,复制到 assets/tabs/
  4. 启动模拟更新服务或放置资源包 zip 于的服务器

在 VS Code 中使用 Android Studio 安装的 AVD(模拟器)是完全可行的。以下是详细步骤:


✅ 前提条件

已经:

  1. 安装了 Android Studio
  2. 配置了 Android SDK
  3. 在 Android Studio 中使用 AVD Manager 创建了一个或多个模拟器

🧭 步骤一:确保 VS Code 能找到 AVD 和 SDK

1. 设置环境变量(非常重要)

需要配置以下环境变量:

Windows:

打开系统环境变量设置,添加:

1
ANDROID_HOME = C:\Users\<的用户名>\AppData\Local\Android\Sdk

然后编辑 Path,添加以下两项(根据安装路径微调):

1
2
%ANDROID_HOME%\emulator
%ANDROID_HOME%\platform-tools
macOS/Linux:

~/.bashrc~/.zshrc 添加:

1
2
3
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/platform-tools

执行 source ~/.zshrc 以生效。


🧭 步骤二:在 VS Code 中运行模拟器

方法一:命令行启动

打开 VS Code 的终端(Terminal):

1
emulator -list-avds

会看到已安装的模拟器名称,例如:

1
Pixel_5_API_34

然后运行:

1
emulator -avd Pixel_5_API_34

模拟器将启动。


方法二:使用 Flutter 插件集成

  1. 确保已安装 VS Code 插件:

    • Flutter
    • Dart
  2. 在 VS Code 左下角点击 No Device 或当前设备名称 ➜ 会弹出设备列表。

  3. 如果模拟器未显示,可点击 Open Android Emulator(Flutter 插件提供)来手动启动。


🧭 步骤三:在 VS Code 运行 App 到模拟器

  1. 启动模拟器后,重新打开 VS Code 项目
  2. 点击顶部工具栏的 “Run” ▶ 或 F5 即可运行 App 到该模拟器上。

🛠️ 补充:检查 SDK 和环境配置

可以运行以下命令来确认:

1
flutter doctor

确保输出中没有关于 Android SDK 的错误。如果提示缺失,检查 ANDROID_HOME 和 SDK 路径配置。


使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏