嗨,我是新手,
我试图按照一些教程制作弯曲的应用栏 但我无法达到我想要的结果
经过一番谷歌搜索后,我可以做这个简单的曲线
这是我使用的Clipper代码
class CurvedClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
var path = Path();
path.lineTo(0, size.height - 30);
path.quadraticBezierTo(
size.width / 2, size.height, size.width, size.height - 30);
path.lineTo(size.width, 0);
path.close();
return path;
}
@override
bool shouldReclip(CustomClipper<Path> oldClipper) => false;
}
这是我的问题 反正有什么可以将svg曲线转换为该曲线剪切器?
答案 0 :(得分:1)
要构建类似的东西-您至少需要2个四方贝塞尔曲线和1个立方。
我已经举了一个示例,说明如何获得与图像上的效果最相似的结果,但是可能需要进行一些微调才能满足您的需求。
该代码没有提供注释,但是您可以通过更改变量并刷新应用程序来获得一个主意(至少需要了解贝塞尔曲线的工作原理)。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
backgroundColor: Colors.blue,
shape: CustomShapeBorder(),
leading: Icon(Icons.menu),
actions: <Widget>[
IconButton(icon: Icon(Icons.notifications),onPressed: (){},)
],
),
body: Container(),
),
);
}
}
class CustomShapeBorder extends ContinuousRectangleBorder {
@override
Path getOuterPath(Rect rect, {TextDirection textDirection}) {
final double innerCircleRadius = 150.0;
Path path = Path();
path.lineTo(0, rect.height);
path.quadraticBezierTo(rect.width / 2 - (innerCircleRadius / 2) - 30, rect.height + 15, rect.width / 2 - 75, rect.height + 50);
path.cubicTo(
rect.width / 2 - 40, rect.height + innerCircleRadius - 40,
rect.width / 2 + 40, rect.height + innerCircleRadius - 40,
rect.width / 2 + 75, rect.height + 50
);
path.quadraticBezierTo(rect.width / 2 + (innerCircleRadius / 2) + 30, rect.height + 15, rect.width, rect.height);
path.lineTo(rect.width, 0.0);
path.close();
return path;
}
}