Flutter 使用分数平移时,按下区域上的MaterialButton会被剪裁
我正在构建一个应用程序,我的一些材质按钮(CustomButtonToAddPage)漂浮在导航栏上。从视觉上看,这看起来很完美,但只有头部没有溢出的部分才可以敲击 我曾尝试将自定义按钮移动到header小部件中,并将偏移量改为向下,但同样的问题仍然存在 我有一种感觉,它要么与我构建的clipper有关,要么就是没有使用合适的小部件来完成这项工作 在这个颤振的东西上仍然是新的,显然代码需要清理Flutter 使用分数平移时,按下区域上的MaterialButton会被剪裁,flutter,dart,Flutter,Dart,我正在构建一个应用程序,我的一些材质按钮(CustomButtonToAddPage)漂浮在导航栏上。从视觉上看,这看起来很完美,但只有头部没有溢出的部分才可以敲击 我曾尝试将自定义按钮移动到header小部件中,并将偏移量改为向下,但同样的问题仍然存在 我有一种感觉,它要么与我构建的clipper有关,要么就是没有使用合适的小部件来完成这项工作 在这个颤振的东西上仍然是新的,显然代码需要清理 eventHeader(_scaffoldKey), Row(
eventHeader(_scaffoldKey),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Padding(
padding: EdgeInsets.only(left: 0),
child: FlatButton(
onPressed: () {
print('Sort By Date');
},
child: Icon(Icons.swap_vert)),
),
customButtonGoToAddPage(context, '/event_add'),
],
),
eventHeader(_scaffoldKey),
划船(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
填充物(
填充:仅限边设置(左:0),
孩子:扁平按钮(
已按下:(){
打印(“按日期排序”);
},
子:图标(Icons.swap_vert)),
),
CustomButtongToAddPage(上下文“/event_add”),
],
),
//转到添加页面
行CustomButtonToAddPage(构建上下文上下文,字符串url){
返回行(
mainAxisAlignment:mainAxisAlignment.end,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
分馏翻译(
平移:偏移(-0.2,-0.6),
子对象:对齐(
子:材质按钮(
最小宽度:30.0,
身高:60,
textColor:Colors.green[500],
颜色:颜色,白色,
子:图标(
Icons.add,
尺码:30,
),
已按下:(){
Navigator.of(context.pushNamed)(url);
},
形状:新的RoundedRectangleBorder(
borderRadius:新的borderRadius.circular(100.0)),
校准:分数偏移(0.5,0.0),
),
),
],
);
}
//****页眉
ClipPath事件头(键){
返回ClipPath(
裁剪器:BottomWaveClipper(),
子:容器(
装饰:盒子装饰(
gradient:getAppGradient(),
),
身高:130,
填充:仅限边缘设置(顶部:25.0,底部:5.0),
子:列(
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
划船(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
填充物(
填充:从LTRB(20,30,0,0)开始的边缘设置,
儿童:手势检测器(
onTap:()=>{key.currentState.openDrawer()},
子:图标(
图标菜单,
颜色:颜色,白色,
),
),
),
纵队(
儿童:[
headerTitleRow(“事件”),
headerSubtitleRow(“需要更多控制?创建事件”),
],
),
填充物(
填充:来自LTRB(40,20,5,0)的边缘设置,
),
],
),
],
),
),
);
}
//主波削波器
类BottomWaveClipper扩展了CustomClipper{
@凌驾
路径getClip(大小){
var path=新路径();
path.lineTo(0.0,size.height-0);
//var firstControlPoint=偏移量(size.width/4,size.height);
//var firstEndPoint=偏移量(size.width/2.25,size.height-30.0);
//path.quadraticBezierTo(firstControlPoint.dx,firstControlPoint.dy,
//firstEndPoint.dx,firstEndPoint.dy);
第二控制点=
偏移量(size.width-(size.width/2),size.height-40);
var secondEndPoint=偏移(size.width,size.height-0);
path.quadraticBezierTo(secondControlPoint.dx,secondControlPoint.dy,
secondEndPoint.dx,secondEndPoint.dy);
path.lineTo(size.width,size.height-0);
path.lineTo(size.width,0.0);
path.close();
返回路径;
}
@凌驾
bool shouldReclip(CustomClipper oldClipper)=>false;
}
// Go To Add Page
Row customButtonGoToAddPage(BuildContext context, String url) {
return Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
FractionalTranslation(
translation: Offset(-0.2, -0.6),
child: Align(
child: MaterialButton(
minWidth: 30.0,
height: 60,
textColor: Colors.green[500],
color: Colors.white,
child: Icon(
Icons.add,
size: 30,
),
onPressed: () {
Navigator.of(context).pushNamed(url);
},
shape: new RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(100.0))),
alignment: FractionalOffset(0.5, 0.0),
),
),
],
);
}
// **** Page Head
ClipPath eventHeader(key) {
return ClipPath(
clipper: BottomWaveClipper(),
child: Container(
decoration: BoxDecoration(
gradient: getAppGradient(),
),
height: 130,
padding: EdgeInsets.only(top: 25.0, bottom: 5.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: EdgeInsets.fromLTRB(20, 30, 0, 0),
child: GestureDetector(
onTap: () => {key.currentState.openDrawer()},
child: Icon(
Icons.menu,
color: Colors.white,
),
),
),
Column(
children: <Widget>[
headerTitleRow("EVENTS"),
headerSubtitleRow("Need More Control? Create An Event"),
],
),
Padding(
padding: EdgeInsets.fromLTRB(40, 20, 5, 0),
),
],
),
],
),
),
);
}
// Main App Wave Clipper
class BottomWaveClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
var path = new Path();
path.lineTo(0.0, size.height - 0);
// var firstControlPoint = Offset(size.width / 4, size.height);
// var firstEndPoint = Offset(size.width / 2.25, size.height - 30.0);
// path.quadraticBezierTo(firstControlPoint.dx, firstControlPoint.dy,
// firstEndPoint.dx, firstEndPoint.dy);
var secondControlPoint =
Offset(size.width - (size.width / 2), size.height - 40);
var secondEndPoint = Offset(size.width, size.height - 0);
path.quadraticBezierTo(secondControlPoint.dx, secondControlPoint.dy,
secondEndPoint.dx, secondEndPoint.dy);
path.lineTo(size.width, size.height - 0);
path.lineTo(size.width, 0.0);
path.close();
return path;
}
@override
bool shouldReclip(CustomClipper<Path> oldClipper) => false;
}