This commit is contained in:
ekibun
2020-08-08 18:00:21 +08:00
commit 17d2876e36
64 changed files with 5377 additions and 0 deletions

102
example/lib/test.dart Normal file
View File

@@ -0,0 +1,102 @@
/*
* @Description:
* @Author: ekibun
* @Date: 2020-07-18 23:28:55
* @LastEditors: ekibun
* @LastEditTime: 2020-08-08 17:38:48
*/
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_qjs/flutter_qjs.dart';
import 'code/editor.dart';
class TestPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => _TestPageState();
}
class _TestPageState extends State<TestPage> {
String code, resp;
int engine;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("JS 引擎功能测试"),
),
body: SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
children: [
FlatButton(child: Text("初始化引擎"), onPressed: () async {
if ((engine?? 0) != 0) return;
engine = await FlutterJs.initEngine();
// dart 函数回调
FlutterJs.methodHandler = (String method, List arg) async {
switch (method) {
case "delay":
await Future.delayed(Duration(milliseconds: arg[0]));
return;
case "http":
Response response = await Dio().get(arg[0]);
return response.data;
default:
}
};
}),
FlatButton(child: Text("运行"), onPressed: () async {
if ((engine?? 0) == 0) {
print("请先初始化引擎");
return;
}
try {
resp = await FlutterJs.evaluate(code ?? '', "<eval>");
} catch(e) {
resp = e.toString();
}
setState(() {
code = code;
});
}),
FlatButton(child: Text("释放引擎"), onPressed: () async {
if ((engine?? 0) == 0) return;
await FlutterJs.close();
engine = 0;
}),
],
),
),
Container(
padding: const EdgeInsets.all(12),
color: Colors.grey.withOpacity(0.1),
constraints: BoxConstraints(minHeight: 200),
child: CodeEditor(
onChanged: (v) {
code = v;
},
),
),
SizedBox(height: 16),
Text("运行结果:"),
SizedBox(height: 16),
Container(
width: double.infinity,
padding: const EdgeInsets.all(12),
color: Colors.green.withOpacity(0.05),
constraints: BoxConstraints(minHeight: 100),
child: Text(resp ?? ''),
),
],
),
),
);
}
}