Flutter JavaScript执行插件flutter_js_engine的使用
Flutter JavaScript执行插件flutter_js_engine的使用
JsEngine 是一个基于 webview_flutter 插件内置的 JS 运行时的 JavaScript 扩展。它允许动态执行 JavaScript 脚本,并且相比第三方库如 flutter_js 更加轻量。它不需要额外的大小,支持 JS HTTP 网络请求、SP 数据持久化和 Promise。由于它是基于 WebView 内核实现的,因此可以通过 Google 和 AppStore 的审核。
HTTP 请求
JsEngine 提供了内置的网络请求接口,并支持 Promise 语法。
JS HTTP 请求示例
HttpSender.sendRequest("https://www.baidu.com/s", null, null, {
"wd": "%E6%97%A5%E5%8E%86"
}, "GET").then((value) => {
console.log("sendRequest ok: ", value);
run_callback(value); // 返回数据到 Dart 层
});
数据存储
JsEngine 支持以键值对形式进行持久化数据存储,并且也支持 Promise 语法。
JS 存储和检索数据示例
SpStorage.set("ijk", "oh yep");
SpStorage.get("ijk").then((value) => {
console.log("SpStorage got ijk promise value:", value);
});
参数传递
⚠️ JsEngine 使用带有 run_
前缀的变量作为内置全局变量。
接口通过 params
传递参数,这些参数可以在 JS 脚本中通过内置的 run_params
访问:
Dart 代码
JsEngine.runCode('console.log("run_params:", run_params);', params: 'dadada');
JS 代码
console.log("run_params:", run_params);
运行时信息
获取 JS 运行环境信息:
Dart 代码
JsEngine.runCode('console.log("run_info:", run_info["system"]);');
支持的信息包括:
字段名 | 定义 |
---|---|
system | 系统 |
system_ver | 系统版本 |
locale | 语言代码 |
engine_ver | 引擎版本 |
预加载全局库
默认情况下,JsEngine.runCode()
在隔离环境中运行,但 JsEngine 也支持全局模式:
Dart 代码
JsEngine.loadLib('');
代理日志输出
代理日志允许 JS 日志输出到 Dart 层:
Dart 代码
JsEngine.setLogProxy((tag, log) {
print('$tag: $log');
});
JS 代码
run_log("hello world!");
完整示例
JsEngine.setDebugMode(true);
JsEngine.setLogProxy((tag, log) {
print(log);
});
JsEngine.runCode('''
console.log("run_params:", run_params);
console.log("run_info:", run_info['system']);
HttpSender.sendRequest("https://www.baidu.com/s", null, null, {
"wd": "%E6%97%A5%E5%8E%86"
}, "GET").then((value) => {
console.log("sendRequest ok: ", value);
run_callback(value);
});
SpStorage.set("abc", "என்ன Yogi இப்படி சொல்லிட்ட |");
SpStorage.set("ijk", "oh yep");
SpStorage.get("abc").then((value) => {
console.log("SpStorage got abc promise value:", value);
});
SpStorage.get("ijk").then((value) => {
console.log("SpStorage got ijk promise value:", value);
});
''', params: 'dadada', callback: (json) {
logI('JsEngine-console runJsCode res: $json');
}).then((json) {
logI('JsEngine-console future runJsCode res: $json');
});
更多关于Flutter JavaScript执行插件flutter_js_engine的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter JavaScript执行插件flutter_js_engine的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_js_engine
是一个 Flutter 插件,它允许你在 Flutter 应用中执行 JavaScript 代码。这个插件基于 QuickJS
JavaScript 引擎,提供了在 Flutter 应用中嵌入和执行 JavaScript 的能力。以下是如何使用 flutter_js_engine
插件的详细步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 flutter_js_engine
依赖:
dependencies:
flutter:
sdk: flutter
flutter_js_engine: ^0.0.6 # 请检查最新版本
然后运行 flutter pub get
来获取依赖。
2. 初始化 FlutterJsEngine
在你的 Dart 代码中,首先需要导入 flutter_js_engine
并初始化 FlutterJsEngine
:
import 'package:flutter_js_engine/flutter_js_engine.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 JavaScript 引擎
final jsEngine = FlutterJsEngine();
// 执行 JavaScript 代码
final result = jsEngine.evaluate('1 + 2');
print('Result: ${result.result}'); // 输出: Result: 3
// 释放资源
jsEngine.dispose();
}
3. 执行 JavaScript 代码
你可以使用 evaluate
方法来执行 JavaScript 代码。evaluate
返回一个 JsEvalResult
对象,其中包含执行结果和可能的错误信息。
final result = jsEngine.evaluate('"Hello, " + "World!"');
print('Result: ${result.result}'); // 输出: Result: Hello, World!
4. 错误处理
如果 JavaScript 代码执行时发生错误,JsEvalResult
会包含错误信息:
final result = jsEngine.evaluate('undefinedVariable');
if (result.error != null) {
print('Error: ${result.error}');
}
5. 释放资源
当你不再需要 FlutterJsEngine
实例时,应该调用 dispose
方法来释放资源:
jsEngine.dispose();