当前位置: 首页 > article >正文

flutter轮播图控件根据图片高度动态调整图高度

1.图片链接资源需要带有宽高信息
例如:https://zmkx.oss-cn-hangzhou.aliyuncs.com/oss/folder/atui2024-12-231734938007236a30cb975297842d0b3d2b82e4ec7f72b7unhmlcaj4el.jpg?Size=1080x2388
在链接中拼接?Size=1080x2388携带。

2.获取到数据后切割出宽高

List<Map<String, dynamic>> _swiperDataUrl; //轮播图数据源

 /*
* 计算轮播图图片高度
* articlePic: 请求接口获取到的图片集合
* */
  _maxSwiperHeight(List articlePic) {
    if(articlePic == null || articlePic.isEmpty){
      return;
    }

    List<Map<String, dynamic>> _swiperHeight = [];

    double width;
    double height;
	//切割出图片宽高信息
    articlePic.forEach((element) {
      if(element.type == 'P'){
        String url = element.url;
        List<String> strList =
        url.contains('?Size=')
            ? url.split('?Size=')
            : url.contains('?size=')
            ? url.split('?size=')
            : null;

        if (strList != null && strList.length >= 1) {
          url = strList.last;
          List<String> size = url.split('x');
          width = double.parse(size[0]);
          height = double.parse(size[1]);

          double screenWidth = _articleDetail.redirectFlag == 1
              ? getScreenWidth() - 40
              : getScreenWidth();

		//配置每张图片显示时轮播控件需要的高度			
          if (width > screenWidth) {
            height = height / (width / screenWidth);
          } else {
            height = height * (screenWidth / width);
          }
          if(height > screenWidth * 1.3){
            height = screenWidth * 1.3;
          }
        } else {
          height = 500.h;
        }

        // 轮播图资源链接
        _swiperHeight
            .add({"url": element.url, "height": height.ceilToDouble(),'type':'P'});

        setState(() {
          _swiperDataUrl = _swiperHeight;
        });
      }
    });
  }

3.显示轮播图

int _currentImageIndex = 0;
  _swiperView(){
    return
      // 图片
      _articleDetail.articleType == 1
          ? _swiperDataUrl!=null
          ? AnimatedContainer(
        duration: Duration(milliseconds: 300),
        width: winWidth(context: context),
        height: _swiperDataUrl[_currentImageIndex]['height'],
        color: Colors.white,
        child: Swiper(
          controller: _swiperController,
          itemCount: _swiperDataUrl.length,
          loop: false,
          autoplay: false,
          onIndexChanged: (index){
            setState(() {
              _currentImageIndex = index;
            });
          },
          itemBuilder: (BuildContext context, int index) {
            return GestureDetector(
              onTap: () {
                _toViewBigPhoto(
                    context, _articleDetail.articlePic, index);
              },
              child: _swiperDataUrl[index]['type'] == 'P'?
              CachedNetworkImage(
                fit: BoxFit.cover,
                imageUrl: _swiperDataUrl[index]['url'],
                width: double.infinity,
              ):_swiperDataUrl[index]['type'] == 'V'?
              ClipRRect(
                child: ArticleDetailVideoPage(
                  _articleDetail.articlePic[index].url,
                  mute: true,
                  toFullScreenPage: false,
                  clickVideoCallback: _toOriginalArticle,
                ),
              )
                  :SizedBox(),
            );
          },
          pagination: SwiperPagination(
              builder: DotSwiperPaginationBuilder(
                  size: 7,
                  color: Color(0xff999999),
                  activeColor: Color(0xffffffff))),
        )
      ) : SizedBox()
      // 视频
          : _articleDetail.articleType == 2
          ? _videoView()
          : SizedBox();
  }

http://www.kler.cn/a/451281.html

相关文章:

  • springboot/ssm社区助老志愿者服务平台Java代码编写web志愿捐赠活动项目
  • 《计算机组成及汇编语言原理》阅读笔记:p86-p115
  • 打造高效租赁小程序让交易更便捷
  • 详细介绍如何使用rapidjson读取json文件
  • vue中做一个最多输入一位小数且可以为负数的输入框(包含最前面最后面为小数点及多个-符号与前导零校验)
  • ES已死,文本检索永生
  • GO语言基础面试题
  • 机器人角度参考方式
  • Linux的启动流程
  • 渗透测试 - webshell jsp一句话大马 蚁剑连接
  • OpenAI 普及 ChatGPT,开通热线电话,近屿智能深耕AI培训
  • Spring Boot 中的 @Scheduled 定时任务以及开关控制
  • 赋能新一代工业机器人-望获实时linux在工业机器人领域应用案例
  • OpenAI 展示全新桌面版 ChatGPT
  • 重温设计模式--原型模式
  • 人工智能与物联网:从智慧家居到智能城市的未来蓝图
  • Python PyMupdf 去除PDF文档中Watermark标识水印
  • 国标GB28181-2022平台EasyGBS:安防监控中P2P的穿透方法
  • Rust: offset祼指针操作
  • 【Linux】虚拟机扩展磁盘
  • 「实战应用」如何用图表控件SciChart WPF实现应用程序的DPI感知?
  • WebDriverManager 下载及安装教程
  • ffmpeg源码分析(九)解协议
  • 记录 io.springfox 3.0.0 整合 spring boot 2.6.x 由于 springfox bug 引发问题
  • HTML制作一个普通的背景换肤案例2024版
  • udp tcp协议