Flutter 如何在Flatter中创建这样的自定义应用程序栏?

Flutter 如何在Flatter中创建这样的自定义应用程序栏?,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,有人知道如何制作将圆的底部三分之一连接到底部的appbar吗? 这就是我能得到的: 这是我的密码。人的形象不是问题,左边和右边的填充物以及圆形的左下和右下才是问题。我无法实现这些目标 class CustomAppBar extends StatelessWidget with PreferredSizeWidget { @override Widget build(BuildContext context) { return AppBar( shape: Cu

有人知道如何制作将圆的底部三分之一连接到底部的appbar吗?

这就是我能得到的:

这是我的密码。人的形象不是问题,左边和右边的填充物以及圆形的左下和右下才是问题。我无法实现这些目标


class CustomAppBar extends StatelessWidget with PreferredSizeWidget {
  @override
  Widget build(BuildContext context) {
    return AppBar(
      shape: CustomShapeBorder(),
    );
  }

  @override
  // TODO: implement preferredSiz
  Size get preferredSize => Size.fromHeight(40);
}

class CustomShapeBorder extends ContinuousRectangleBorder {
  @override
  Path getOuterPath(Rect rect, {TextDirection textDirection}) {
    double x = 150, y = 45, r = 0.5;
    Path path = Path()
      ..addRRect(RRect.fromRectAndCorners(rect))
      ..moveTo(rect.bottomRight.dx - 30, rect.bottomCenter.dy)
      ..relativeQuadraticBezierTo(
          ((-x / 2) + (x / 6)) * (1 - r), 0, -x / 2 * r, y * r)
      ..relativeQuadraticBezierTo(
          -x / 6 * r, y * (1 - r), -x / 2 * (1 - r), y * (1 - r))
      ..relativeQuadraticBezierTo(
          ((-x / 2) + (x / 6)) * (1 - r), 0, -x / 2 * (1 - r), -y * (1 - r))
      ..relativeQuadraticBezierTo(-x / 6 * r, -y * r, -x / 2 * r, -y * r);
    path.close();
    return path;
  }
}

import'包装:flift/cupertino.dart';
进口“包装:颤振/材料.省道”;
类页面扩展StatefulWidget{
@凌驾
_pageState createState();
}
类pageState扩展了状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(立面:0,背景颜色:颜色。紫色,标题:行(mainAxisAlignment:mainAxisAlignment.end,子项:[
图标按钮(按下:(){},图标:图标(Icons.settings,),颜色:Colors.white,)
]主体:SingleChildScrollView(子对象:列(子对象:[
堆栈(子对象:[
容器(颜色:Colors.purple,宽度:MediaQuery.of(上下文)。大小。宽度,高度:
MediaQuery.of(context).size.height/5,
),行(mainAxisAlignment:mainAxisAlignment.spaceBetween,子项:[
填充(填充:EdgeInsets.only(),子项:
容器(宽度:130,装饰:盒子装饰(边框:边框。全部)(颜色:
颜色。白色),颜色:颜色。紫色,形状:长方形。圆形),
child:CircleAvatar(背景颜色:颜色。紫色,child:
[![enter image description here][1][1]image.asset(“assets/yourimg.png”,高度:100,),半径:70,)
),专栏(儿童:[
文本(“Ahmed AlKheerow”,样式:TextStyle(字体大小:20,字体重量:
FontWeight.bold.),
文本(“ID:93956”)
],) ])
])])));}}
使用Navigator.pushReplacement禁用后退按钮,而不是使用

..addRRect(RRect.fromRectAndCorners(rect))
使用


你现在可以查一下
..addRRect(RRect.fromRectAndCorners(rect))
..addRRect(RRect.fromLTRBAndCorners(
          10, 24, rect.bottomRight.dx - 10, rect.bottomRight.dy,
          bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10))