答案 0 :(得分:4)
您可以通过合成小部件来创建该设计,这就是Flutter的美,这是我制作的示例:
class MyCustomButton extends StatelessWidget {
final String title;
final Color color;
final IconData icon;
final radius = 35.0;
final VoidCallback onTap;
const MyCustomButton({
Key key,
this.title,
this.color,
this.icon,
this.onTap,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Material(
color: Colors.transparent,
clipBehavior: Clip.hardEdge,
child: InkWell(
onTap: onTap,
child: SizedBox(
height: 2 * radius,
child: Stack(
fit: StackFit.expand,
children: [
Positioned(
top: 0.0,
left: radius,
right: 0.0,
bottom: 0.0,
child: Align(
child: Container(
height: radius + 10,
color: color,
alignment: Alignment.center,
child: Text(
title,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 22,
color: Colors.white,
fontWeight: FontWeight.w400,
),
),
),
),
),
Align(
alignment: Alignment.centerLeft,
child: Container(
height: 2 * radius,
width: 2 * radius,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: color,
),
child: Center(
child: Container(
height: 2 * radius - 5,
width: 2 * radius - 5,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.white,
),
child: Icon(icon),
),
),
),
),
],
),
),
),
);
}
}
用法
SizedBox(
width: 300,
child: MyCustomButton(
title: "Click to Login",
color: Colors.orange,
icon: Icons.lock_open,
onTap: () {
print("Tapped here");
},
),
),
结果
您可以在此处找到更多信息:https://flutter.dev/docs/development/ui/layout