安装 msix 后,Flutter Windows 桌面应用程序卡在白屏上

标签 flutter flutter-desktop flutter-channel flutter-release

背景
我刚刚为 Windows 机器开发了我的第一个 Flutter 桌面应用程序。该应用程序在开发/调试时运行良好,但我正在尝试将其作为 Release模式下的应用程序进行测试。
做了什么

  • 我使用 pub msix 创建了一个 msix。
  • 为了签名,我已经尝试了我的
    自己的证书和msix自带的测试证书
    默认包。
  • 我尝试过稳定版和测试版 channel 。

  • 实际问题
    当我在另一个系统上安装应用程序时(甚至在我调试应用程序的实际系统上)。我可以成功安装 msix 设置我可以在应用程序中看到我的应用程序,但是当我尝试打开它时,它卡在空白/白色屏幕上。没有渲染 UI。如果我尝试最大化窗口,它会进入应用程序无响应状态。
    任何帮助将不胜感激。
    提前致谢。
    更新/新发现
    通过Yehuda Kremer提供的链接后拉了几天头发,我在这条推文中找到了答案
    https://twitter.com/FilledStacks/status/1436280577439715338?s=20
    所以主要问题是应用程序使用了一些在其他机器上不起作用的绝对路径(发布后)
    1- 我的应用程序正在使用数据库,所以我确保该数据库路径是相对于应用程序文档目录的。
    2- 现在构建也引用了一些依赖项,它们的路径也是绝对的。我注意到一个标志 CMAKE_INSTALL_LOCAL_ONLYcmake_install.cmake但该标志并未在任何地方设置。
    这是flutter build windows -v的日志
    https://pastebin.com/LAeshUMY
    -- 现在我正在寻找一种将所有路径转换为相对路径的正确方法,以便构建可以安装在不同的机器上,而不仅仅是本地安装。

    最佳答案

    我找到了解决办法。
    主要问题是该应用程序正在寻找一些依赖项,但无法找到它们。如前所述 here .
    在 Release模式下没有发现的原因可能是以下之一,

  • 您正在使用系统中特定路径上可用的某些 dll(依赖于 dll 的包),但是当您发布应用程序时,(绝对)路径不再有效。
  • 您正在添加一些具有绝对路径的 Assets (仅适用于您的系统)。

  • 解决方案:
  • 如果是 dll,则应将其添加到发布文件夹中。就我而言,它是 sqlite3.dll
  • 如果是其他 Assets ,则应始终使用相对路径。
  • 关于安装 msix 后,Flutter Windows 桌面应用程序卡在白屏上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69127335/

    相关文章:

    dart - 如何使用 flutter 删除 Firestore 文档中的字段

    c++ - Flutter Desktop : How to handle Native Code editing in an IDE (Intellisense, 自动完成等)?

    flutter - DataTable 列宽问题

    android-studio - 错误 : The specified language version is too high. 支持的最高语言版本为 2.8。在android studio中我该如何解决?

    java - Flutter - 将 Java 例程转换为 flutter

    flutter - 如何在Flutter中制作这种动画?

    dart - 如何使TextField的背景为矩形框形状?

    Flutter:json_serializable 忽略可为空的字段而不是抛出错误

    c++ - 将 Dart 中的 ByteData 转换为 C++ 中的 unsigned char* 的有效方法?

    flutter - 我在 Flutter SDK 中使用哪个 channel ?