答案 0 :(得分:3)
您可以使用CustomPainter。看看this great example上的用法。
这是您要实现的目标的一个小示例(尽管我没有做圆角边框,但是您可以轻松扩展:
import 'package:flutter/material.dart';
main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Drawing Paths',
home: Scaffold(
body: Center(
child: GestureDetector(
onTap: () => print('Do Something'),
child: CustomPaint(
size: Size(200, 50),
painter: CurvePainter(),
),
),
),
),
);
}
}
class CurvePainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
var paint = Paint()
..color = Color(0xFFE32087)
..style = PaintingStyle.fill;
var path = Path()
..moveTo(size.width*0.2, 0)
..lineTo(size.width, size.height*0.2)
..lineTo(size.width, size.height)
..lineTo(0, size.height);
canvas.drawPath(path, paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return true;
}
}
结果:
答案 1 :(得分:1)
使用代表该按钮的图像并将其用GestureDetector
包裹起来(不建议这样做,但有时用户界面非常复杂,以至于仅在Flutter中制作它可能会过大,因此牢记此选项还不错)或和CustomClipper
一起玩!
您要做的是创建一个Container
或FlatButton
并用ClipPath
包裹起来,在其中您提供一个CustomClipper
作为{的clipper
属性{1}}。在ClipPath
的实现中,您可以按照自己的意愿来调整小部件的形状。查看这篇出色的中型帖子(不是我写的,鸣谢于Kinjal Dhamat),她在其中解释了如何使用CustomClipper
和塑造所需内容的各种方式:
https://medium.com/flutter-community/flutter-custom-clipper-28c6d380fdd6
如pskink所建议的那样,创建一个自定义CustomClipper
类(例如将其设置为ShapeBorder
的{{1}}属性),虽然有很多好处,但还需要一些其他知识,例如看看这篇文章: