[-Flutter 自定义组件-] 圆形进度条

本文介绍了如何在Flutter中创建一个圆形进度条组件,包括定义描述对象类Progress,自定义组件CircleProgressWidget和ProgressPainter,详细讲解了绘制进度条、箭头和点的步骤,并提供了组件的使用示例。
摘要由CSDN通过智能技术生成

 

 

 

 

void main() => runApp(MaterialApp(
    title: 'Flutter Demo',
    theme: ThemeData(
      primarySwatch: Colors.blue,
    ),
    home: Scaffold(
        appBar: AppBar(
          title: Text("Flutter 之旅"),
        ),
        body: TestStateful() //内置案例
    )
));

1.准备阶段

1.1:定义描述对象类Progress

将需要变化的属性抽离出一个描述类,传参方便些

///信息描述类 [value]为进度,在0~1之间,进度条颜色[color],
///未完成的颜色[backgroundColor],圆的半径[radius],线宽[strokeWidth]
///小点的个数[dotCount] 样式[style] 完成后的显示文字[completeText]
class Progress {
  double value;
  Color color;
  Color backgroundColor;
  double radius;
  double strokeWidth;
  int dotCount;
  TextStyle style;
  String completeText;

  Progress({this.value,
      this.color,
      this.backgroundColor,
      this.radius,
      this.strokeWidth,
      this.completeText="OK",
       this.style,
      this.dotCount = 40
      });
}

1.2:自定义组件类CircleProgressWidget

这便是我们的组件

class CircleProgressWidget extends StatefulWidget {
  final Progress progress;
  CircleProgressWidget({Key key, this.progress}) : super(key: key);
  @override
  _CircleProgressWidgetState createState() => _CircleProgressWidgetState();
}

class _CircleProgressWidgetState extends State<CircleProgressWidget> {
  @override
  Widget build(BuildContext context) {
  
    return Container();
  }
}

1.3:自定义ProgressPainter

我们的绘制逻辑在这里进行

class ProgressPainter extends CustomPainter {
  Progress _progress;
  Paint _paint;
  Paint _arrowPaint;//箭头的画笔
  Path _arrowPath;//箭头的路径
  double _radius;//半径

  ProgressPainter(
    this._progress,
  ) {
    _arrowPath=Path();
    _arrowPaint=Paint();
    _paint = Paint();
    _radius = _progress.radius - _progress.strokeWidth / 2;
  }

  @
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter 中,你可以使用自定义组件来创建树状图。下面是一个简单的示例: 首先,创建一个名为 `TreeNode` 的自定义组件,用于表示树的节点: ```dart class TreeNode extends StatelessWidget { final String title; final List<TreeNode> children; TreeNode({required this.title, required this.children}); @override Widget build(BuildContext context) { return Column( children: [ Text(title), SizedBox(height: 10), Column( children: children.map((node) => TreeNode(title: node.title, children: node.children)).toList(), ), ], ); } } ``` 然后,可以使用 `TreeNode` 组件来构建树状图。例如,假设我们有以下的树结构: ``` - Root - Node 1 - Leaf 1.1 - Leaf 1.2 - Node 2 - Leaf 2.1 - Node 3 ``` 可以使用以下代码来构建树状图: ```dart TreeNode root = TreeNode( title: 'Root', children: [ TreeNode( title: 'Node 1', children: [ TreeNode(title: 'Leaf 1.1', children: []), TreeNode(title: 'Leaf 1.2', children: []), ], ), TreeNode( title: 'Node 2', children: [ TreeNode(title: 'Leaf 2.1', children: []), ], ), TreeNode(title: 'Node 3', children: []), ], ); ``` 最后,将 `root` 组件放入 `build` 方法中的 `Widget` 树中进行渲染: ```dart @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Tree Example'), ), body: SingleChildScrollView( child: TreeNode(title: root.title, children: root.children), ), ); } ``` 这样,你就可以在 Flutter 应用中显示一个简单的树状图了。根据实际需求,你可以对 `TreeNode` 组件进行更多的自定义和样式调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值