当前位置:   article > 正文

Flutter 图片显示方式及显示样式(圆形或圆角)_flutter cachednetworkimage 圆角

flutter cachednetworkimage 圆角

图片显示

1、本地图片

Image.asset加载项目资源包的图片

  1. //先将图片拷贝到项目 images 目录中,然后在 pubspec.yaml文件配置文件相对路径到 assets
  2. Image.asset('images/pic1.jpg'),
  1. /// 加载本地资源gif图片
  2. Image.asset('images/timg.gif', height: 200, width: 200),

Image.file加载手机内置或外置存储的图片

  1. //加载Android平台的外置存储图片需要AndroidManifest.xml配置android.permission.READ_EXTERNAL_STORAGE权限
  2. Image.file(
  3. File('/0/images/cat.jpg'),
  4. width: 200,
  5. height: 200,
  6. )

2、网络图片

Image.network本地缓存

  1. Image.network(
  2. 'https://pic2.zhimg.com/v2-639b49f2f6578eabddc458b84eb3c6a1.jpg',
  3. width: 120,
  4. height: 120
  5. ),

FadeInImage.assetNetwork淡入效果,无本地缓存

  1. /// 有的时候我们需要像Android那样使用一个占位图或者图片加载出错时显示某张特定的图片,这时候需要用到 FadeInImage 这个组件
  2. FadeInImage.assetNetwork(
  3. placeholder: 'images/avatar.png',
  4. image: 'https://pic1.zhimg.com/v2-7fab628481a26f025188b095b5cfafbc.jpg',
  5. width: 200,
  6. height: 200
  7. )

CachedNetworkImage第三方控件,有本地缓存和淡入效果

  1. https://github.com/renefloor/flutter_cached_network_image
  2. //1、将依赖框架配置到pubspec.yaml文件
  3. dependencies:
  4. cached_network_image: ^2.5.0
  5. //2、引入相关类
  6. import 'package:cached_network_image/cached_network_image.dart';
  7. //3、使用控件,默认自带图片淡入效果
  8. CachedNetworkImage(
  9. imageUrl: 'https://pic4.zhimg.com/v2-19dced236bdff0c47a6b7ac23ad1fbc3.jpg',
  10. width: 200,
  11. height: 200,
  12. )

圆形头像

1、CircleAvatar

  1. CircleAvatar(
  2. //头像半径
  3. radius: 60,
  4. //头像图片
  5. backgroundImage: NetworkImage('https://pic2.zhimg.com/v2-639b49f2f6578eabddc458b84eb3c6a1.jpg'),
  6. ),

2、ClipOval

  1. ClipOval( //圆形头像
  2. child: new Image.network(
  3. 'https://pic2.zhimg.com/v2-639b49f2f6578eabddc458b84eb3c6a1.jpg',
  4. width: 120.0,
  5. ),
  6. ),

3、Container + BoxDecoration

  1. Container(
  2. width: 120,
  3. height: 120,
  4. decoration: BoxDecoration(
  5. shape: BoxShape.circle,
  6. image: DecorationImage(
  7. image: NetworkImage('https://pic2.zhimg.com/v2-639b49f2f6578eabddc458b84eb3c6a1.jpg'),
  8. fit: BoxFit.cover
  9. )
  10. )
  11. )

圆角图片

  • 一种是通过 Decoration 的实现类 BoxDecoration 去实现。
  • 一种是通过 ClipRRect 去实现。

其中 BoxDecoration 一般应用在 DecoratedBox 、 Container 等控件,这种实现一般都是直接 Canvas 绘制时,针对当前控件的进行背景圆角化,并不会影响其 child 。这意味着如果你的 child 是图片或者也有背景色,那么很可能圆角效果就消失了。

而 ClipRRect 的效果就是会影响 child 的,具体看看其如下的 RenderObject 源码可知。

1、ClipRRect

  1. /// 使用裁剪来实现图片圆角
  2. ClipRRect( //圆角图片
  3. borderRadius: BorderRadius.circular(8),
  4. child: Image.network(
  5. 'https://pic2.zhimg.com/v2-639b49f2f6578eabddc458b84eb3c6a1.jpg',
  6. width: 120,
  7. height: 120
  8. ),
  9. ),

