flutter - 使 FadeInImage.memoryNetwork 渲染圆形裁剪图像
问题描述
我正在尝试创建类似 CircleAvatar 的东西,但是使用具有 aCircularProgressIndicator
和 aFadeInImage.memoryNetwork
作为子级的 Stacked 小部件,这样当我在慢速 Internet 上获取图像时,我可以获得一个不错的加载动画(奖励:占位符图像)。
其他一切工作正常,但我无法弄清楚如何将获取的图像裁剪成圆形。我在这里读到我可以使用 ClipOval,但我找不到任何关于如何使用它的教程。
Stack(children: <Widget>[
Center(child: CircularProgressIndicator(valueColor: new AlwaysStoppedAnimation<Color>(Colors.lightBlue))),
Center(
child: FadeInImage.memoryNetwork(
placeholder: kTransparentImage,
image:
'https://s3-media2.fl.yelpcdn.com/bphoto/7BlRoSOG3AsAWHMPOaG7ng/ls.jpg',
),
),
],
),
));
注意:我正在使用transparent_image
占位符库以在显示加载动画时获取透明占位符。
解决方案
这是我在我的一个项目中使用的,我想你可以创建类似的东西,然后直接使用自定义小部件而不是使用 FadeInImage。
class AvatarFadeImage extends StatelessWidget {
final String imageUrl;
AvatarFadeImage(this.imageUrl);
@override
Widget build(BuildContext context) {
return ClipOval(
child: FadeInImage.memoryNetwork(
placeholder: kTransparentImage,
image: imageUrl,
fit: BoxFit.contain,
),
);
}
}
像这样使用它:
Stack(children: <Widget>[
Center(child: CircularProgressIndicator(valueColor: new AlwaysStoppedAnimation<Color>(Colors.lightBlue))),
Center(
child: AvatarFadeImage("https://s3-media2.fl.yelpcdn.com/bphoto/7BlRoSOG3AsAWHMPOaG7ng/ls.jpg"),
),
],
),
));
PS:你也可以看看https://pub.dartlang.org/packages/cached_network_image和https://flutter.io/cookbook/images/cached-images/
插件可能只是为您解决问题。
推荐阅读
- javascript - 在滚动显示一个,隐藏另一个 div,反之亦然,并且一旦单击第二个 div,将其删除并显示第一个 div
- mysql - 为什么 mysql NodeJS 模块不能识别有效命令?
- c# - 为什么我的代码不让我调用 var Diceroll?
- java - Java14如何从文本文件中找到对应的arrayList条目
- json - 如何从 JSON 文件创建 Kafka 主题,然后提取主题的子集并输出到另一个 JSON 文件
- jquery - ajax调用成功后如何显示侧边栏
- java - 来自 Firestore 的数据未显示在 RecyclerView 中
- azure-functions - 通过 python SDK 更新 Cosmos 吞吐量
- github - Github 操作如何仅进行 1 次 npm 安装
- javascript - 仅显示简单的工具提示,没有任何样式