3D 模型查看器未加载
3D Model viewer not loading
我正在使用一个名为 Model Viewer 的 flutter 库 ModelViewer
这是一个非常好的插件,在我开发的那个应用程序版本中非常有用。我是这样使用它的:
ModelViewer(
backgroundColor: Colors.black,
src: 'assets/skull.glb',
alt: "A 3D model of a skull",
cameraControls: true,
),
.glb 模型在 assets 文件夹中。
我的flutter是最新的稳定版,也是这个插件的版本。
奇怪的是,当我构建应用程序包并将应用程序发布到 google play 时,当我使用模型查看器导航到页面时,小部件从未加载。
我只能看到白屏。
dev 版本和 release 都在物理设备上测试 android 10.
我不确定如何调试它,但很乐意提供任何建议。无法从原始存储库中找到任何解决方案。
更新
这是 logcat 的错误:
2021-04-07 21:42:49.592 8121-8147/? E/flutter: [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: NoSuchMethodError: The getter 'address' was called on null.
Receiver: null
Tried calling: address
#0 _ModelViewerState.build.<anonymous closure> (package:model_viewer/src/model_viewer.dart:127)
#1 _ModelViewerState.build.<anonymous closure> (package:model_viewer/src/model_viewer.dart:125)
#2 _WebViewState._onWebViewPlatformCreated (package:webview_flutter/webview_flutter.dart:375)
#3 CupertinoWebView.build.<anonymous closure> (package:webview_flutter/src/webview_cupertino.dart:35)
#4 AndroidViewController.create (package:flutter/src/services/platform_views.dart:746)
<asynchronous suspension>
#5 RenderAndroidView._sizePlatformView (package:flutter/src/rendering/platform_view.dart:195)
<asynchronous suspension>
谢谢。
找到了这个问题的解决方案。
当您使用模型查看器时,您需要添加:
<uses-permission android:name="android.permission.INTERNET"/>
到您的 AndroidManifest.xml
文件。
这样Widget就可以模拟模型了。
通常它在本地服务器 a.k.a localhost 上执行,但是当它发布时,这会改变。
希望有人会发现它有用。
是的,您需要 internet permissions,
图书馆 (in model_viewer.dart
) 使用 _proxy = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
创建了一个本地服务器。 WebView 连接到此服务器并显示模型。我们用 HttpServer.bind
创建的 Web 服务器提供了一些文件:一个 html 文件、一个 javascript 文件、模型和 favicon.ico。
代码不会根据调试/发布而改变,但实际上是因为调试模式构建自动具有允许互联网访问的权限,但 Android 发布版本没有。因此 WebView 仅在调试时成功连接到服务器。我只是从 here 发现了这个用于调试构建的自动互联网权限。因此,构建发布应用程序(不上传到 Play 商店)应该也能解决这个问题。
大多数人不会发现这是一个问题,因为他们的应用在他们开始添加 3D 模型时需要互联网许可,或者他们正在使用远程 3d 模型。我已经回复了关于此的 GitHub issue 并建议添加对 README 的权限。您可能有兴趣创建关于回购的 PR。 :)
我正在使用一个名为 Model Viewer 的 flutter 库 ModelViewer
这是一个非常好的插件,在我开发的那个应用程序版本中非常有用。我是这样使用它的:
ModelViewer(
backgroundColor: Colors.black,
src: 'assets/skull.glb',
alt: "A 3D model of a skull",
cameraControls: true,
),
.glb 模型在 assets 文件夹中。 我的flutter是最新的稳定版,也是这个插件的版本。
奇怪的是,当我构建应用程序包并将应用程序发布到 google play 时,当我使用模型查看器导航到页面时,小部件从未加载。
我只能看到白屏。
dev 版本和 release 都在物理设备上测试 android 10.
我不确定如何调试它,但很乐意提供任何建议。无法从原始存储库中找到任何解决方案。
更新
这是 logcat 的错误:
2021-04-07 21:42:49.592 8121-8147/? E/flutter: [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: NoSuchMethodError: The getter 'address' was called on null.
Receiver: null
Tried calling: address
#0 _ModelViewerState.build.<anonymous closure> (package:model_viewer/src/model_viewer.dart:127)
#1 _ModelViewerState.build.<anonymous closure> (package:model_viewer/src/model_viewer.dart:125)
#2 _WebViewState._onWebViewPlatformCreated (package:webview_flutter/webview_flutter.dart:375)
#3 CupertinoWebView.build.<anonymous closure> (package:webview_flutter/src/webview_cupertino.dart:35)
#4 AndroidViewController.create (package:flutter/src/services/platform_views.dart:746)
<asynchronous suspension>
#5 RenderAndroidView._sizePlatformView (package:flutter/src/rendering/platform_view.dart:195)
<asynchronous suspension>
谢谢。
找到了这个问题的解决方案。
当您使用模型查看器时,您需要添加:
<uses-permission android:name="android.permission.INTERNET"/>
到您的 AndroidManifest.xml
文件。
这样Widget就可以模拟模型了。
通常它在本地服务器 a.k.a localhost 上执行,但是当它发布时,这会改变。
希望有人会发现它有用。
是的,您需要 internet permissions,
图书馆 (in model_viewer.dart
) 使用 _proxy = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
创建了一个本地服务器。 WebView 连接到此服务器并显示模型。我们用 HttpServer.bind
创建的 Web 服务器提供了一些文件:一个 html 文件、一个 javascript 文件、模型和 favicon.ico。
代码不会根据调试/发布而改变,但实际上是因为调试模式构建自动具有允许互联网访问的权限,但 Android 发布版本没有。因此 WebView 仅在调试时成功连接到服务器。我只是从 here 发现了这个用于调试构建的自动互联网权限。因此,构建发布应用程序(不上传到 Play 商店)应该也能解决这个问题。
大多数人不会发现这是一个问题,因为他们的应用在他们开始添加 3D 模型时需要互联网许可,或者他们正在使用远程 3d 模型。我已经回复了关于此的 GitHub issue 并建议添加对 README 的权限。您可能有兴趣创建关于回购的 PR。 :)