如何创建这样的渐变进度指示器?

2024-02-09

我注意到基本的CircularProgressIndicator小部件有很少的参数来定制它。我想要达到像 gif 上那样的结果。不幸的是,我的知识不足以从头开始创建这样一个指标,在 pub.dev 上搜索没有带来任何结果。


  • Make a CustomPainter画圆。使用SweepGradient(...).createShader(...)应用渐变效果。

  • 用一个包裹小部件RotationTransition使小部件旋转。

  • 制作旋转小部件的动画。

Code:

圆形进度指示器小部件:

class GradientCircularProgressIndicator extends StatelessWidget {
  final double radius;
  final List<Color> gradientColors;
  final double strokeWidth;

  GradientCircularProgressIndicator({
    @required this.radius,
    @required this.gradientColors,
    this.strokeWidth = 10.0,
  });

  @override
  Widget build(BuildContext context) {
    return CustomPaint(
      size: Size.fromRadius(radius),
      painter: GradientCircularProgressPainter(
        radius: radius,
        gradientColors: gradientColors,
        strokeWidth: strokeWidth,
      ),
    );
  }
}

class GradientCircularProgressPainter extends CustomPainter {
  GradientCircularProgressPainter({
    @required this.radius,
    @required this.gradientColors,
    @required this.strokeWidth,
  });
  final double radius;
  final List<Color> gradientColors;
  final double strokeWidth;

  @override
  void paint(Canvas canvas, Size size) {
    size = Size.fromRadius(radius);
    double offset = strokeWidth / 2;
    Rect rect = Offset(offset, offset) &
        Size(size.width - strokeWidth, size.height - strokeWidth);
    var paint = Paint()
      ..style = PaintingStyle.stroke
      ..strokeWidth = strokeWidth;
    paint.shader =
        SweepGradient(colors: gradientColors, startAngle: 0.0, endAngle: 2 * pi)
            .createShader(rect);
    canvas.drawArc(rect, 0.0, 2 * pi, false, paint);
  }

  @override
  bool shouldRepaint(CustomPainter oldDelegate) {
    return true;
  }
}

动画控制器:

AnimationController _animationController;

  @override
  void initState() {
    _animationController =
        new AnimationController(vsync: this, duration: Duration(seconds: 1));
    _animationController.addListener(() => setState(() {}));
    _animationController.repeat();
    super.initState();
  }

Usage:

RotationTransition(
  turns: Tween(begin: 0.0, end: 1.0).animate(_animationController),
  child: GradientCircularProgressIndicator(
    radius: 50,
    gradientColors: [
      Colors.white,
      Colors.red,
    ],
    strokeWidth: 10.0,
  ),
),

Result:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建这样的渐变进度指示器? 的相关文章

