第九十七回 自定义评分条

这篇具有很好参考价值的文章主要介绍了第九十七回 自定义评分条。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


我们在上一章回中介绍了"网络综合示例"相关的内容,本章回中将介绍如何 自定义评分条.闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在本章回中介绍的评分条就是包含多个星星形状的评分条,常见于网上购物后的评价中,相信大家都见过。Flutter没有提供这样的组件,因此我们准备自己实现一个这样的组件,本章回中将详细介绍如何去实现该组件。

实现方法

  1. 创建一个星星的Icon,在Icon中设置Icon的大小和颜色;
  2. 把多个Icon放到Row中,形成一排星星Icon,用来表示评价总分值;
  3. 创建一个和步骤2中相同的星星Icon,只是颜色不同,用来表示评价实际的分值;
  4. 使用Stack组件把步骤2和步骤3中创建星星Icon叠加在一起,组成一个整体的评分条;

该方法的整体思路就是使用Stack叠加两行形状相同图标,图标的颜色不同,进而实现显示评分值和未评分值的效果。接下来我们通过具体的代码来演示该方法。

示例代码

List<Widget> ratingStar() {
  ///用来存放已经评分的star,不过需要计算
  List<Widget> allStars = [];
  ///使用参数中传入的图标,如果没有传入使用默认的star图标
  var star = Icon(widget.ratingedWidget.icon,
      color: widget.ratingedColor,
      size: widget.sizeOfStar,
  );


  ///计算单个star占用的分数
  double ratingPerStar = widget.maxRating / widget.countOfStar;
  ///计算star的数量,分整个star和部分star,整个star的数量=当前评分/单个star的分数,向下取整
  int fullStarCount = (widget.rating/ratingPerStar).floor();
  ///如果整个star的数量超过评分条中图标的最大数量,那么将它设置为最大值
  if(fullStarCount > widget.countOfStar) {
    fullStarCount = widget.countOfStar;
  }

  double percentStarCount = (widget.rating/ratingPerStar)-fullStarCount;
  // print("per: $ratingPerStar, full: $fullStarCount , part: $percentStarCount");

  ///把整数个star放入数组
  for(var i =0; i <fullStarCount;i++) {
    allStars.add(star);
  }

  var percentStar = ClipRect(
    clipper: DIYCliper(percent: percentStarCount),
    child: star,
  );
  allStars.add(percentStar);

  return allStars;
}

List<Widget> unRatingStar() {
  return List.generate(widget.countOfStar, (index) {

    ///使用参数中传入的图标,如果没有传入使用默认的star图标
    return Icon(
      widget.unRtingedWidget.icon,
      color: widget.unRatingedColor,
      size: widget.sizeOfStar,
    );
  });
}

Stack(children: [
  Row(
    mainAxisAlignment: MainAxisAlignment.start,
    crossAxisAlignment: CrossAxisAlignment.center,
    children: unRatingStar(),
  ),
  Row(
    mainAxisAlignment: MainAxisAlignment.start,
    crossAxisAlignment: CrossAxisAlignment.center,
    children: ratingStar(),
  )
]),

上面的代码和实现的方法完全相同,同时还进行了扩展:可以自定义评分的颜色以及评分条中的图标形状,就是说可以把评分条中的星星换成其它的图形。

代码中有个细节在实现方法中没有介绍,就是计算评分值,它的思路:使用当前用户输入的评分值除以总分值得到评分值,然后用该值除以每个星星代表的分值,这样就得到了星形的的数量,数量为小数,我们先把整数部分的星星修改成评分颜色(示例中为黄色),然后使用剪切方法对星星进行操作,得到不足一个星星的大小,把该大小修改成评分颜色,这样便把小数部分值也体现到了评分星星上。剪切组件相关的内容,我们在前面章回中介绍过,这里就不详细介绍了。

看官们,关于"如何自定义评分条"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!文章来源地址https://www.toymoban.com/news/detail-618656.html

