Skip to content

Commit cbd86db

Browse files
FarazFaraz
authored andcommitted
Merge branch 'refs/heads/dev'
2 parents 98e3487 + dcb0a8a commit cbd86db

12 files changed

+80
-45
lines changed

.flutter-plugins-dependencies

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"webview_flutter_wkwebview","path":"/Users/faraz/.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.14.0/","native_build":true,"dependencies":[]}],"android":[{"name":"webview_flutter_android","path":"/Users/faraz/.pub-cache/hosted/pub.dev/webview_flutter_android-3.16.8/","native_build":true,"dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"webview_flutter","dependencies":["webview_flutter_android","webview_flutter_wkwebview"]},{"name":"webview_flutter_android","dependencies":[]},{"name":"webview_flutter_wkwebview","dependencies":[]}],"date_created":"2024-10-07 02:35:16.696609","version":"3.22.3"}
1+
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"webview_flutter_wkwebview","path":"/Users/faraz/.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.14.0/","native_build":true,"dependencies":[]}],"android":[{"name":"webview_flutter_android","path":"/Users/faraz/.pub-cache/hosted/pub.dev/webview_flutter_android-3.16.8/","native_build":true,"dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"webview_flutter","dependencies":["webview_flutter_android","webview_flutter_wkwebview"]},{"name":"webview_flutter_android","dependencies":[]},{"name":"webview_flutter_wkwebview","dependencies":[]}],"date_created":"2024-10-14 18:08:53.321095","version":"3.22.3"}

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## v2.0.2
2+
3+
### Fixes
4+
* Fix multiple model controllers issue
5+
* Updated minimum SDK version.
6+
7+
18
## v2.0.1
29

310
### Fixes

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ Flutter3DViewer.obj(
176176

177177
```yaml
178178
dependencies:
179-
flutter_3d_controller: ^2.0.1
179+
flutter_3d_controller: ^2.0.2
180180
```
181181
182182
### `AndroidManifest.xml` (Android only)
@@ -233,7 +233,7 @@ Modify the `<head>` tag of your `web/index.html` to load the JavaScript, like so
233233
## Frequently Asked Questions
234234
- **The 3D model could not load** : First check the example, if models in examples loads, may be there is problem with your model or your model path.
235235
- **The animation list could not be retrieved** : Check if there are any special characters in the animation names that might cause a JSON encoding error.
236-
- **The 3D model could not load from url** : It might be due to [CORS] security restrictions. The server hosting the model file *must* send appropriate CORS response headers for viewer to be able to load the file. See [google/model-viewer#1015]
236+
- **The 3D model could not load from url** : It might be due to [CORS] security restrictions. The server hosting the model file *must* send appropriate CORS response headers for viewer to be able to load the file. See [google/model-viewer#1015](google/model-viewer#1015)
237237

238238
## Not working with a url on a real iOS device?
239239

example/assets/business_woman.glb

32.7 MB
Binary file not shown.

example/ios/Podfile.lock

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
PODS:
2+
- Flutter (1.0.0)
3+
- webview_flutter_wkwebview (0.0.1):
4+
- Flutter
5+
6+
DEPENDENCIES:
7+
- Flutter (from `Flutter`)
8+
- webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
9+
10+
EXTERNAL SOURCES:
11+
Flutter:
12+
:path: Flutter
13+
webview_flutter_wkwebview:
14+
:path: ".symlinks/plugins/webview_flutter_wkwebview/ios"
15+
16+
SPEC CHECKSUMS:
17+
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
18+
webview_flutter_wkwebview: 2a23822e9039b7b1bc52e5add778e5d89ad488d1
19+
20+
PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796
21+
22+
COCOAPODS: 1.15.2

ios/Flutter/Generated.xcconfig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ FLUTTER_APPLICATION_PATH=/Users/faraz/StudioProjects/flutter_3d_controller
44
COCOAPODS_PARALLEL_CODE_SIGN=true
55
FLUTTER_TARGET=lib/main.dart
66
FLUTTER_BUILD_DIR=build
7-
FLUTTER_BUILD_NAME=2.0.0
8-
FLUTTER_BUILD_NUMBER=2.0.0
7+
FLUTTER_BUILD_NAME=2.0.1
8+
FLUTTER_BUILD_NUMBER=2.0.1
99
EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386
1010
EXCLUDED_ARCHS[sdk=iphoneos*]=armv7
1111
DART_OBFUSCATION=false

ios/Flutter/flutter_export_environment.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ export "FLUTTER_APPLICATION_PATH=/Users/faraz/StudioProjects/flutter_3d_controll
55
export "COCOAPODS_PARALLEL_CODE_SIGN=true"
66
export "FLUTTER_TARGET=lib/main.dart"
77
export "FLUTTER_BUILD_DIR=build"
8-
export "FLUTTER_BUILD_NAME=2.0.0"
9-
export "FLUTTER_BUILD_NUMBER=2.0.0"
8+
export "FLUTTER_BUILD_NAME=2.0.1"
9+
export "FLUTTER_BUILD_NUMBER=2.0.1"
1010
export "DART_OBFUSCATION=false"
1111
export "TRACK_WIDGET_CREATION=true"
1212
export "TREE_SHAKE_ICONS=false"

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
}

0 commit comments

Comments
 (0)