我正试着用Flutter 翼自定义绘图库绘制下面的图片.我怎么才能画出这个形状呢?

enter image description here

我的代码和结果

import 'package:flutter/material.dart';

class CurvePainter extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {
    var paint = new Paint();
    paint.color = Colors.green[800];
    paint.style = PaintingStyle.fill;

    var path = new Path();
    path.lineTo(0, size.height * 0.3);

    path.quadraticBezierTo(size.width * 0.35, size.height * 0.4, size.width * 0.7, size.height * 0.21);
    path.quadraticBezierTo(size.width * 0.6, size.height * 0.19, size.width * 0.9, size.height * 0.15);
    path.quadraticBezierTo(size.width , size.height * 0.05, size.width * 0.6, 0);

    canvas.drawPath(path, paint);
  }

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

enter image description here

推荐答案

您 Select 的贝塞尔曲线不是正确的.


我在这里说明我在哪里应用了哪些曲线.黄点为start & end points,黑点为control points.
在代码中,我从左到右(从上到下)使用arcToPoint代替conicTo,因为它工作得更好.请注意,arcToPoint也会绘制圆锥曲线.

Explanation illustration

这只是一个rough sketch,也就是说proportions是完全关闭的,但至少我可以分享你应该使用的适当的Bézier curves,以实现你想要的输出.

@override
void paint(Canvas canvas, Size size) {
  final paint = Paint()
    ..color = Colors.red[800]
    ..style = PaintingStyle.fill;

  final path = new Path()
    ..moveTo(size.width * .6, 0)
    ..quadraticBezierTo(
    size.width * .7,
    size.height * .08,
    size.width * .9,
    size.height * .05,
  )
    ..arcToPoint(
    Offset(
      size.width * .93,
      size.height * .15,
    ),
    radius: Radius.circular(size.height * .05),
    largeArc: true,
  )
    ..cubicTo(
    size.width * .6,
    size.height * .15,
    size.width * .5,
    size.height * .46,
    0,
    size.height * .3,
  )
    ..lineTo(0, 0)
    ..close();

  canvas.drawPath(path, paint);
}

请注意,我更新了语法,以便对变量使用..级联表示法和final关键字.

Dart相关问答推荐

如何在 Flutter 上实现事件监听器或委托

Flutter drawArc() 方法绘制完整的圆而不仅仅是圆弧

有没有办法在用户停止输入后发送请求?

在`lib`文件夹中使用`src`子文件夹有什么好处吗

Dart 包版本如何工作以及我应该如何对我的 Flutter 插件进行版本控制?

在Flatter中,依赖项必须指定版本号?

判断无状态小部件是否在Flatter中处理

如何从Flatter应用程序中导航到网页?(OAuth)

如何从类中访问元数据注释?

Flutter:主题未应用于文本小部件

不推荐使用AnteStorStateofType,请改用findAncestorStateOfType

如何在 flutter 中对json进行字符串化

如何仅从 DateTime.now() 中提取时间;

断言失败时如何在 Dart 中打印消息?

如何从 JavaScript 调用 Dart 函数

如何在dart中获得一周的开始或结束

在 Dart 中打开类类型

Null aware函数调用运算符

dart 折叠(Fold)与减少(Reduce)

你需要在 Dart 中使用new关键字吗?