Flutter虚拟机运行插件runevm_fl的使用
Flutter虚拟机运行插件runevm_fl的使用
runevm_fl
适用于Flutter的RuneVM插件。
示例应用是一个带有语音控制的2048游戏。
开始使用
在pubspec.yaml
文件中添加RuneVM插件
dependencies:
flutter:
sdk: flutter
runevm_fl: ^0.3.0
加载并运行您的Rune文件
部署
Future<bool> RunevmFl.load(Uint8List runeBytes)
读取manifest
Future<dynamic> RunevmFl.manifest
使用输入字节运行Rune
Future<String> RunevmFl.runRune(Uint8List input)
Rune绑定实现
完整实现见 main.dart
import 'package:runevm_fl/runevm_fl.dart';
class RunMyRune {
double _input = 0;
String? _output;
Future<void> _loadRune() async {
try {
// 从资源加载Rune到内存
ByteData bytes = await rootBundle.load('assets/sine.rune');
bool loaded =
await RunevmFl.load(bytes.buffer.asUint8List()) ?? false;
print("Rune deployed:");
if (loaded) {
// 读取带有功能的manifest
String manifest = (await RunevmFl.manifest).toString();
print("Manifest loaded: $manifest");
}
} on Exception {
print('Failed to init rune');
}
setState(() {
_loaded = true;
});
}
void _runRune() async {
try {
Random rand = Random();
_input = rand.nextDouble() * 2 * pi;
// 将输入转换为表示浮点数的4个字节(参见assets/Runefile)
Uint8List inputBytes = Uint8List(4)
..buffer.asByteData().setFloat32(0, _input, Endian.little);
// 使用输入字节运行Rune
_output = await RunevmFl.runRune(inputBytes);
setState(() {});
} on Exception {
print('Failed to run rune');
}
}
}
锻造部署实现
第一步是初始化锻造并部署模型
import 'package:runevm_fl/runevm_fl.dart';
void loadForge() async {
final answer = await Forge.forge({
"deploymentId": "26", // 插入deploymentId
"apiKey": "{apiKey from forge}", // 插入apiKey
"baseURL": "https://dev-forge.hotg.ai", // 插入url
"telemetry": {
"baseURL": "https://dev-telemetry.hotg.ai", // 插入url
}
});
setState(() {
_capabilities = answer;
});
}
运行推理时,只需提供输入到 Forge.predict(Uint8List input)
void _runInference() async {
Uint8List inputData = getInputData();
final data = await Forge.predict([inputData]);
final out = (data is String) ? json.decode(data) : data;
doSomethingWithOutput(out);
}
Android
无需额外配置。
iOS
如果您正在创建一个新应用,首先运行:
flutter run
以生成podfile。
最低iOS版本应至少为12.1以兼容插件:
在XCode > Runner > General > Deployment info中设置此选项。
对于版本<0.3.0,需要禁用Bitcode,要么针对runevm_fl目标:
在XCode > Pods > Targets > runevm_fl > Build Settings > Enable Bitcode > 设置为’No’
或直接在Podfile中添加:
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
## 添加以下3行到你的podfile
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO'
end
end
end
运行它
flutter run
示例代码
// [@dart](/user/dart)=2.9
import 'package:flutter/material.dart';
import 'package:runevm_fl/runevm_fl_web.dart';
import 'dart:async';
import '2048/home_mobile.dart' if (dart.library.js) '2048/home_web.dart';
import 'package:runevm_fl/runevm_fl.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
print(RunevmFl.getLogs());
}
[@override](/user/override)
Widget build(BuildContext context) {
return Container();
}
}
更多关于Flutter虚拟机运行插件runevm_fl的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter虚拟机运行插件runevm_fl的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
runevm_fl
是一个用于在 Flutter 应用中运行虚拟机的插件。它允许你在 Flutter 中嵌入一个虚拟机环境,执行特定平台的代码或脚本。这个插件通常用于需要在 Flutter 应用中运行自定义脚本、虚拟机或解释器的场景。
以下是如何在 Flutter 项目中使用 runevm_fl
插件的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 runevm_fl
插件的依赖:
dependencies:
flutter:
sdk: flutter
runevm_fl: ^<version> # 请替换为最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入插件
在你的 Dart 文件中导入 runevm_fl
插件:
import 'package:runevm_fl/runevm_fl.dart';
3. 初始化虚拟机
在使用虚拟机之前,你需要初始化它。通常可以在 initState
或 didChangeDependencies
方法中进行初始化:
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
RuneVM? _runeVM;
[@override](/user/override)
void initState() {
super.initState();
_initializeRuneVM();
}
Future<void> _initializeRuneVM() async {
_runeVM = RuneVM();
await _runeVM!.initialize();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('RuneVM Example'),
),
body: Center(
child: Text('RuneVM is initialized'),
),
),
);
}
}
4. 运行脚本
在虚拟机初始化之后,你可以运行自定义脚本或代码。例如:
Future<void> _runScript() async {
if (_runeVM == null) return;
String script = '''
function add(a, b) {
return a + b;
}
add(2, 3);
''';
dynamic result = await _runeVM!.runScript(script);
print('Script result: $result');
}
5. 释放资源
在应用退出或不再需要虚拟机时,记得释放资源:
[@override](/user/override)
void dispose() {
_runeVM?.dispose();
super.dispose();
}