到了这里,关于第九十七回 自定义评分条的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一起Talk Android吧(第五百四十回:ImageView的缩放)

    各位看官们大家好,上一回中咱们说的例子是\\\"RxJava中的总结\\\",本章回中介绍的例子是\\\"I mageView的缩放 \\\"。闲话休提,言归正转,让我们一起Talk Android吧! 通常情况下ImageView组件主要用来显示图片,因此需要使用图片当作显示内容,这个可以通过 ImageView 的src属性来设置被显示的

    2023年04月09日
    浏览(34)
  • 第九十四回 如何打造一个网络框架

    我们在上一章回中介绍了\\\"如何mock数据\\\"相关的内容,本章回中将介绍如 何打造一个网络框架 闲话休提,让我们一起Talk Flutter吧。 最近在项目中使用dio处理网络相关的内容,有些地方的代码不能利用,有些地方的代码耦合度比较高,因此准备在dio上面封装一层网络层,这些可

    2024年02月15日
    浏览(31)
  • 第九十六回 网络综合示例:获取天气信息

    我们在上一章回中介绍了dio库中转换器相关的内容,本章回中将介绍网络综合示例: 获取天气信息 .闲话休提,让我们一起Talk Flutter吧。 我们在前面章回中介绍了网络操作相关的内容,本章回中将综合利用这些内容实现一个获取天气信息的例子。主要包含dio库的使用、网络操

    2024年02月14日
    浏览(41)
  • 一起Talk Android吧(第五百三十八回:RxJava中的线程切换)

    各位看官们大家好,上一回中咱们说的例子是\\\"RxJava中的多线程操作\\\",本章回中介绍的例子是\\\"R xJava中的线程切换 \\\"。闲话休提,言归正转,让我们一起Talk Android吧! 我们在上一章回中介绍了如何创建多线程,本章回将介绍如何进行线程切换。线程切换是指在主线程和子线程之

    2023年04月08日
    浏览(69)
  • 一起Talk Android吧(第五百四十八回:如何创建垂直版SeekBar)

    各位看官们大家好,上一回中咱们说的例子是\\\"蓝牙广播中的厂商数据\\\",本章回中介绍的例子是\\\" 如何创建垂直版SeekBar \\\"。闲话休提,言归正转,让我们一起Talk Android吧! 看官们,我们在这里说的 SeekBar 就是滑动条,如果有看官忘记的话,可以查看之前的博客。 SeekBar 在默认情

    2024年02月11日
    浏览(40)
  • 第九十三回 在Flutter中mock数据

    我们在上一章回中介绍了\\\"在Flutter中解析JSON数据\\\"相关的内容,本章回中将介绍 如何mock数据 .闲话休提,让我们一起Talk Flutter吧。 我们在本章回中介绍的mock数据主要是通过相关的代码模拟服务器返回相关的数据,这些数据可以是正确的数据,也可以是错误的数据。通过mock数据

    2024年02月15日
    浏览(46)
  • 一起Talk Android吧(第五百四十六回:如何判断手机是否安装GooglePlay)

    各位看官们大家好,上一回中咱们说的例子是\\\"如何实现流水动画\\\",本章回中介绍的例子是\\\" 如何判断手机是否安装GooglePlay \\\"。闲话休提,言归正转,让我们一起Talk Android吧! 我们在这里说的 GooglePlay 就是Google的应用市场,它本质上也是应用程序,只是在国内无法使用,因此部

    2024年02月09日
    浏览(40)
  • 第九十六天学习记录:Linux基础:实用操作Ⅰ

    注:第一张图与学习记录无关,是为了参与CSDN的AI绘图活动 1、Linux某些程序的运行,如果想要强制停止它,可以使用快捷键Ctrl+C中止 2、在命令输入错误时,也可以通过快捷键Ctrl+C快速退出当前输入 1、可以通过快捷键:Ctrl+D,退出账户的登录 2、退出某些特定程序的专属页面

    2024年02月12日
    浏览(43)
  • 数据库管理-第九十四期 19c OCM之路-第四堂(02)(20230725)

    第四堂继续! 收集Schema统计信息 开启制定表索引监控 创建索引组织表 按照题目要求创建对应的表: 收集直方图统计信息 创建位图索引(低选择性) 压缩索引 共享池保存 绑定变量配置为相似匹配 段空间管理改为自动 需要将CUST_TBS表空间转换为级自动管理: 收集多列统计

    2024年02月15日
    浏览(32)
  • 数据库管理-第九十三期 19c OCM之路-第四堂(01)(20230719)

    距离上一期19c OCM之路已经过去了整整8天了,这中间发生的事情详见第九十二期。本期来到第四堂 Performance management 性能管理,但是一开始需要把上一堂的一些内容做一些调整和补遗。 Additional configuration 其他配置 在上一堂的其他配置中,我是把并行相关内容放过去了,但是

    2024年02月16日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包