|
@@ -4,7 +4,7 @@ import 'dart:html';
|
|
|
import 'dart:math';
|
|
|
import 'dart:typed_data';
|
|
|
import 'dart:ui';
|
|
|
-
|
|
|
+import 'dart:js' as js;
|
|
|
import 'package:flutter/material.dart' hide Image;
|
|
|
import 'package:flutter/services.dart';
|
|
|
import 'package:webview_demo/utils/helper.dart';
|
|
@@ -27,6 +27,11 @@ class _WebViewXPageState extends State<WebViewXPage> {
|
|
|
List<String> scriptsFromAssets = [];
|
|
|
Size get screenSize => MediaQuery.of(context).size;
|
|
|
|
|
|
+ int width = 0;
|
|
|
+ int height = 0;
|
|
|
+ int depth = 0;
|
|
|
+ List<String> images = [];
|
|
|
+
|
|
|
String _loadRandomImage(int width, int height) {
|
|
|
CanvasElement canvas = CanvasElement(width: width, height: height);
|
|
|
var ctx = canvas.context2D
|
|
@@ -45,6 +50,7 @@ class _WebViewXPageState extends State<WebViewXPage> {
|
|
|
|
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
|
+ _setPlatForm();
|
|
|
return Scaffold(
|
|
|
appBar: AppBar(
|
|
|
title: const Text('WebViewX Demo Page'),
|
|
@@ -115,24 +121,8 @@ class _WebViewXPageState extends State<WebViewXPage> {
|
|
|
DartCallback(
|
|
|
name: 'Dart_GetClipPlaneData',
|
|
|
callBack: (msg) {
|
|
|
- final data = jsonDecode(msg);
|
|
|
-
|
|
|
-
|
|
|
- final imageData = _loadRandomImage(300, 300);
|
|
|
-
|
|
|
-
|
|
|
- final result = {
|
|
|
- "ErrorCode": 1000,
|
|
|
- "WorldPoints": data["PointsList"],
|
|
|
- "ImagePoints": [
|
|
|
- {"X": 0.0, "Y": 1.0},
|
|
|
- {"X": 1.0, "Y": 1.0},
|
|
|
- {"X": 1.0, "Y": 0.0},
|
|
|
- {"X": 0.0, "Y": 0.0}
|
|
|
- ],
|
|
|
- "ImageData": imageData
|
|
|
- };
|
|
|
- return jsonEncode(result);
|
|
|
+ var api = _getApiHost();
|
|
|
+ return api!.callMethod('getClipPlaneData', [msg]);
|
|
|
},
|
|
|
),
|
|
|
DartCallback(
|
|
@@ -213,7 +203,7 @@ class _WebViewXPageState extends State<WebViewXPage> {
|
|
|
buildSpace(direction: Axis.vertical, flex: false, amount: 20.0),
|
|
|
createButton(
|
|
|
text: '切换模型 changeSurface (iframe 中)',
|
|
|
- onTap: _changeSurface,
|
|
|
+ onTap: _changeSurfaceFromShell,
|
|
|
),
|
|
|
];
|
|
|
}
|
|
@@ -351,4 +341,39 @@ class _WebViewXPageState extends State<WebViewXPage> {
|
|
|
height: direction == Axis.vertical ? amount : null,
|
|
|
);
|
|
|
}
|
|
|
+
|
|
|
+ void _setPlatForm() async {
|
|
|
+ js.context['invokeJs'] = (a, b) {
|
|
|
+ var datas = b.split("\$");
|
|
|
+
|
|
|
+ width = int.parse(datas[0]);
|
|
|
+
|
|
|
+ height = int.parse(datas[1]);
|
|
|
+
|
|
|
+ depth = int.parse(datas[2]);
|
|
|
+
|
|
|
+ var imageStr = datas[3];
|
|
|
+ images = imageStr.split("surface");
|
|
|
+ print(images);
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ js.JsObject? _getApiHost() {
|
|
|
+ if (js.context.hasProperty('FisShellApi')) {
|
|
|
+ final api = js.context['FisShellApi'] as js.JsObject;
|
|
|
+ return api;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Future<void> _changeSurfaceFromShell() async {
|
|
|
+ try {
|
|
|
+ await webviewController
|
|
|
+ .callJsMethod('changeSurface', [width, height, depth, ...images]);
|
|
|
+ } catch (e) {
|
|
|
+ showAlertDialog(
|
|
|
+ executeJsErrorMessage,
|
|
|
+ context,
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|