Flutter动态脚本执行插件hetu_script的使用
Flutter动态脚本执行插件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上为我的项目点个星以支持我。
或者你可以买杯咖啡支持我:
示例代码
示例代码: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
更多关于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语言的所有特性,具体请参考其官方文档。
以上代码提供了一个基础的框架,你可以根据需要进行扩展和修改,以适应你的具体需求。