Flutter动态脚本执行插件hetu_script的使用

Flutter动态脚本执行插件hetu_script的使用

hetu script

Hetu Script

一款用Dart编写的轻量级脚本语言,用于嵌入到Flutter应用中。

简体中文页面

简介

Hetu 是一款完全用Dart编写并嵌入到Flutter应用中的轻量级脚本语言。我们的目标是让Flutter应用和游戏具备热修复和脚本能力。

文档 中文文档

特性

  • 现代编程语言语法类似于TypeScript/Kotlin/Swift,学习成本极低。
  • 完整的脚本语言功能:类面向对象编程(OOP)、原型面向对象编程(OOP)、函数式编程(FP)、模块、错误处理等。
  • 可运行在Flutter支持的所有平台上,包括Web浏览器和桌面环境。
  • 绑定极其简单,在脚本中调用Dart函数或在Dart中调用脚本函数只需一行代码。

你可以在在线的playground中测试Hetu脚本。

快速开始

评估Hetu脚本字符串

import 'package:hetu_script/hetu_script.dart';

void main() {
  final hetu = Hetu();
  hetu.init();
  hetu.eval(r'''
    var ht = {
      name: 'Hetu',
      greeting: () {
        print('Greetings from ${this.name}!')
      }
    }
    ht.greeting()
  ''');
}

将Map传递给脚本,并修改它

import 'package:hetu_script/hetu_script.dart';

void main() {
  final hetu = Hetu();
  hetu.init(externalFunctions: {
    'hello': () => {'greetings': 'greetings from Dart!'},
  });
  var hetuValue = hetu.eval(r'''
      external fun hello
      var dartValue = hello()
      dartValue['reply'] = 'Hi, this is Hetu.'
      dartValue // the script will return the value of it's last expression
      ''');

  print('hetu value: $hetuValue');
}

你可以通过文档了解更多关于语法绑定的信息。

IDE扩展

如果你使用的是VS Code,可以下载这个扩展来获取基本的高亮和Dart绑定代码片段。

命令行工具

我们有一个命令行REPL工具用于快速测试。你可以通过以下命令激活:

dart pub global activate hetu_script_dev_tools

然后你可以在计算机上的任何目录中使用命令行工具 hetu

更多关于命令行工具的信息可以通过输入 hetu -h 查看。

如果没有提供参数,则进入REPL模式。

在REPL模式下,你输入的每个表达式都会被立即求值并打印出来。

如果你想在REPL模式下写多行代码,可以使用 \ 结束一行。

>>>var a = 42
null // repl print
>>>a
42 // repl print
>>>fun meaning {\
return a }
null // repl print
>>>meaning
meaning() -> any // repl print
>>>hello()
42 // repl print

你可以通过访问官方文档了解更多关于 pub global activate 的信息。

讨论组

Discord: https://discord.gg/aJedwcRPr8

中文交流可以加QQ群:812529118

支持

你可以在GitHub上为我的项目点个星以支持我。

或者你可以买杯咖啡支持我:

Buy me a coffee


示例代码

示例代码:example/example.dart

import 'package:hetu_script/hetu_script.dart';

void main() {
  final hetu = Hetu();
  hetu.init(externalFunctions: {
    'hello': () => {'greetings': 'greetings from Dart!'},
  });
  var hetuValue = hetu.eval(r'''
      external fun hello
      var dartValue = hello()
      dartValue['reply'] = 'Hi, this is Hetu.'
      dartValue // the script will return the value of it's last expression
      ''');

  print('hetu value: $hetuValue');
}

更多关于Flutter动态脚本执行插件hetu_script的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter动态脚本执行插件hetu_script的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用hetu_script插件来实现动态脚本执行的示例代码。hetu_script是一个强大的Flutter插件,它允许你在运行时执行Dart脚本。

1. 添加依赖

首先,你需要在你的pubspec.yaml文件中添加hetu_script的依赖:

dependencies:
  flutter:
    sdk: flutter
  hetu_script: ^最新版本号 # 请替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

2. 初始化Hetu

在你的Flutter应用中,你需要初始化Hetu实例。这通常在你的主文件(如main.dart)中进行。

import 'package:flutter/material.dart';
import 'package:hetu_script/hetu_script.dart';

void main() {
  // 初始化Hetu引擎
  final hetu = Hetu();

  runApp(MyApp(hetu: hetu));
}

class MyApp extends StatelessWidget {
  final Hetu hetu;

  MyApp({required this.hetu});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Hetu Script Demo'),
        ),
        body: Center(
          child: HetuScriptRunner(hetu: hetu),
        ),
      ),
    );
  }
}

3. 创建HetuScriptRunner组件

接下来,你需要创建一个组件来执行Hetu脚本。这个组件将允许你输入Dart脚本,并显示执行结果。

import 'package:flutter/material.dart';
import 'package:hetu_script/hetu_script.dart';

class HetuScriptRunner extends StatefulWidget {
  final Hetu hetu;

  HetuScriptRunner({required this.hetu});

  @override
  _HetuScriptRunnerState createState() => _HetuScriptRunnerState();
}

class _HetuScriptRunnerState extends State<HetuScriptRunner> {
  final _controller = TextEditingController();
  String _result = '';

  void _executeScript() async {
    setState(() {
      _result = 'Executing...';
    });

    try {
      final result = await widget.hetu.eval(code: _controller.text);
      setState(() {
        _result = 'Result: $result';
      });
    } catch (e) {
      setState(() {
        _result = 'Error: ${e.toString()}';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Expanded(
            child: TextField(
              controller: _controller,
              maxLines: 10,
              decoration: InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'Enter Dart Script',
              ),
            ),
          ),
          SizedBox(height: 16),
          ElevatedButton(
            onPressed: _executeScript,
            child: Text('Execute Script'),
          ),
          SizedBox(height: 16),
          Text(_result, style: TextStyle(fontSize: 18)),
        ],
      ),
    );
  }
}

4. 运行应用

现在,你可以运行你的Flutter应用。在应用中,你将看到一个文本字段用于输入Dart脚本,一个按钮用于执行脚本,以及一个文本区域用于显示脚本执行的结果或错误信息。

注意事项

  • hetu_script插件执行的是Dart脚本,因此它受限于Dart语言的安全性和沙盒机制。
  • 确保你信任执行的脚本内容,避免执行不受信任的脚本,以防止潜在的安全风险。
  • hetu_script可能不支持Dart语言的所有特性,具体请参考其官方文档。

以上代码提供了一个基础的框架,你可以根据需要进行扩展和修改,以适应你的具体需求。

回到顶部