2、Container + BoxDecoration

  1. /// 使用边框来实现图片圆角
  2. Container(
  3. width: 120,
  4. height: 120,
  5. decoration: BoxDecoration(
  6. shape: BoxShape.rectangle,
  7. borderRadius: BorderRadius.circular(8),
  8. image: DecorationImage(
  9. image: NetworkImage('https://pic2.zhimg.com/v2-639b49f2f6578eabddc458b84eb3c6a1.jpg')
  10. )
  11. )
  12. )

其他各种形状

使用ShapeDecoration可以做出各种形状

  • 斜切角: BeveledRectangleBorder
  • 圆角: RoundedRectangleBorder
  • 超椭圆: SuperellipseShape
  • 体育场: StadiumBorder
  • 圆形: CircleBorder
  1. //斜切角形状示例
  2. Container(
  3. width: 120,
  4. height: 120,
  5. decoration: ShapeDecoration(
  6. shape: BeveledRectangleBorder(
  7. borderRadius: BorderRadius.circular(16)
  8. ),
  9. image: DecorationImage(
  10. fit: BoxFit.cover,
  11. image: NetworkImage('https://pic2.zhimg.com/v2-639b49f2f6578eabddc458b84eb3c6a1.jpg')
  12. )
  13. )
  14. )

上面转载的链接 https://www.cnblogs.com/joe235/p/11199042.html

下面是自己工作中用到的

  1. 容器左上角和右下角有弧度
  2. borderRadius: BorderRadius.only(
  3. topLeft: Radius.circular(20.0),
  4. topRight: Radius.zero,
  5. bottomLeft: Radius.zero,
  6. bottomRight: Radius.circular(20.0)),
  7. )
  8. 容器左右两边有弧度
  9. borderRadius:BorderRadius.all(Radius.circular(Dimens.rgap_dp25))
  10. 容器底部加根线
  11. decoration: BoxDecoration(
  12. color:Colors.white,
  13. border: Border(
  14. bottom: BorderSide(width:0.5,color:Colors.black12)
  15. )
  16. )
  17. 使用decoration实现颜色的渐变(左右渐变)
  18. decoration: BoxDecoration(
  19. gradient: LinearGradient(
  20. begin: isOrientationLeftRight
  21. ? Alignment.centerLeft
  22. : Alignment.topCenter,
  23. end: isOrientationLeftRight
  24. ? Alignment.centerRight
  25. : Alignment.bottomCenter,
  26. colors: [gradientStart, gradientEnd]),
  27. /*阴影设置
  28. boxShadow: [
  29. new BoxShadow(
  30. color: Colors.grey[500],
  31. blurRadius: 20.0,
  32. spreadRadius: 1.0,
  33. )
  34. ]*/
  35. ),

颜色混合图片

  1. Row(children: <Widget>[
  2. Image.asset('images/flutter_logo.png',
  3. width: 100,
  4. /// 混合的颜色,和colorBlendMode一起使用
  5. color: Colors.red,
  6. /// 颜色和图片混合模式,功能较强大,其它模式参见官方文档或源码
  7. colorBlendMode: BlendMode.overlay),
  8. Image.network(
  9. "https://avatars2.githubusercontent.com/u/20411648?s=460&v=4",
  10. width: 100,
  11. colorBlendMode: BlendMode.colorDodge,
  12. color: Colors.blue)
  13. ], mainAxisAlignment: MainAxisAlignment.spaceBetween),

centerSlice图片内部拉伸

  1. Image.asset('images/flutter_logo.png',
  2. width: 250,
  3. height: 250,
  4. fit: BoxFit.contain,
  5. centerSlice:
  6. Rect.fromCircle(center: const Offset(20, 20), radius: 1)),

matchTextDirection图片内部方向

  1. Row(
  2. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  3. children: <Widget>[
  4. Directionality(
  5. textDirection: TextDirection.ltr,
  6. child: Image.network(
  7. "https://avatars2.githubusercontent.com/u/20411648?s=460&v=4",
  8. height: 150,
  9. matchTextDirection: true,
  10. fit: BoxFit.cover)),
  11. Directionality(
  12. textDirection: TextDirection.rtl,
  13. child: Image.network(
  14. "https://avatars2.githubusercontent.com/u/20411648?s=460&v=4",
  15. height: 150,
  16. matchTextDirection: true,
  17. fit: BoxFit.cover))
  18. ]),

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/289620
推荐阅读
相关标签
  

闽ICP备14008679号