flutter 调用本地HTML里的方法
时间: 2024-10-18 11:19:53 浏览: 9
在 Flutter 中,如果你想要在本地 HTML 文件中调用 Dart 代码的方法,通常的做法是利用 `webview_flutter` 插件。这个插件允许你在 Flutter 应用中嵌入一个 WebView 组件,该组件可以加载 HTML、CSS 和 JavaScript。
首先,你需要将 `webview_flutter` 添加到你的 `pubspec.yaml` 的依赖中:
```yaml
dependencies:
webview_flutter: ^2.0.4
```
然后,在 Flutter 界面中创建 WebView,并允许它执行 JavaScript:
```dart
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
class MyWebView extends StatefulWidget {
@override
_MyWebViewState createState() => _MyWebViewState();
}
class _MyWebViewState extends State<MyWebView> {
String _htmlContent = '<script src="path_to_your_script.js"></script>';
// 允许JavaScript交互
final List<JavascriptChannel> _channels = [
JavascriptChannel(name: 'my_channel', onMessageReceived: (message) {
// 处理从 JS 传递过来的消息
print('Received message from JS: $message');
}),
];
@override
Widget build(BuildContext context) {
return WebView(
initialUrl: 'file:///android_asset/my_html.html', // 或者相对路径
javascriptMode: JavascriptMode.unrestricted,
javascriptChannels: _channels,
// ...其他 WebView 配置
);
}
}
```
在你的 HTML 文件 (`my_html.html`) 中,你可以编写 JavaScript 代码,通过 `window.my_channel.postMessage()` 来发送消息到 Dart 侧处理:
```html
<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
window.my_channel = new BroadcastChannel('my_channel');
function callDartMethod(data) {
my_channel.postMessage(data);
}
</script>
<!-- Your HTML content here -->
</body>
</html>
```
当你在 HTML 中触发 `callDartMethod` 函数时,它会通过 `onMessageReceived` 回调在 Flutter 代码里被调用。
阅读全文