Flutter_Slider_SliderTheme_滑杆/滑块_渐变色

  • 调用示例以及效果
		SliderTheme(data: SliderTheme.of(context).copyWith(trackHeight: 3,// 滑杆trackShape: const GradientRectSliderTrackShape(radius: 1.5),// 滑块thumbShape: const GradientSliderComponentShape(rectWH: 14, overlayRectSpace: 4, overlayColor: Colours.black),),child: Slider(value: 3,// 未滑动区域颜色inactiveColor: Color(0x55FFFFFF),min: 1,max: 10),)

UI效果

  • 滑杆渐变色
import 'package:flutter/material.dart';class GradientRectSliderTrackShape extends SliderTrackShapewith BaseSliderTrackShape {final double disabledThumbGapWidth;final double radius;final LinearGradient gradient;/// Creates a slider track that draws 2 rectangles.const GradientRectSliderTrackShape({this.disabledThumbGapWidth = 2.0,this.radius = 0,this.gradient = const LinearGradient(colors: [Color(0xFFA2FFB7), Color(0xFF00FAED)])});Rect getPreferredRect({required RenderBox parentBox,Offset offset = Offset.zero,required SliderThemeData sliderTheme,bool isEnabled = false,bool isDiscrete = false,}) {final double overlayWidth =sliderTheme.overlayShape!.getPreferredSize(isEnabled, isDiscrete).width;final double trackHeight = sliderTheme.trackHeight ?? 2;assert(overlayWidth >= 0);assert(trackHeight >= 0);assert(parentBox.size.width >= overlayWidth);assert(parentBox.size.height >= trackHeight);final double trackLeft = offset.dx + overlayWidth / 2;final double trackTop =offset.dy + (parentBox.size.height - trackHeight) / 2;final double trackWidth = parentBox.size.width - overlayWidth;return Rect.fromLTWH(trackLeft, trackTop, trackWidth, trackHeight);}void paint(PaintingContext context,Offset offset, {required RenderBox parentBox,required SliderThemeData sliderTheme,required Animation<double> enableAnimation,required Offset thumbCenter,Offset? secondaryOffset,bool isEnabled = false,bool isDiscrete = false,required TextDirection textDirection,}) {assert(sliderTheme.disabledActiveTrackColor != null);assert(sliderTheme.disabledInactiveTrackColor != null);assert(sliderTheme.activeTrackColor != null);assert(sliderTheme.inactiveTrackColor != null);assert(sliderTheme.thumbShape != null);if (sliderTheme.trackHeight! <= 0) {return;}final Rect trackRect = getPreferredRect(parentBox: parentBox,offset: offset,sliderTheme: sliderTheme,isEnabled: isEnabled,isDiscrete: isDiscrete,);final ColorTween activeTrackColorTween = ColorTween(begin: sliderTheme.disabledActiveTrackColor,end: sliderTheme.activeTrackColor);final ColorTween inactiveTrackColorTween = ColorTween(begin: sliderTheme.disabledInactiveTrackColor,end: sliderTheme.inactiveTrackColor);final Paint activePaint = Paint()..shader = gradient.createShader(trackRect)..color = activeTrackColorTween.evaluate(enableAnimation)!;final Paint inactivePaint = Paint()..color = inactiveTrackColorTween.evaluate(enableAnimation)!;final Paint leftTrackPaint;final Paint rightTrackPaint;switch (textDirection) {case TextDirection.ltr:leftTrackPaint = activePaint;rightTrackPaint = inactivePaint;break;case TextDirection.rtl:leftTrackPaint = inactivePaint;rightTrackPaint = activePaint;break;}double horizontalAdjustment = 0.0;if (!isEnabled) {final double disabledThumbRadius =sliderTheme.thumbShape!.getPreferredSize(false, isDiscrete).width /2.0;final double gap = disabledThumbGapWidth * (1.0 - enableAnimation.value);horizontalAdjustment = disabledThumbRadius + gap;}//进度条两头圆角final RRect leftTrackSegment = RRect.fromLTRBR(trackRect.left,trackRect.top,thumbCenter.dx - horizontalAdjustment,trackRect.bottom,Radius.circular(radius));context.canvas.drawRRect(leftTrackSegment, leftTrackPaint);final RRect rightTrackSegment = RRect.fromLTRBR(thumbCenter.dx + horizontalAdjustment,trackRect.top,trackRect.right,trackRect.bottom,Radius.circular(radius));context.canvas.drawRRect(rightTrackSegment, rightTrackPaint);}
}
  • 滑块渐变色
import 'package:flutter/material.dart';class GradientSliderComponentShape extends SliderComponentShape {final double rectWH;final double overlayRectSpace;final LinearGradient thumbGradient;final Color? overlayColor;const GradientSliderComponentShape({required this.rectWH,required this.overlayRectSpace,this.thumbGradient =const LinearGradient(colors: [Color(0xFFA2FFB7), Color(0xFF00FAED)]),this.overlayColor});Size getPreferredSize(bool isEnabled, bool isDiscrete) {return const Size(0, 0);}void paint(PaintingContext context, Offset center,{required Animation<double> activationAnimation,required Animation<double> enableAnimation,required bool isDiscrete,required TextPainter labelPainter,required RenderBox parentBox,required SliderThemeData sliderTheme,required TextDirection textDirection,required double value,required double textScaleFactor,required Size sizeWithOverflow}) {final Canvas canvas = context.canvas;// 点击滑块时阴影// canvas.drawShadow(//     Path()//       ..addRRect(RRect.fromRectAndRadius(//         Rect.fromCenter(center: center, width: 38, height: 34),//         const Radius.circular(19),//       )),//     Colors.red,//     5,//     false);double overlayWH = rectWH + overlayRectSpace;// 滑块描边canvas.drawRRect(RRect.fromRectAndRadius(Rect.fromCenter(center: center, width: overlayWH, height: overlayWH),Radius.circular(overlayWH / 2),),Paint()..color = (overlayColor != null)? overlayColor!: const Color.fromARGB(255, 252, 241, 216),);// 滑块内canvas.drawRRect(RRect.fromRectAndRadius(Rect.fromCenter(center: center, width: rectWH, height: rectWH),Radius.circular(rectWH / 2),),Paint()..shader = thumbGradient.createShader(Rect.fromCenter(center: center, width: rectWH, height: rectWH)));}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/155386.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux sed命令

在Linux系统中&#xff0c;有许多强大的文本处理工具&#xff0c;其中之一就是sed&#xff08;Stream Editor&#xff09;命令。sed是一个用于对文本进行编辑、替换、删除和过滤操作的命令行工具&#xff0c;一次处理一行内容。它具有强大的正则表达式支持和灵活的文本处理功能…

智能电表线路单回路双回路的区别

随着科技的发展和能源管理的需求&#xff0c;智能电表已经成为电力系统中不可或缺的一部分。智能电表可以通过数据通信网络将用电信息实时传输到电力公司&#xff0c;为电力公司提供更精确、实时的用电数据&#xff0c;同时也可以为用户提供更加智能化的用电服务。 在智能电表…

Peter算法小课堂—DP背包问题

大家好&#xff0c;我是Peter&#xff0c;我又来啦&#x1f388;&#x1f384;✨ &#x1f388;&#x1f9e8;&#x1f389;《动态规划》专栏来啦&#xff0c;目前为止&#xff0c;此专栏已经有四篇文章啦&#x1f381;&#x1f380;&#x1f384; 1.DP概念与编程方法 DP概念…

图扑 HT for Web 风格属性手册教程

图扑软件明星产品 HT for Web 是一套纯国产化独立自主研发的 2D 和 3D 图形界面可视化引擎。HT for Web&#xff08;以下简称 HT&#xff09;图元的样式由其 Style 属性控制&#xff0c;并且不同类型图元的 Style 属性各不相同。为了方便查询和理解图元的 Style 属性&#xff0…

Matlab地理信息绘图—数据诊断

文章目录 数据诊断分析&#xff08;均值方差&#xff09;Matlab代码实现结果展示 数据诊断分析&#xff08;均值方差&#xff09; 均值方差检测是一种简单但有效的异常检测方法&#xff0c;主要基于样本的均值和方差的统计信息。该方法的核心思想是假设正常的样本点应该聚集在…

Python 自定义包和模块随机生成6位验证码(详解版)

一、新建一个包&#xff08;两种方法&#xff09; 方法一&#xff1a;先新建一个空目录命名为"小功能包"&#xff0c;然后在新建的目录下新建一个空__init__.py&#xff08;目的是声明当前目录是一个包&#xff09; 方法二&#xff1a;直接在PyCharm用鼠标依次点击F…

多尺度retinex图像去雾算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 clc; clear; close all; warning off; addpath(genpath(pwd)); rng(default)img_in im2doub…

基于SpringBoot的学院班级回忆录

目录 前言 一、技术栈 二、系统功能介绍 管理员模块的实现 用户信息管理 班委信息管理 班级信息管理 班级相册管理 用户和班委模块的实现 班委注册 班级信息管理 加入班级 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越…

使用c++视觉处理----canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测

使用c视觉处理canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测 #include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image cv::imread("1.jpg", cv::IMREAD_GRAYSCALE); // 转为灰度图像if (image.empty()) {std::cerr << "无法加…

2023年9月Web3行业月度发展报告区块链篇 | 陀螺科技会员专享

9月是加密市场的活动月&#xff0c;斯坦福区块链周、Token2049等大型活动相继举办&#xff0c;后者更是创下超过1万人的历史最高纪录&#xff0c;成为了全球最大的Web3活动。在本次Token2049上&#xff0c;RWA、支付以及出入金成为了讨论度最多的活动。尽管活动如火如荼&#x…

流程自动化如何帮助简化安全性

正如帮助开发 IT 安全最佳实践的政府机构 NIST 所说&#xff0c;人们越来越认识到网络安全是“每个人的工作”。换句话说&#xff0c;不仅仅是 IT 组织内的技术员工必须帮助预防和检测网络安全风险。组织中的每个人&#xff0c;包括没有技术或网络安全背景的员工&#xff0c;都…

vue elementui的select组件实现滑到底部分页请求后端接口

vue elementui的select组件实现滑到底部分页请求后端接口 1.实现效果2.实现原理 1.实现效果 老规矩&#xff0c;直接上最后的实现效果 2.实现原理 直接上代码 <el-form-item class"diagmosisItem" label"诊断" v-scroll"handleScroll">…

【C进阶】内存函数

strcpy拷贝的仅仅是字符串&#xff0c;但是内存中的数据不仅仅是字符&#xff0c;所以就有了memcpy函数 1. memcpy void *memcpy &#xff08;void * destination &#xff0c;const void * source , size_t num) 函数memcpy从source的位置开始向后拷贝num个字节的数据到desti…

如何正确的关闭Redis服务器

Redis官方原生版本是在Linux平台上开发和测试的&#xff0c;但是大多数初学者都是使用Windows系统来学习如何开发的。因此&#xff0c;官方提供了一个叫做“Microsoft Open Tech Redis”的项目&#xff0c;该项目专门为Windows平台提供了一个官方支持的Redis版本&#xff0c;但…

大数据Doris(八):启动FE步骤

文章目录 启动FE步骤 一、配置环境变量 二、​​​​​​​创建doris-mate

C/C++ 线程超详细讲解(系统性学习day10)

目录 前言 一、线程基础 1.概念 2.一个进程中多个线程特征 2.1 线程共有资源 2.2 线程私有资源 3.线程相关的api函数 3.1 创建线程 创建线程实例代码如下&#xff1a; 需要特别注意的是&#xff1a; -lpthread和-pthread的区别 3.2 给线程函数传参 传参实例代码如…

Django实现音乐网站 ⒆

使用Python Django框架做一个音乐网站&#xff0c; 本篇主要为排行榜功能及音乐播放器部分功能实现。 目录 排行榜列表 设置路由 视图处理 模板渲染 设置跳转入口 播放器功能开发 设置路由 模板页面 脚本渲染 列表渲染和播放器实现 音乐播放器列表展示关闭 总结 排…

Selenium+Pytest自动化测试框架

前言 selenium自动化 pytest测试框架 本章你需要 一定的python基础——至少明白类与对象&#xff0c;封装继承 一定的selenium基础——本篇不讲selenium&#xff0c;不会的可以自己去看selenium中文翻译网 测试框架简介 测试框架有什么优点呢&#xff1a; 代码复用率高&…

百度SEO优化全攻略(提高网站排名的5个方面)

百度SEO入门介绍&#xff1a; 随着互联网的不断发展&#xff0c;SEO已经成为网站优化的重要一环。而百度作为中国最大的搜索引擎&#xff0c;其SEO优化更是至关重要。SEO不仅能够提高网站排名&#xff0c;还能够提高网站流量、用户体验以及品牌知名度。因此&#xff0c;掌握百…

代码混淆界面介绍

代码混淆界面介绍 代码混淆功能包括oc&#xff0c;swift&#xff0c;类和函数设置区域。其他flutter&#xff0c;混合开发的最终都会转未oc活着swift的的二进制&#xff0c;所以没有其他语言的设置。 代码混淆功能分顶部的显示控制区域&#xff1a;显示方式&#xff0c;风险等…