Skip to content

Commit 4933db3

Browse files
FarazFaraz
authored andcommitted
fix controller refrence bug
1 parent 2608518 commit 4933db3

File tree

4 files changed

+41
-35
lines changed

4 files changed

+41
-35
lines changed

lib/src/data/datasources/flutter_3d_datasource_mobile.dart

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,23 @@ import 'package:webview_flutter/webview_flutter.dart';
66
class Flutter3DDatasource implements IFlutter3DDatasource {
77
final WebViewController? _webViewController;
88
final bool _activeGestureInterceptor;
9+
final String _viewerId;
910

1011
Flutter3DDatasource(
11-
[this._webViewController, this._activeGestureInterceptor = false]);
12+
this._viewerId, [
13+
this._webViewController,
14+
this._activeGestureInterceptor = false,
15+
]);
1216

1317
@override
1418
void playAnimation({String? animationName}) {
1519
animationName == null
1620
? executeCustomJsCode(
17-
"const modelViewer = document.querySelector(\"model-viewer\");"
21+
"const modelViewer = document.getElementById(\"$_viewerId\");"
1822
"modelViewer.play();",
1923
)
2024
: executeCustomJsCode(
21-
"const modelViewer = document.querySelector(\"model-viewer\");"
25+
"const modelViewer = document.getElementById(\"$_viewerId\");"
2226
"modelViewer.animationName = \"$animationName\";"
2327
"modelViewer.play();",
2428
);
@@ -27,15 +31,15 @@ class Flutter3DDatasource implements IFlutter3DDatasource {
2731
@override
2832
void pauseAnimation() {
2933
executeCustomJsCode(
30-
"const modelViewer = document.querySelector(\"model-viewer\");"
34+
"const modelViewer = document.getElementById(\"$_viewerId\");"
3135
"modelViewer.pause();",
3236
);
3337
}
3438

3539
@override
3640
void resetAnimation() {
3741
executeCustomJsCode(
38-
"const modelViewer = document.querySelector(\"model-viewer\");"
42+
"const modelViewer = document.getElementById(\"$_viewerId\");"
3943
"modelViewer.pause();"
4044
"modelViewer.currentTime = 0;"
4145
"modelViewer.play();",
@@ -45,7 +49,7 @@ class Flutter3DDatasource implements IFlutter3DDatasource {
4549
@override
4650
void stopAnimation() {
4751
executeCustomJsCode(
48-
"const modelViewer = document.querySelector(\"model-viewer\");"
52+
"const modelViewer = document.getElementById(\"$_viewerId\");"
4953
"modelViewer.pause();"
5054
"modelViewer.currentTime = 0;",
5155
);
@@ -55,7 +59,7 @@ class Flutter3DDatasource implements IFlutter3DDatasource {
5559
Future<List<String>> getAvailableAnimations() async {
5660
try {
5761
final result = await executeCustomJsCodeWithResult(
58-
"document.querySelector(\"model-viewer\").availableAnimations;",
62+
"document.getElementById(\"$_viewerId\").availableAnimations;",
5963
);
6064
String checkedResult;
6165
if (result is String) {
@@ -75,15 +79,15 @@ class Flutter3DDatasource implements IFlutter3DDatasource {
7579
@override
7680
void setTexture({required String textureName}) {
7781
executeCustomJsCode(
78-
"const modelViewer = document.querySelector(\"model-viewer\");"
82+
"const modelViewer = document.getElementById(\"$_viewerId\");"
7983
"modelViewer.variantName = \"$textureName\";",
8084
);
8185
}
8286

8387
@override
8488
Future<List<String>> getAvailableTextures() async {
8589
final result = await executeCustomJsCodeWithResult(
86-
"document.querySelector(\"model-viewer\").availableVariants;",
90+
"document.getElementById(\"$_viewerId\").availableVariants;",
8791
);
8892
String checkedResult;
8993
if (result is String) {
@@ -97,7 +101,7 @@ class Flutter3DDatasource implements IFlutter3DDatasource {
97101
@override
98102
void setCameraTarget(double x, double y, double z) {
99103
executeCustomJsCode(
100-
"const modelViewer = document.querySelector(\"model-viewer\");"
104+
"const modelViewer = document.getElementById(\"$_viewerId\");"
101105
"modelViewer.cameraTarget = \"${x}m ${y}m ${z}m\";",
102106
100,
103107
300,
@@ -108,7 +112,7 @@ class Flutter3DDatasource implements IFlutter3DDatasource {
108112
@override
109113
void resetCameraTarget() {
110114
executeCustomJsCode(
111-
"const modelViewer = document.querySelector(\"model-viewer\");"
115+
"const modelViewer = document.getElementById(\"$_viewerId\");"
112116
"modelViewer.cameraTarget = \"auto auto auto\";",
113117
100,
114118
300,
@@ -119,7 +123,7 @@ class Flutter3DDatasource implements IFlutter3DDatasource {
119123
@override
120124
void setCameraOrbit(double theta, double phi, double radius) {
121125
executeCustomJsCode(
122-
"const modelViewer = document.querySelector(\"model-viewer\");"
126+
"const modelViewer = document.getElementById(\"$_viewerId\");"
123127
"modelViewer.cameraOrbit = \"${theta}deg ${phi}deg $radius%\";",
124128
100,
125129
400,
@@ -130,7 +134,7 @@ class Flutter3DDatasource implements IFlutter3DDatasource {
130134
@override
131135
void resetCameraOrbit() {
132136
executeCustomJsCode(
133-
"const modelViewer = document.querySelector(\"model-viewer\");"
137+
"const modelViewer = document.getElementById(\"$_viewerId\");"
134138
"modelViewer.cameraOrbit = \"0deg 75deg 105%\" ;",
135139
100,
136140
400,

lib/src/data/datasources/flutter_3d_datasource_web.dart

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,26 @@
11
// ignore_for_file: avoid_web_libraries_in_flutter
2-
import 'package:flutter/services.dart';
32
import 'package:flutter_3d_controller/src/core/exception/flutter_3d_controller_exception.dart';
43
import 'package:flutter_3d_controller/src/data/datasources/i_flutter_3d_datasource.dart';
54
import 'dart:js' as js;
6-
import 'package:webview_flutter/webview_flutter.dart';
75

86
class Flutter3DDatasource implements IFlutter3DDatasource {
9-
final WebViewController? _webViewController;
7+
final String _viewerId;
108

119
Flutter3DDatasource(
12-
[this._webViewController, activeGestureInterceptor = false]);
10+
this._viewerId, [
11+
webViewController,
12+
activeGestureInterceptor = false,
13+
]);
1314

1415
@override
1516
void playAnimation({String? animationName}) {
1617
animationName == null
1718
? executeCustomJsCode(
18-
"const modelViewer = document.querySelector(\"model-viewer\");"
19+
"const modelViewer = document.getElementById(\"$_viewerId\");"
1920
"modelViewer.play();",
2021
)
2122
: executeCustomJsCode(
22-
"const modelViewer = document.querySelector(\"model-viewer\");"
23+
"const modelViewer = document.getElementById(\"$_viewerId\");"
2324
"modelViewer.animationName = \"$animationName\";"
2425
"modelViewer.play();",
2526
);
@@ -28,15 +29,15 @@ class Flutter3DDatasource implements IFlutter3DDatasource {
2829
@override
2930
void pauseAnimation() {
3031
executeCustomJsCode(
31-
"const modelViewer = document.querySelector(\"model-viewer\");"
32+
"const modelViewer = document.getElementById(\"$_viewerId\");"
3233
"modelViewer.pause();",
3334
);
3435
}
3536

3637
@override
3738
void resetAnimation() {
3839
executeCustomJsCode(
39-
"const modelViewer = document.querySelector(\"model-viewer\");"
40+
"const modelViewer = document.getElementById(\"$_viewerId\");"
4041
"modelViewer.pause();"
4142
"modelViewer.currentTime = 0;"
4243
"modelViewer.play();",
@@ -46,7 +47,7 @@ class Flutter3DDatasource implements IFlutter3DDatasource {
4647
@override
4748
void stopAnimation() {
4849
executeCustomJsCode(
49-
"const modelViewer = document.querySelector(\"model-viewer\");"
50+
"const modelViewer = document.getElementById(\"$_viewerId\");"
5051
"modelViewer.pause();"
5152
"modelViewer.currentTime = 0;",
5253
);
@@ -56,7 +57,7 @@ class Flutter3DDatasource implements IFlutter3DDatasource {
5657
Future<List<String>> getAvailableAnimations() async {
5758
try {
5859
final result = await executeCustomJsCodeWithResult(
59-
"document.querySelector(\"model-viewer\").availableAnimations;",
60+
"document.getElementById(\"$_viewerId\").availableAnimations;",
6061
);
6162
return result.map<String>((e) => e.toString()).toList();
6263
} catch (e) {
@@ -68,50 +69,47 @@ class Flutter3DDatasource implements IFlutter3DDatasource {
6869
@override
6970
void setTexture({required String textureName}) {
7071
executeCustomJsCode(
71-
"const modelViewer = document.querySelector(\"model-viewer\");"
72+
"const modelViewer = document.getElementById(\"$_viewerId\");"
7273
"modelViewer.variantName = \"$textureName\";",
7374
);
7475
}
7576

7677
@override
7778
Future<List<String>> getAvailableTextures() async {
7879
final result = await executeCustomJsCodeWithResult(
79-
"document.querySelector(\"model-viewer\").availableVariants;",
80+
"document.getElementById(\"$_viewerId\").availableVariants;",
8081
);
8182
return result.map<String>((e) => e.toString()).toList();
8283
}
8384

8485
@override
8586
void setCameraTarget(double x, double y, double z) {
86-
if (_webViewController != null) {
87-
throw PlatformException(code: '130', message: 'Mismatch platform usage');
88-
}
8987
executeCustomJsCode(
90-
"const modelViewer = document.querySelector(\"model-viewer\");"
88+
"const modelViewer = document.getElementById(\"$_viewerId\");"
9189
"modelViewer.cameraTarget = \"${x}m ${y}m ${z}m\";",
9290
);
9391
}
9492

9593
@override
9694
void resetCameraTarget() {
9795
executeCustomJsCode(
98-
"const modelViewer = document.querySelector(\"model-viewer\");"
96+
"const modelViewer = document.getElementById(\"$_viewerId\");"
9997
"modelViewer.cameraTarget = \"auto auto auto\";",
10098
);
10199
}
102100

103101
@override
104102
void setCameraOrbit(double theta, double phi, double radius) {
105103
executeCustomJsCode(
106-
"const modelViewer = document.querySelector(\"model-viewer\");"
104+
"const modelViewer = document.getElementById(\"$_viewerId\");"
107105
"modelViewer.cameraOrbit = \"${theta}deg ${phi}deg $radius%\";",
108106
);
109107
}
110108

111109
@override
112110
void resetCameraOrbit() {
113111
executeCustomJsCode(
114-
"const modelViewer = document.querySelector(\"model-viewer\");"
112+
"const modelViewer = document.getElementById(\"$_viewerId\");"
115113
"modelViewer.cameraOrbit = \"0deg 75deg 105%\" ;",
116114
);
117115
}

lib/src/data/datasources/i_flutter_3d_datasource.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ abstract class IFlutter3DDatasource {
4545
Future<dynamic> executeCustomJsCodeWithResult(String code);
4646

4747
///It will make specific instance of datasource per platform
48-
factory IFlutter3DDatasource(value, activeGestureInterceptor) =>
49-
Flutter3DDatasource(value, activeGestureInterceptor);
48+
factory IFlutter3DDatasource(
49+
viewerId, webViewController, activeGestureInterceptor) =>
50+
Flutter3DDatasource(
51+
viewerId, webViewController, activeGestureInterceptor);
5052
}

lib/src/widgets/flutter_3d_viewer.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ class _Flutter3DViewerState extends State<Flutter3DViewer> {
101101
_id = _utils.generateId();
102102
_controller = widget.controller ?? Flutter3DController();
103103
if (kIsWeb) {
104-
_controller.init(Flutter3DRepository(IFlutter3DDatasource(null, false)));
104+
_controller
105+
.init(Flutter3DRepository(IFlutter3DDatasource(_id, null, false)));
105106
}
106107
super.initState();
107108
}
@@ -161,6 +162,7 @@ class _Flutter3DViewerState extends State<Flutter3DViewer> {
161162
_controller.init(
162163
Flutter3DRepository(
163164
IFlutter3DDatasource(
165+
_id,
164166
value,
165167
widget.activeGestureInterceptor,
166168
),

0 commit comments

Comments
 (0)