Как я могу запустить CustomClipper (ClipPath) сверху справа, а не сверху слева - PullRequest
1 голос
/ 22 апреля 2020

Мой CustomClipper идет из верхнего левого угла, но я хочу, чтобы он начинался сверху справа. Вот мой код: Clipper:

class ProfileBarClipper extends CustomClipper<Path> {
  @override
  Path getClip(Size size) {
    var path = new Path();
    path.lineTo(0, size.height - 50);
    var controllPoint = Offset(50, size.height);
    var endPoint = Offset(size.width / 2, size.height);
    path.quadraticBezierTo(
        controllPoint.dx, controllPoint.dy, endPoint.dx, endPoint.dy);
    path.lineTo(size.width, size.height);
    path.lineTo(size.width, 0);

    return path;
  }

  @override
  bool shouldReclip(CustomClipper<Path> oldClipper) {
    return true;
  }
}

Использование ProfileBarClipper ():

ClipPath(
    clipper: ProfileBarClipper(),
    child: Container(
        color: Colors.white,
        height: 200,
    ),
)

А вот изображение этого кода: https://i.stack.imgur.com/rVsL3.png

1 Ответ

1 голос
/ 22 апреля 2020

Используйте moveTo.

Вот так.

var path = new Path();
path.moveTo(size.width,0); // (size.width, 0) means top right

ОБНОВЛЕНИЕ: Проверьте это ...

class ProfileBarClipper extends CustomClipper<Path> {
  @override
  Path getClip(Size size) {
    var path = new Path();
    path.moveTo(size.width, 0);
    path.lineTo(size.width, size.height - 50);
    var controllPoint = Offset(size.width-50, size.height);
    var endPoint = Offset(size.width / 2, size.height);
    path.quadraticBezierTo(
        controllPoint.dx, controllPoint.dy, endPoint.dx, endPoint.dy);
    path.lineTo(0, size.height);
    path.lineTo(0, 0);

    return path;
  }

  @override
  bool shouldReclip(CustomClipper<Path> oldClipper) {
    return true;
  }
}

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...