Firebase、Flutter Web App 在本地运行,但部署的图像未显示时
Firebase, Flutter Web App Works locally, but when deployed images are not shown
我有一个 flutter web 应用程序,它在本地运行良好,但在使用
部署它之后
firebase deploy
图片在网站上没有显示,我已经通过跟踪检查了资产是否已上传,例如my_app.firebaseapp.com/assets/assets/card.jpg。 (图片在那里,所以它已正确上传,但由于某种原因,它没有显示在主页上)。
Url: https://websitehostingtry.web.app/#/
https://websitehostingtry.web.app/assets/images/card.jpg
当运行本地相同时:
flutter run -d chrome --release
我的 Pubspec.yaml 文件:
name: website_try
description: A new Flutter project.
version: 1.0.0+1
environment:
sdk: ">=2.7.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.3
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
assets:
- images/
在我的飞镖代码中,我只是更改了默认代码以在计数器后添加图像...
Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
Expanded(
child: Image.network('assets/images/card.jpg'),
)
],
),
),
我检查了您共享的页面,这是您部署到任何托管服务时的典型问题之一。它通常是由您访问图像的方式引起的。
您的一个网络请求 URL 在实时页面中看起来像这样。您可以在 chrome.
的开发者工具中查看
https://websitehostingtry.web.app/assets/card.jpg
当我检查 flutter_service_worker.js
时,它显示了资产所在的以下清单。
'use strict';
const CACHE_NAME = 'flutter-app-cache';
const RESOURCES = {
"index.html": "7136835e515d34b7b84f2ae95aff570f",
"/": "7136835e515d34b7b84f2ae95aff570f",
"main.dart.js": "2368f8417bf6d56998d2eb9d8db6dc09",
"favicon.png": "5dcef449791fa27946b3d35ad8803796",
"icons/Icon-192.png": "ac9a721a12bbc803b44f645561ecb1e1",
"icons/Icon-512.png": "96e752610906ba2a93c65f8abe1645f1",
"manifest.json": "6c43261a82a59e92d3d5d2b6824ddd9a",
"assets/LICENSE": "34da31f697be5f2fcfacf877df9adb0a",
"assets/AssetManifest.json": "7701bf8932c1b66ef282029ec69bb8ee",
"assets/FontManifest.json": "01700ba55b08a6141f33e168c4a6c22f",
"assets/packages/cupertino_icons/assets/CupertinoIcons.ttf": "115e937bb829a890521f72d2e664b632",
"assets/fonts/MaterialIcons-Regular.ttf": "56d3ffdef7a25659eab6a68a3fbfaf16",
"assets/assets/card.jpg": "6cbe9266e9c097ee95ab2e2c36048ee8"
};
根据我的分析,我猜测在您的代码中您可能指的是如下图像。
Image.asset('/assets/card.jpg');
或
Image.network('/assets/card.jpg');
这将从根域映射,因此它会查找 https://websitehostingtry.web.app/assets/card.jpg。
因此,一种方法是删除路径中 assets
之前的附加正斜杠。例如
Image.asset('assets/card.jpg');
或者,如果您更喜欢 Image.network
,那么以下内容也行。
Image.network('assets/assets/card.jpg');
另一种更清晰的方法是创建一个新目录 images 并将 card.jpg 放在一边,以便清楚里面的内容。
Rationale is to name your folder by content type for clarity.
将pubspec.yaml
更改为
flutter:
assets:
- images/
然后将您的代码更改为以下内容。
Image.asset('images/card.jpg');
或
Image.network('assets/images/card.jpg');
希望这对您有所帮助。
问题:
pubspec.yaml
flutter:
assets:
- images/
最初,我在 flutter 应用程序中加载图像
Image.asset("images/banner.png")
Web 应用程序在本地主机上完美加载图像。但是,当我在 Firebase 托管上部署 Web 应用程序时,一切正常,只是图像无法加载!
解决方法:
我检查了 Firebase 托管部署
firebase deploy --debug
在终端里搜索banner.png
发现图片已经上传,但是访问路径不同!
"/assets/assets/images/banner.png"
所以,我在加载图像时更改了访问路径,方法是在前面加上 assets/
,如
Image.asset("assets/images/banner.png")
现在,它会在本地主机和 Firebase 托管中加载图像!
我有一个 flutter web 应用程序,它在本地运行良好,但在使用
部署它之后firebase deploy
图片在网站上没有显示,我已经通过跟踪检查了资产是否已上传,例如my_app.firebaseapp.com/assets/assets/card.jpg。 (图片在那里,所以它已正确上传,但由于某种原因,它没有显示在主页上)。
Url: https://websitehostingtry.web.app/#/
https://websitehostingtry.web.app/assets/images/card.jpg
当运行本地相同时:
flutter run -d chrome --release
我的 Pubspec.yaml 文件:
name: website_try
description: A new Flutter project.
version: 1.0.0+1
environment:
sdk: ">=2.7.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.3
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
assets:
- images/
在我的飞镖代码中,我只是更改了默认代码以在计数器后添加图像...
Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
Expanded(
child: Image.network('assets/images/card.jpg'),
)
],
),
),
我检查了您共享的页面,这是您部署到任何托管服务时的典型问题之一。它通常是由您访问图像的方式引起的。
您的一个网络请求 URL 在实时页面中看起来像这样。您可以在 chrome.
的开发者工具中查看https://websitehostingtry.web.app/assets/card.jpg
当我检查 flutter_service_worker.js
时,它显示了资产所在的以下清单。
'use strict';
const CACHE_NAME = 'flutter-app-cache';
const RESOURCES = {
"index.html": "7136835e515d34b7b84f2ae95aff570f",
"/": "7136835e515d34b7b84f2ae95aff570f",
"main.dart.js": "2368f8417bf6d56998d2eb9d8db6dc09",
"favicon.png": "5dcef449791fa27946b3d35ad8803796",
"icons/Icon-192.png": "ac9a721a12bbc803b44f645561ecb1e1",
"icons/Icon-512.png": "96e752610906ba2a93c65f8abe1645f1",
"manifest.json": "6c43261a82a59e92d3d5d2b6824ddd9a",
"assets/LICENSE": "34da31f697be5f2fcfacf877df9adb0a",
"assets/AssetManifest.json": "7701bf8932c1b66ef282029ec69bb8ee",
"assets/FontManifest.json": "01700ba55b08a6141f33e168c4a6c22f",
"assets/packages/cupertino_icons/assets/CupertinoIcons.ttf": "115e937bb829a890521f72d2e664b632",
"assets/fonts/MaterialIcons-Regular.ttf": "56d3ffdef7a25659eab6a68a3fbfaf16",
"assets/assets/card.jpg": "6cbe9266e9c097ee95ab2e2c36048ee8"
};
根据我的分析,我猜测在您的代码中您可能指的是如下图像。
Image.asset('/assets/card.jpg');
或
Image.network('/assets/card.jpg');
这将从根域映射,因此它会查找 https://websitehostingtry.web.app/assets/card.jpg。
因此,一种方法是删除路径中 assets
之前的附加正斜杠。例如
Image.asset('assets/card.jpg');
或者,如果您更喜欢 Image.network
,那么以下内容也行。
Image.network('assets/assets/card.jpg');
另一种更清晰的方法是创建一个新目录 images 并将 card.jpg 放在一边,以便清楚里面的内容。
Rationale is to name your folder by content type for clarity.
将pubspec.yaml
更改为
flutter:
assets:
- images/
然后将您的代码更改为以下内容。
Image.asset('images/card.jpg');
或
Image.network('assets/images/card.jpg');
希望这对您有所帮助。
问题:
pubspec.yaml
flutter:
assets:
- images/
最初,我在 flutter 应用程序中加载图像
Image.asset("images/banner.png")
Web 应用程序在本地主机上完美加载图像。但是,当我在 Firebase 托管上部署 Web 应用程序时,一切正常,只是图像无法加载!
解决方法:
我检查了 Firebase 托管部署
firebase deploy --debug
在终端里搜索banner.png
发现图片已经上传,但是访问路径不同!
"/assets/assets/images/banner.png"
所以,我在加载图像时更改了访问路径,方法是在前面加上 assets/
,如
Image.asset("assets/images/banner.png")
现在,它会在本地主机和 Firebase 托管中加载图像!