Flutter 我怎样才能像这个模型一样用半径自定义画师创建圆弧

Flutter 我怎样才能像这个模型一样用半径自定义画师创建圆弧,flutter,flutter-layout,Flutter,Flutter Layout,请告诉我如何使用Radius CustomPainter创建此弧形UI组件,如此实体模型设计 起始角和结束角之间必须有间隙 代码: 类ArcPainter扩展了CustomPainter{ 最终双角度=310.0; 双角度(双角度)=>角度*pi/180.0; @凌驾 空心油漆(帆布,尺寸){ 最终偏移中心=偏移(尺寸.宽度/2.0,尺寸.高度/2.0); 最终双半径=尺寸.宽度/3.0; 油漆油漆=油漆() ..strokeCap=strokeCap.round ..冲程宽度=8.0 …风格

请告诉我如何使用Radius CustomPainter创建此弧形UI组件,如此实体模型设计

起始角和结束角之间必须有间隙

代码:
类ArcPainter扩展了CustomPainter{
最终双角度=310.0;
双角度(双角度)=>角度*pi/180.0;
@凌驾
空心油漆(帆布,尺寸){
最终偏移中心=偏移(尺寸.宽度/2.0,尺寸.高度/2.0);
最终双半径=尺寸.宽度/3.0;
油漆油漆=油漆()
..strokeCap=strokeCap.round
..冲程宽度=8.0
…风格=绘画风格笔划
…颜色=颜色。粉红色;
帆布拉弧(
矩形自圆(中心:中心,半径:半径),
toAngle(110.0),
角度,
是的,
油漆,
);
}
@凌驾
bool shouldRepaint(CustomPainter oldDelegate)=>true;
}
问题: 这是我的圆弧半径的电流输出。问题是弧形间隙中显示了边界。我想去掉缺口中的边界


您告诉它使用中心来缩小间隙。您可以告诉它不要这样做:

canvas.drawArc(
      Rect.fromCircle(center: center, radius: radius),
      toAngle(110.0),
      toAngle(angle),
      false, // this is called "useCenter" for a reason...
      paint,
    );

可以创建drawPath而不是drawArc


我们不是免费的代码编写服务,我们帮助人们编写代码。请发布到目前为止你能做的事情和你尝试过的事情,并解释你到底被困在哪里。@nvoigt谢谢你的评论。我不是要你的密码。我甚至不认为你是一个免费的代码编写服务。如果可能的话,我会更新我的帖子。请帮助我。如果你想制作一个仪表图,你可以看看这个软件包,除非你需要使用自定义画师来实现。这个问题看起来好多了:)看起来这是实现这个CustomPainter小部件的完美方式+一票
 @override
  void paint(Canvas canvas, Size size) {
    final center = size.center(Offset.zero);

    final oval = Rect.fromCenter(
      center: center,
      width: size.width,
      height: size.height,
    );

    var progressPath = _path(oval, 200);
    var progressPaint = _paint(Color(0xFF8987F7));

    var backgroundPath = _path(oval, 280);
    var backgroundPaint = _paint(Color(0xFF3a329e));

    canvas
      ..drawPath(backgroundPath, backgroundPaint)
      ..drawPath(progressPath, progressPaint);
  }

  Paint _paint(Color color) {
    return Paint()
      ..strokeCap = StrokeCap.round
      ..strokeWidth = 15.0
      ..style = PaintingStyle.stroke
      ..color = color;
  }

  Path _path(Rect oval, double angle) {
    return Path()
      ..addArc(
        oval,
        toAngle(130),
        toAngle(angle),
      );
  }