flutter - 部署在 github.pages 上的 Flutter Web 应用程序无法访问某些资产
问题描述
[在github上使用步骤更新结帐问题]
在本地运行我的颤振网络应用程序
flutter run -d chrome --dart-define=FLUTTER_WEB_USE_SKIA=true --release
按预期工作(视频),但构建它并将其部署到github 页面(此处)
flutter_master build web --dart-define=FLUTTER_WEB_USE_SKIA=true --release
不访问某些资产,但成功访问其他资产。
'about.json'
在本地按预期工作,但在部署时无法加载
虽然'assets/about.json'
在任何一种情况下都不起作用
使用中的代码可以简化为
rootBundle.loadString('about.json');
我仔细检查了pubspec.yaml
flutter:
uses-material-design: true
assets:
- background_portrait.jpg
- background_landscape.jpg
- yf_icon_black.png
- yf_logo.png
- about.json
- apps.json
- news.json
- opensource.json
以及构建文件夹中的资产
一切都检查了,但问题仍然存在
在这些日志中,您可以看到这些文件存在
解决方案
对我有用的是完全消除资产文件夹。我在根目录(与 lib 相同级别)中为我的每种资产类型创建了一个文件夹,并将它们作为 pubspec.yaml 中的目录引用:
assets:
- json/
- avatars/
然后在加载它们时,我使用了相对路径:
await rootBundle.loadString('json/structure.json');
Flutter 在构建过程中创建了一个资产文件夹,并将我所有的资产目录复制到其中。通过这种方式,我可以在 GitLab Pages 上以调试和发布模式加载资产。
编辑:我包括用于 gitlab 页面构建管道的 gitlab.ci.yml 文件
image: registry.gitlab.com/famedly/containers/flutter-dockerimages:beta
pages:
script:
- flutter clean
- flutter config --enable-web
- flutter pub get
- flutter build web --release
- ls build/web
- cp -r build/web public
- ls public
artifacts:
paths:
- public
only:
- master
不需要这些的ls命令仅用于在脚本开发期间记录输出。我把它们留在那里是因为它们没有害处,而且有时会派上用场。
推荐阅读
- c++ - 需要帮助按“输入或换行”以允许用户返回主菜单
- rust - 为什么 AsRef 不能用作参数类型注释但可以用于泛型声明?
- javascript - Bootstrap 4 popper 未定义
- react-native - 使用 createBottomTabNavigator 将道具从一个屏幕传递到另一个屏幕
- java - Spring DevTools 不包含在使用 spring-boot-maven-plugin 打包的 fat jar 中
- ios - 我们可以扫描 Wi-Fi SSID 以获取他们在 iOS 中的接收信号强度 (RSS) 吗?
- itext7 - itext7 合并由 HtmlConverter.convertToDocument 创建的文档并保留大纲
- apache-kafka - SMT 时间戳转换器抛出 NullPointerException
- c# - 在asp.net core 2 MVC中通过ajax显示来自控制器的json字符串
- vue.js - 如果 this.$route.name 是登录 vuejs,则仅显示登录页面