Flutter 如何在Flatter web上显示资产图像?

Flutter 如何在Flatter web上显示资产图像?,flutter,dart,flutter-web,Flutter,Dart,Flutter Web,当我尝试使用以下语法在颤振Web中显示资源时,不会显示任何图像: Image.asset( “assets/image.png”, ) 在手机上,相同的代码将显示图像 结构如下: assets image.png lib ... pubspec.yaml 在Pubspec中,我声明资产如下: 颤振: 资产: -资产/image.png 所有资产都存储在Flatter Web中的资产目录中,这意味着图像资产将像这样存储在Web上: assets assets image.p

当我尝试使用以下语法在颤振Web中显示资源时,不会显示任何图像:

Image.asset(
“assets/image.png”,
)
在手机上,相同的代码将显示图像

结构如下:

assets
  image.png
lib
  ...
pubspec.yaml
在Pubspec中,我声明资产如下:

颤振:
资产:
-资产/image.png

所有资产都存储在Flatter Web中的
资产
目录中,这意味着图像资产将像这样存储在Web上:

assets
  assets
    image.png
index.html
...
有了这些知识,我们可以创建一个小部件来处理移动和web的行为。
请注意,我们可以在web上使用
Image.network
,因为默认情况下,图像是通过web上的网络访问的(这是web通常的工作方式)。路径应该是
yourdomain.com/assets/assets/image.png

导入“包装:颤振/材料.省道”;
进口“包装:颤振/基础.dart”;
类PlatformAwareAssetImage扩展了无状态小部件{
const PlatformAwareAssetImage({
关键点,
这个,资产,,
这个包,,
}):super(key:key);
最终字符串资产;
最终字符串包;
@凌驾
小部件构建(构建上下文){
如果(kIsWeb){
返回图像网络(
'assets/${package==null?''packages/$package/'}$asset',
);
}
返回Image.asset(
资产,
包:包,,
);
}
}


这可能会在未来的颤振版本中发生变化-这是自
v1.18.0-6.0.82之前的状态。所有资产都存储在颤振Web的
资产
目录中,这意味着图像资产在Web上的存储方式如下:

assets
  assets
    image.png
index.html
...
有了这些知识,我们可以创建一个小部件来处理移动和web的行为。
请注意,我们可以在web上使用
Image.network
,因为默认情况下,图像是通过web上的网络访问的(这是web通常的工作方式)。路径应该是
yourdomain.com/assets/assets/image.png

导入“包装:颤振/材料.省道”;
进口“包装:颤振/基础.dart”;
类PlatformAwareAssetImage扩展了无状态小部件{
const PlatformAwareAssetImage({
关键点,
这个,资产,,
这个包,,
}):super(key:key);
最终字符串资产;
最终字符串包;
@凌驾
小部件构建(构建上下文){
如果(kIsWeb){
返回图像网络(
'assets/${package==null?''packages/$package/'}$asset',
);
}
返回Image.asset(
资产,
包:包,,
);
}
}


这可能会在未来的颤振版本中发生变化-这是自
v1.18.0-6.0.82之前的状态。由于某种原因,web版本中的资产当前放在另一个
assets/
目录下,导致路径为
assets/assets/…

创建一个简单的函数,例如在
lib/utils.dart
中:

import 'package:flutter/foundation.dart';

String path(str) {
  return (kIsWeb) ? 'assets/$str' : str;
}

使用此函数包装任何路径字符串,例如
AssetImage(path('images/bg.jpg'))

出于某种原因,web构建中的资产当前放置在另一个
assets/
目录下,这导致路径为
assets/assets/…

创建一个简单的函数,例如在
lib/utils.dart
中:

import 'package:flutter/foundation.dart';

String path(str) {
  return (kIsWeb) ? 'assets/$str' : str;
}
使用此函数包装任何路径字符串,例如
AssetImage(path('images/bg.jpg'))