You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:30:22