寻求在Flutter中执行指定JS动态函数的方案(参考iOS实现)
Flutter 端实现动态 JavaScript 函数执行(对齐 iOS 逻辑)
实现思路
对应 iOS 中使用 JSContext 加载并执行动态 JS 函数的逻辑,Flutter 可以通过第三方 JS 引擎库实现相同功能,以下基于 flutter_js 包完成跨平台的 JS 函数执行。
步骤1:添加依赖
在项目的 pubspec.yaml 中引入依赖:
dependencies: flutter_js: ^0.7.0 # 可替换为最新版本
步骤2:实现核心执行方法
对应 iOS 的 evaluateJS 函数,实现 Dart 版本的动态 JS 执行逻辑:
import 'package:flutter_js/flutter_js.dart'; import 'dart:convert'; dynamic evaluateJS(String functionBody, Map<String, dynamic> argument) { // 初始化JS运行时 final jsRuntime = getJavascriptRuntime(); // 将JS函数绑定到上下文的func变量(和iOS逻辑一致) final defineFuncScript = "func = $functionBody"; jsRuntime.evaluate(defineFuncScript); // 调用函数并传入参数,将Dart Map转为JS对象 final callFuncScript = "func(${jsonEncode(argument)})"; final jsResult = jsRuntime.evaluate(callFuncScript); // 处理执行结果 if (jsResult.isError) { throw Exception("JS执行失败: ${jsResult.stringResult}"); } return jsResult.rawValue; }
步骤3:测试示例函数
针对你提供的 JS 函数进行测试:
void testJSFunction() { // 目标JS函数 final targetFunction = "function(pageContext) { return (pageContext['n2'] * pageContext['n3']) }"; // 传入的参数对象 final pageContext = {"n2": 5, "n3": 10}; try { final result = evaluateJS(targetFunction, pageContext); print("执行结果:$result"); // 输出:50 } catch (e) { print("错误:$e"); } }
补充说明
flutter_js提供了跨平台的 JS 运行时,支持 Android、iOS、Web 等平台,和 iOS 的JSContext逻辑对齐- 使用
jsonEncode将 Dart Map 转为 JS 可识别的对象字面量,确保参数传递正确 - 需捕获执行错误,避免因 JS 语法问题导致应用崩溃
内容的提问来源于stack exchange,提问作者chinna
相关产品推荐
相关产品推荐

