IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> flutter 图片加载 -> 正文阅读

[移动开发]flutter 图片加载

///网络图片组件(带占位图)
// ignore: must_be_immutable
class MNetWorkImageWidget extends StatelessWidget {
  final String imageUrl; //图片路径
  final double width; //宽度
  final double height; //高度
  final double radius; //圆角
  final BoxFit fit; //填充模式
  final bool isNeedPlaceholder; //是否需要占位图(默认需要)
  final Color placeholderBgColor; //占位图背景颜色
  final VoidCallback didClickCallBack; //点击事件回调
  Widget placeholderWidget; //占位图组件
  final Duration fadeOutDuration; //渐入渐出动画持续时间

  ///属性:
  ///key: 组件key
  ///width: 宽度
  ///height: 高度
  ///radius: 圆角
  ///fit: 图片自适应模式(默认cover)
  ///isNeedPlaceholder: 是否需要占位图(默认需要)
  ///placeholderBgColor: 占位图背景颜色
  ///placeholderWidget: 占位图组件
  ///didClickCallBack: 点击事件回调
  ///fadeOutDuration: 渐入渐出动画持续时间
  GMNetWorkImageWidget({
    Key key,
    @required this.imageUrl,
    this.width,
    this.height,
    this.radius = 0.0,
    this.fit = BoxFit.cover,
    this.isNeedPlaceholder = true,
    this.placeholderBgColor = const Color(0xFFF0F0F0),
    this.placeholderWidget,
    this.didClickCallBack,
    this.fadeOutDuration,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    if (didClickCallBack == null) {
      return _buildImage();
    } else {
      return GestureDetector(
        child: _buildImage(),
        onTap: didClickCallBack,
      );
    }
  }

  Widget _buildImage() {
    return _buildClipRect(
      MCachedNetworkImage(
        width: width,
        height: height,
        fit: fit,
        imageUrl: imageUrl,
        placeholder: this._getCurrentPlaceholderWidget(),
        fadeOutDuration: this.fadeOutDuration,
      ),
    );
  }

  Widget _buildClipRect(Widget child) {
    if (this.radius > 0) {
      return ClipRRect(
        borderRadius: BorderRadius.circular(radius),
        child: child,
      );
    } else {
      return child;
    }
  }

  //获取占位图组件
  Widget _getCurrentPlaceholderWidget() {
    if (this.placeholderWidget != null) {
      return _buildClipRect(
        this.placeholderWidget,
      );
    } else {
      if (!isNeedPlaceholder) {
        return _buildClipRect(
          Container(
            width: this.width,
            height: this.height,
          ),
        );
      }

      String placeholderName = "default_29.png";
      if (width != null && width > 130 && width <= 180) {
        placeholderName = "default_44.png";
      } else if (width != null && width > 180) {
        placeholderName = "default_56.png";
      }
      String placeholderUrl = "assets/$placeholderName";
      return _buildClipRect(
        Container(
          width: width,
          height: height,
          color: placeholderBgColor,
          alignment: Alignment.center,
          child:
              Image.asset(placeholderUrl, package: "cached_network_image", fit: BoxFit.fill),
        ),
      );
    }
  }
}

@Deprecated('请使用 MNetWorkImageWidget 组件')
class MCachedNetworkImage extends StatelessWidget {
  const MCachedNetworkImage(
      {Key key,
      this.imageUrl,
      this.fit = BoxFit.cover,
      this.width,
      this.height,
      this.during,
      this.fadeOutDuration,
      this.alignment,
      this.placeholder})
      : super(key: key);

  final String imageUrl;
  final BoxFit fit;
  final double width;
  final double height;
  final dynamic during;
  final Duration fadeOutDuration;
  final Alignment alignment;
  final Widget placeholder;

  @override
  Widget build(BuildContext context) {
    // return Image.network(
    //   imageUrl,
    //   width: width,
    //   height: height,
    //   alignment: alignment ??= Alignment.center,
    //   fit: fit ??= BoxFit.cover,
    // );
    // return CachedNetworkImage(
    //   imageUrl: imageUrl,
    //   imageBuilder: (BuildContext context, ImageProvider provider) {
    //     return Container(
    //       height: 60,
    //       width: 100,
    //       decoration: BoxDecoration(
    //         image: DecorationImage(
    //           image: provider,
    //           fit: BoxFit.cover,
    //         ),
    //       ),
    //     );
    //   },
    // );
    return CachedNetworkImage(
      imageUrl: imageUrl ?? "",
      fit: fit,
      width: width,
      height: height,
      alignment: Alignment.center,
      useOldImageOnUrlChange: true,
      fadeOutDuration: fadeOutDuration ?? Duration(milliseconds: 0),
      placeholder: (context, url) => placeholder,
      errorWidget: (context, url, error) => placeholder,
      // placeholder: placeholder ??= ((context, url) => CircularProgressIndicator()),
    );
  }
}

/// A Calculator.
class Calculator {
  /// Returns [value] plus 1.
  int addOne(int value) => value + 1;
}

使用方法:

//左边图片。 assets/images/find_goods/xx.png为图片本地路径
  Widget build_left_picture(){
    return MNetWorkImageWidget(
      imageUrl: goodsModel.url,
      width: 100,
      height: 100,
      radius: 5,
      placeholderWidget: Image.asset("assets/images/find_goods/xx.png", width: 100, height: 100),
imageUrl: supplierModel.mchIconUrl ?? "",
    );
  }



placeholderWidget是占位图,加载本地图片
imageUrl是加载网络图片

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 21:02:21  更:2022-03-21 21:05:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 19:04:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码