【问题标题】:3D Model viewer not loading3D 模型查看器未加载
【发布时间】: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 权限。

标签: android flutter dart google-play


【解决方案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)上执行此操作,但当它发布时,它会更改。

    希望有人会觉得它有用。

    【讨论】:

      猜你喜欢
      • 2019-03-27
      • 2017-03-28
      • 2020-03-29
      • 2021-04-29
      • 1970-01-01
      • 2016-11-18
      • 2019-09-30
      • 2018-10-03
      • 2020-02-17
      相关资源
      最近更新 更多