我刚刚检查了 Image.asset 是如何翻译的,并且它显然被转换为画布。如下图所示。
因此,如果您处于苛刻的情况下,您仍然可以使用通常的 img 元素来实现这一点,该元素可以通过 flutter_web_ui 包包含,如下面的代码所示。
import 'package:flutter_web/material.dart';
import 'package:flutter_web_ui/ui.dart' as ui;
import 'dart:html';
class GifRenderer extends StatelessWidget {
@override
Widget build(BuildContext context) {
// build the HTML Img element.
ui.platformViewRegistry.registerViewFactory(
"Gif Renderer",
(int viewId) {
ImageElement element = ImageElement()
..src = "/assets/images/tourism.gif"
// ..height = 500
// ..width = 800
..style.border = "none";
return element;
},
);
return Padding(
padding: EdgeInsets.only(top: 1.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Expanded(
// This is a normal image asset
child: Image.asset(
'/images/tourism.gif',
height: 500,
width: 800,
),
),
Expanded(
// Here we add the HTML img element created early.
child: HtmlView(
viewType: "Gif Renderer",
),
)
],
),
);
}
}
所以现在这段代码在一列中显示了两个小部件,第一个是您使用的常用图像资产,第二个是正确呈现 gif 的 html img 元素。
另请注意,Flutter-web 需要在您的资产文件夹中有一个 AssetManifest.json,其中包含与您的资产相关的条目。我不确定这是否是强制性的,但这里是如何定义它的参考AssetManifest.json。
我在 AssetManifest.json 中使用了以下条目
{
"assets": ["images/tourism.gif"]
}