随机推荐

  • 可以将输入字符串转换为Python中的可调用函数对象吗? [复制]

    这个问题在这里已经有答案了 我希望能够获取一个描述 Python 函数的字符串 并将其转换为一个我可以调用的函数对象 例如 myString def add5 x return x 5 myFunc myString toFunction
  • 使用 Python 的 Dataflow/Beam 示例

    我正在尝试获取以下项目的样本PCollection在 Dataflow Beam 上使用 Python SDK 虽然没有记录 Sample FixedSizeGlobally n 存在 测试时 它seems返回一个PCollection包含
  • 未找到类 Android 支持设计小部件 NavigationView

    美好的一天 你能帮我一个忙吗 在模拟器上编译 运行代码时出现此错误 这是我以前制作的示例教程 我使用了 min Target API 15 并编译了最新的 gradle com android support design 23 0 0 h
  • 当初始状态和最终状态相同时,不会触发transitionend

    在下面的例子中我正在做background color使用 CSS 进行过渡并尝试处理transitionend两个 div 的事件 很遗憾 transitionend没有被解雇div2因为初始和最终背景颜色相同 var div1 div1
  • ASP.NET WebAPI 默认登陆页面

    我已经使用 ASP NET WebApi v2 创建了一个 RESTful Web 服务 并且正在使用虚张声势 https github com domaindrivendev Swashbuckle为 API 文档生成 swagger U
  • 使用 C# 反射从字典生成动态对象

    我一直在研究 C 中的反射 想知道我是否使用带有键值的字典可以创建一个带有变量的对象 该变量包含字典中每个键的名称及其值 该字典的键值 我有一个相反的方法 它从字典中提取一个对象 该字典包含键和类属性及其值 即属性的值 我想知道如果可能的话
  • Julia 中加载/导入的包列表

    如何获取 Julia 会话导入 使用的包的列表 Pkg status 列出所有已安装的软件包 我对通过以下方式导入 加载的内容感兴趣using or import 看起来whos 包含相关信息 名称以及是否是模块 可以输出whos 被捕获在
  • jQuery every 循环重命名 ID 的每个实例

    我有一个页面正在表中创建动态创建的行 其输入的 ID 为 fixedRate 我正在尝试重命名fixedRate id 的每个实例 这仅适用于我当前代码的 id 的第一个实例 这是代码 var amountRows billTasks gt
  • 析构函数永远不会被调用[重复]

    这个问题在这里已经有答案了 我有课Class这创造了一个Thread在它的构造函数中 该线程运行一个while true 循环正在读取非关键数据NetStream 该线程将被析构函数中止 Class thread Abort thread
  • 进程是否在远程计算机上运行?

    我有三台远程连接的远程电脑 我正在尝试编写一个简单的 Windows 应用程序 该应用程序将在单个窗口中显示特定进程是否在任意一台机器上运行 例如 Server1 Chrome 未运行 Server2 Chrome 正在运行 Server3
  • 为 Android 创建 PDU

    我目前正在编写和应用程序 即发送 接收短信 出于单元测试的目的 我需要以编程方式创建 PDU 解码非常简单 Bundle bundle intent getExtras if bundle null Get all messages con
  • 有人尝试过用Z3本身来证明Z3吗?

    有没有人尝试证明Z3 http research microsoft com en us um redmond projects z3 与Z3本身 是否有可能使用 Z3 来证明 Z3 是正确的 更理论化的是 是否有可能使用 X 本身来证明工
  • 模型不会在 ng-if 内更新

    我在角度应用程序中遇到了奇怪的行为 我不知道这是一个错误还是已知的限制 use strict var ctrl function scope scope foo false div foo foo div style background
  • 使用另一个表中的数据创建 SQL 表

    如何使用另一个表 表的副本 中已存在的数据创建表 复制表的最便携方法是 使用 CREATE TABLE 语句创建新表 基于旧表中的 SELECT 使用 INSERT INSERT INTO new table SELECT FROM old
  • 以类似于 Windows 的 MessageBox() 的方式使用 UIAlertView?

    我是 iPhone 新手 我希望能够以类似于 Windows 的方式使用 UIAlertViewMessageBox or the MessageDlg in Delphi 例如 我有一个方法需要询问用户对某件事的确认 并根据他们的响应继续
  • 仅返回与 Solr 匹配足够 NGram 的结果

    为了使用 Solr 实现某种程度的容错 我开始使用NGramFilterFactory 以下是来自schema xml
  • RegAsm.exe 和 regsvr32 有什么区别?如何使用regsvr32生成tlb文件?

    谁能告诉我 regsvr32 和 RegAsm 之间有什么区别 我的 Dll 是 C 语言 那么如何将类导入到 C 中 regsvr32将加载库并尝试调用DllRegisterServer 从那个图书馆 它不在乎什么DllRegisterS
  • PostgreSQL 与 SQL Server NVARCHAR 等效的是什么?

    如果 Microsoft SQL Server 数据库中有 NVARCHAR 或 NTEXT 数据类型的字段 那么 PostgreSQL 数据库中的等效数据类型是什么 我很确定 postgres varchar 与 Oracle Sybas
  • 基本字符串输入

    我刚刚遇到了这段代码 它允许用户在命令提示符中输入字符串 我知道他们所做的一切 这一切都很棒 但我有一个关于 cin 和 getline 函数的问题 string name cout lt lt Please enter your full
  • 如何创建这样的渐变进度指示器?

    我注意到基本的CircularProgressIndicator小部件有很少的参数来定制它 我想要达到像 gif 上那样的结果 不幸的是 我的知识不足以从头开始创建这样一个指标 在 pub dev 上搜索没有带来任何结果 Make a Cu