3D 模型查看器未加载
Posted
技术标签:
【中文标题】3D 模型查看器未加载【英文标题】:3D Model viewer not loading 【发布时间】:2021-07-03 16:00:50 【问题描述】:我正在使用一个名为 Model Viewer ModelViewer 的颤振库
这是一个非常不错的插件,在我的开发版该应用程序上就像魅力一样。我是这样使用它的:
ModelViewer(
backgroundColor: Colors.black,
src: 'assets/skull.glb',
alt: "A 3D model of a skull",
cameraControls: true,
),
.glb 模型位于 assets 文件夹中。 我的flutter是最新的稳定版,也是这个插件的版本。
奇怪的是,当我构建应用程序包并在 google play 上发布应用程序时,当我使用模型查看器导航到页面时,小部件永远不会加载。
我只能看到一个白屏。
开发版和发行版均在装有 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>
谢谢。
【问题讨论】:
你能在 Android Studio 中打开 logcat 并看到任何错误吗?如果它太垃圾,我建议尝试pidcat 阅读日志以诊断此问题。 如果您在谈论在本地调试它,当我从设备上的 Android Studio 运行它时没有任何问题。当我构建 Flutter App Bundle,将其上传到 Google Play,下载该应用程序并运行它时,就会出现此问题。 (所以发布后)。在开发过程中,这个问题没有被炫耀。 插入运行 google play 版本的设备并查看 logcat 以检查错误。 我用与为什么未加载模型相关的错误更新了问题。谢谢你的好建议。 我很乐意提供帮助,我对 repo 进行了更多挖掘,并意识到它是一个 Android 功能,即调试版本自动具有 Internet 权限。 【参考方案1】:是的,您需要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,并建议将权限添加到自述文件中。你可能有兴趣为 repo 创建一个关于它的 PR。 :)
【讨论】:
【参考方案2】:找到了解决这个问题的办法。
当您使用模型查看器时,您需要添加:
<uses-permission android:name="android.permission.INTERNET"/>
到您的AndroidManifest.xml
文件。
这样 Widget 将能够模拟模型。
通常它会在本地服务器(也称为 localhost)上执行此操作,但当它发布时,它会更改。
希望有人会觉得它有用。
【讨论】:
以上是关于3D 模型查看器未加载的主要内容,如果未能解决你的问题,请参考以下文章
将模型加载到 2D/3D 查看器中 - Autodesk Forge