目录
禁止转载,侵权必究! update 2021.10.06
前言
为了在Fluter中使用动态编程语言,我们引入了flutter_js 插件项目。它会在flutter中内嵌一个QuickJS的Javascript解释引擎负责解决动态代码的解释和执行。
创建plugin项目
命令行执行以下命令:
flutter create --org cn.abilitygame -t plugin -i objc -a java
--platforms android,ios ability_jsruntime
在这里我们用参数 -t plugin来标识我们创建的是flutter的插件。
build一下项目:
cd ability_jsruntime/example
flutter build apk --target-platform android-arm,android-arm64 --split-per-abi
打开Android Studio,选择import project,一路选到项目中的example的android目录下,点击Open。
注意:是example目录下。
编写plugin-Android部分
TODO
配置项目
编辑flutter配置文件pubspec.yaml ,如下图:
点击Package get链接,执行命令, 获取到pub.dev上的官方插件包
编写main.dart
定义&初始化Javascript运行环境
String _jsResult = '';
JavascriptRuntime? flutterJs;
@override
void initState() {
super.initState();
flutterJs = getJavascriptRuntime();
}
定义app的UI
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('FlutterJS Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('JS Evaluate Result: $_jsResult\n'),
SizedBox(height: 20,),
Padding(padding: EdgeInsets.all(10), child: Text('点击绿色的勾'),),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text("Math.trunc(Math.random() * 100).toString();", style: TextStyle(fontSize: 12, fontStyle: FontStyle.italic, fontWeight: FontWeight.bold),),
)
],
),
),
floatingActionButton: FloatingActionButton(
backgroundColor: Colors.transparent,
child: Image.asset('images/gou.png'),
onPressed: () async {
try {
JsEvalResult jsResult = flutterJs!.evaluate(
"Math.trunc(Math.random() * 100).toString();");
setState(() {
_jsResult = jsResult.stringResult;
});
} on PlatformException catch (e) {
print('ERRO: ${e.details}');
}
},
),
),
);
}
真机调试
用数据线连接上Android手机,点击运行。