Flutter 自定义view

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

带进度动画的圆环。没gif,效果大家自行脑补。

继承CustomPainterpaint()方法中拿到canvas,绘制API和android差不多。

Flutter 自定义view,flutter文章来源地址https://www.toymoban.com/news/detail-631987.html

import 'package:flutter/material.dart';

class ProgressRingPainter extends CustomPainter {
  double strokeWidth = 20;
  Color _colorBg = Colors.white10;
  final double progress;

  ProgressRingPainter({this.progress});

  @override
  void paint(Canvas canvas, Size size) {
    var xCenter = size.width / 2;
    var yCenter = size.height / 2;

    Rect rect = Rect.fromCenter(
        center: Offset(xCenter, yCenter),
        width: size.width,
        height: size.height);

    var paintBg = Paint()
      ..style = PaintingStyle.stroke
      ..isAntiAlias = true
      ..strokeWidth = strokeWidth
      ..color = _colorBg;

    List<Color> colors = List();
    colors.add(Colors.white70);
    colors.add(Colors.white);
    colors.add(Colors.white70);

    var paint = Paint()
      ..style = PaintingStyle.stroke
      ..isAntiAlias = true
      ..strokeWidth = strokeWidth
      ..shader = LinearGradient(colors: colors).createShader(rect);

    canvas.drawArc(rect, 0, 36, false, paintBg);
    canvas.drawArc(rect, 4.5, -progress, false, paint);
  }

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

import 'package:flutter/material.dart';
import 'package:flutter_app_demo/widget/progress_ring_paint.dart';

AnimationController animationController;

class ProgressRing extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return ProgressRingState();
  }

  static void startAnimation() {
    animationController.forward(from: 0);
  }
}

class ProgressRingState extends State<ProgressRing>
    with SingleTickerProviderStateMixin {
  Animation<double> animation;
  AnimationController controller;

  @override
  void initState() {
    super.initState();
    controller = new AnimationController(
        duration: const Duration(seconds: 5), vsync: this);
    animation = CurvedAnimation(parent: controller, curve: Curves.linear);
    animation = new Tween(begin: 0.0, end: 36.0).animate(animation);
    controller.forward(from: 0);
    animationController = controller;
  }

  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return AnimatedProgressRing(animation: animation);
  }
}

class AnimatedProgressRing extends AnimatedWidget {
  AnimatedProgressRing({Key key, Animation<double> animation})
      : super(key: key, listenable: animation);

  Widget build(BuildContext context) {
    final Animation<double> animation = listenable;
    return CustomPaint(
      size: Size(200, 200),
      painter: ProgressRingPainter(progress: animation.value),
    );
  }
}

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

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

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

相关文章

  • Flutter(九)Flutter动画和自定义组件

    Animation、Curve、Controller、Tween这四个角色,它们一起配合来完成一个完整动画 Animation Animation是抽象类,和UI渲染没有关系,功能是保存动画的插值和状态;比较常用的是Animation addListener:帧监听器中最常见的行为是改变状态后调用setState()来触发UI重建 addStatusListener:动画开始

    2024年02月10日
    浏览(39)
  • 【Flutter】Flutter 设置默认字体 设置自定义字体

    你是否渴望成为 Flutter 的专家,掌握更多的技巧和最佳实践?我们有个好消息要告诉你! Flutter 从零到一 基础入门到应用上线全攻略 正在等待你的加入!这个专栏包含了你需要的所有 Flutter 学习资源

    2024年02月09日
    浏览(45)
  • 【Flutter】Flutter 使用 table_calendar 实现自定义日历

    【Flutter】Flutter 使用 table_calendar 实现自定义日历 你好!今天我要为你介绍一个非常实用的 Flutter 日历组件—— table_calendar 。这个组件不仅功能强大、高度可定制,而且使用起来非常简单。在本文中,我会手把手教你如何使用这个组件,并分享一些实际业务中的应用示例。希

    2024年02月08日
    浏览(32)
  • Flutter:自定义错误显示

    以下面数组越界的错误为例: 当构建失败后会在屏幕上如下显示,这样不太友好,是否可以进行自定义错误显示呢? 使用Flutter的错误处理机制:Flutter提供了一个全局的错误处理机制,可以通过重写 ErrorWidget.builder 来自定义错误显示。 自定义的错误widget 全局监听 如果不想显

    2024年02月16日
    浏览(31)
  • flutter自定义按钮-文本按钮

    目录 前言 需求 实现 前言 最近闲着无聊学习了flutter的一下知识,发现flutter和安卓之间,页面开发的方式还是有较大的差异的,众所周知,android的页面开发都是写在xml文件中的,而flutter直接写在代码里(dart文件中),从目前我的认识来看,两者在UI上的“套娃”方式,flu

    2024年02月10日
    浏览(26)
  • Flutter实战-自定义键盘(一)

    用了两年的flutter,有了一些心得,从今天开始陆续更新一些案例,不虚头巴脑,只求实战有用,以供学习或使用flutter的小伙伴参考,学习尚浅,如有不正确的地方还望各路大神指正,以免误人子弟,在此拜谢~(原创不易,转发请标注来源和作者) 注意:无特殊说明,flutt

    2024年02月09日
    浏览(25)
  • Flutter自定义可拖动组件

    2024年02月10日
    浏览(32)
  • flutter的自定义系列雷达图

    自定义是flutter进阶中不可缺少的ui层知识点,这里我们来总结下: 在Flutter中,自定义绘制通常是通过使用 CustomPaint 和 CustomPainter 来实现的。 创建 CustomPaint 组件 首先,需要创建一个 CustomPaint 组件。 CustomPaint 是一个Widget,它可以作为其他组件的子组件,用于提供自定义绘制

    2024年02月09日
    浏览(34)
  • flutter 自定义分层级树形组件

    前提条件,需在pubspec.yaml中依赖如下三方组件 1.调用入口 2.函数buildDepartTree()代码 3.组件DepartGroupItemMouseRegionWidget代码如下: 4.函数buildChildDepartList()代码如下: 5.数据bean: 6.提供一个带标题、内容、底部两按钮的弹窗组件HLSimpleDialog,代码如下: 具体效果如下: 可修改Depar

    2024年02月07日
    浏览(39)
  • 03_Flutter自定义下拉菜单

    在Flutter的内置api中,可以使用showMenu实现类似下拉菜单的效果,或者使用PopupMenuButton组件,PopupMenuButton内部也是使用了showMenu这个api,但是使用showMenu时,下拉面板的显示已经被约定死了,只能放一个简单的列表,没有办法定制下来面板的ui,并且下拉面板的宽高需要通过指定

    2024年02月03日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包