Flutter 颤振中如何将曲线导航条的路径裁剪为圆形路径

Flutter 颤振中如何将曲线导航条的路径裁剪为圆形路径,flutter,flutter-layout,Flutter,Flutter Layout,我正在我的颤振项目中使用。但和我想要的不完全一样。有人能把它剪成像所附图片一样的圆形吗? 这是剪辑路径代码 class NavCustomPainter extends CustomPainter { double loc; double s; Color color; TextDirection textDirection; NavCustomPainter( double startingLoc, int itemsLength, this.color, this.textDirect

我正在我的颤振项目中使用。但和我想要的不完全一样。有人能把它剪成像所附图片一样的圆形吗? 这是剪辑路径代码

class NavCustomPainter extends CustomPainter {
double loc;
double s;
Color color;
TextDirection textDirection;

NavCustomPainter(
  double startingLoc, int itemsLength, this.color, this.textDirection) {
final span = 1.0 / itemsLength;
s = 0.2;
double l = startingLoc + (span - s) / 2;
loc = textDirection == TextDirection.rtl ? 0.8 - l : l;
}

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

final path = Path()
  ..moveTo(0, 0)
 ..lineTo((loc + 0.0) * size.width, 0)
  ..lineTo((loc + 0.015) * size.width, 0)
  ..cubicTo(
    (loc + s * 0.05) * size.width,
    size.height * 0.07,
    loc * size.width,
    size.height * 0.65,
    (loc + s * 0.50) * size.width,
    size.height * 0.65,
  )
  ..cubicTo(
    (loc + s + 0.01) * size.width,
    size.height * 0.65,
    (loc + s - s * 0.1) * size.width,
    size.height * 0.07,
    (loc + s - 0.01) * size.width,
    0,
  )
  ..lineTo(size.width, 0)
  ..lineTo(size.width, size.height)
  ..lineTo(0, size.height)
  ..close();
canvas.drawPath(path, paint);
}


我建议您使用颤振库中现成的形状,而不是自己绘制

请看这个利用形状的示例:

导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
debugShowCheckedModeBanner:false,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
int _计数器=0;
void _incrementCounter(){
设置状态(){
_计数器++;
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“示例代码”),
),
正文:中(
child:Text('您按下了$计数器次数的按钮'),
),
bottomNavigationBar:BottomAppBar(
形状:const CircularNotchedRectangle(),
儿童:容器(高度:50.0,),
),
浮动操作按钮:浮动操作按钮(
按下时:\ u递增计数器,
工具提示:“增量计数器”,
子:图标(Icons.add),
),
floatingActionButtonLocation:floatingActionButtonLocation.centerDocked,
);
}
}
将生成以下输出:


您可以自定义形状以精确地获得所需的输出。您甚至可以使用
CircularNotchedRectangle.getOuterPath
来获取描述带有平滑圆形凹口的矩形的
路径,并根据需要对其进行修改。

实际上,点击按钮会移动到新的点击位置