Flutter 集装箱颤振中的曲线生成方法

Flutter 集装箱颤振中的曲线生成方法,flutter,dart,Flutter,Dart,如何在容器中创建这样的曲线在这张图片中实际上是圆形的Appbar。要做到这一点: AppBar( title: Text('Anything'), shape: RoundedRectangleBorder( borderRadius: BorderRadius.vertical( bottom: Radius.circular(30), ), ), ), 如果要使用此形状的容器: Container( height:

如何在容器中创建这样的曲线

在这张图片中实际上是圆形的Appbar。要做到这一点:

AppBar(
    title: Text('Anything'),
    shape: RoundedRectangleBorder(
      borderRadius: BorderRadius.vertical(
        bottom: Radius.circular(30),
      ),
    ),
  ),
如果要使用此形状的容器:

Container(
    height: 200.0,
    decoration: new BoxDecoration(
      color: Colors.red,
      borderRadius: BorderRadius.vertical(
          bottom: Radius.elliptical(
              MediaQuery.of(context).size.width, 100.0)),
    ),
  ),

在这张图片中,它实际上是圆形的。要做到这一点:

AppBar(
    title: Text('Anything'),
    shape: RoundedRectangleBorder(
      borderRadius: BorderRadius.vertical(
        bottom: Radius.circular(30),
      ),
    ),
  ),
如果要使用此形状的容器:

Container(
    height: 200.0,
    decoration: new BoxDecoration(
      color: Colors.red,
      borderRadius: BorderRadius.vertical(
          bottom: Radius.elliptical(
              MediaQuery.of(context).size.width, 100.0)),
    ),
  ),

这是一个圆形化身,只需使用CircleAvatar小部件即可

    CircleAvatar(
  backgroundImage: NetworkImage(userAvatarUrl),
)

更多详细信息请点击此处

这是一个圆形化身,只需使用CircleAvatar小部件即可

    CircleAvatar(
  backgroundImage: NetworkImage(userAvatarUrl),
)

这里有更多详细信息

我使用CustomPainter绘制所需的容器,并将其放置在堆栈底部。其余的小部件可以根据需要在顶部对齐。通过填充列小部件完成屏幕的其余部分

输出图像如图所示:

代码


我使用CustomPainter绘制所需的容器,并将其放置在堆栈的底部。其余的小部件可以根据需要在顶部对齐。通过填充列小部件完成屏幕的其余部分

输出图像如图所示:

代码


如果需要为轮廓图片所在的容器创建曲线,最好使用带有自定义裁剪器的曲线

像这样的东西可以达到目的:

ClipPath(
  clipper: CurveClipper(),
  child: Container(
    color: Colors.red,
    height: 200.0,
  ),
);
我们的自定义CurveClipper要求我们绘制一条包含bézier曲线的路径,以在容器底部获得该曲线形状:

class CurveClipper extends CustomClipper<Path> {
  @override
  Path getClip(Size size) {
    int curveHeight = 40;
    Offset controlPoint = Offset(size.width / 2, size.height + curveHeight);
    Offset endPoint = Offset(size.width, size.height - curveHeight);

    Path path = Path()
      ..lineTo(0, size.height - curveHeight)
      ..quadraticBezierTo(controlPoint.dx, controlPoint.dy, endPoint.dx, endPoint.dy)
      ..lineTo(size.width, 0)
      ..close();

    return path;
  }

  @override
  bool shouldReclip(CustomClipper<Path> oldClipper) => false;
}

如果需要为轮廓图片所在的容器创建曲线,最好使用带有自定义裁剪器的曲线

像这样的东西可以达到目的:

ClipPath(
  clipper: CurveClipper(),
  child: Container(
    color: Colors.red,
    height: 200.0,
  ),
);
我们的自定义CurveClipper要求我们绘制一条包含bézier曲线的路径,以在容器底部获得该曲线形状:

class CurveClipper extends CustomClipper<Path> {
  @override
  Path getClip(Size size) {
    int curveHeight = 40;
    Offset controlPoint = Offset(size.width / 2, size.height + curveHeight);
    Offset endPoint = Offset(size.width, size.height - curveHeight);

    Path path = Path()
      ..lineTo(0, size.height - curveHeight)
      ..quadraticBezierTo(controlPoint.dx, controlPoint.dy, endPoint.dx, endPoint.dy)
      ..lineTo(size.width, 0)
      ..close();

    return path;
  }

  @override
  bool shouldReclip(CustomClipper<Path> oldClipper) => false;
}

你能清楚你需要实现哪一部分吗?因为容器中的曲线可能意味着图片中的红色弯曲部分或圆形图像或弯曲容器上的圆形图像等。您是否清楚需要实现哪一部分?因为容器中的曲线可以指图片中的红色弯曲部分或圆形图像或弯曲容器上的圆形图像等。。