Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 部署在github.pages上的Flatter web应用程序无法访问某些资产_Flutter_Github Pages_Assets_Flutter Web - Fatal编程技术网

Flutter 部署在github.pages上的Flatter web应用程序无法访问某些资产

Flutter 部署在github.pages上的Flatter web应用程序无法访问某些资产,flutter,github-pages,assets,flutter-web,Flutter,Github Pages,Assets,Flutter Web,[更新了签出问题的步骤] 在本地运行我的Flatter web应用程序 flatter run-d chrome--dart define=flatter\u WEB\u USE\u SKIA=true--release 按预期()工作,但构建它并将其部署到() flatter\u主构建web——dart定义=flatter\u web\u使用\u SKIA=true——发布 未访问某些资产,但已成功访问其他资产 我尝试过这些解决方案(,) 'about.json'在本地按预期工作,但部署时无

[更新了签出问题的步骤]

在本地运行我的Flatter web应用程序

flatter run-d chrome--dart define=flatter\u WEB\u USE\u SKIA=true--release

按预期()工作,但构建它并将其部署到()

flatter\u主构建web——dart定义=flatter\u web\u使用\u SKIA=true——发布

未访问某些资产,但已成功访问其他资产


我尝试过这些解决方案(,)

'about.json'
在本地按预期工作,但部署时无法加载

“assets/about.json”
在这两种情况下都不起作用

正在使用的代码可以简化为

rootBundle.loadString('about.json');

我仔细检查了
publispec.yaml

颤振:
使用材料设计:真实
资产:
-background_grait.jpg
-background_scape.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');
颤振在构建期间创建一个资产文件夹,并将所有我的资产目录复制到其中。通过这种方式,我可以在GitLab页面上以调试和发布模式加载资产

编辑:我包括用于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命令仅用于在脚本开发期间记录输出。我把它们放在那里是因为它们没有坏处,而且有时会派上用场。

解释说,应该相对于pubspec.yaml的路径添加这些资产

对于
pubspec.yaml
示例,您应该将资产文件移动到项目文件夹的根目录中,或者如果它们位于
assets
子文件夹中,请在
pubspec.yaml
中添加该子文件夹的名称

例如,如果您的文件位于
项目路径/assets/
下,则
pubspec.yaml
的assets部分应类似于:

flutter:
  uses-material-design: true
  assets:
    - assets/background_portrait.jpg
    - assets/background_landscape.jpg
    - assets/yf_icon_black.png
    - assets/yf_logo.png
    - assets/about.json
    - assets/apps.json
    - assets/news.json
    - assets/opensource.json

在dart代码中,资产应该通过其指定的键进行访问,对于上面的示例,使用
'assets/about.json'
而不是
'about.json'

我已经使用了非常类似的结构,而不是“json”,我称之为“data”,但在其他方面是相同的。。。我觉得build不会复制build文件夹中的资产……您可以在本地使用flutter build web--release命令检查,我编辑了我的答案,并包含了我用于build的gitlab.ci.yml。flutter run-d chrome--release是否应该提供运行部署版本的相同体验?我已经更新了问题,现在它显示了徽标,但没有加载json资产很高兴听到这个开关/标志用于构建发布版本时,这是一个已知的问题。我读过一篇关于GitHub的文章,但不记得是哪一篇。