Skip to content

Instantly share code, notes, and snippets.

@imaNNeo
Created October 9, 2020 22:24
Show Gist options
  • Save imaNNeo/76120c71edeae5507c39e597db736b20 to your computer and use it in GitHub Desktop.
Save imaNNeo/76120c71edeae5507c39e597db736b20 to your computer and use it in GitHub Desktop.
BottomNavigation2
import 'package:flutter/material.dart';
main() => runApp(MaterialApp(home: MyHomePage()));
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter4Fun.com'),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(18.0),
child: MyBottomSheet(),
),
),
);
}
}
class MyBottomSheet extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CustomPaint(
painter: _MyBottomSheetCustomPainter(),
size: Size(
double.infinity,
74,
),
);
}
}
class _MyBottomSheetCustomPainter extends CustomPainter {
static final double holeWidth = 80;
static final double holeWidthHalf = holeWidth / 2;
static final double holeHeight = 30;
final double targetXPercent;
_MyBottomSheetCustomPainter({this.targetXPercent = 0.5});
@override
void paint(Canvas canvas, Size size) {
Path p = new Path();
final targetX = size.width * targetXPercent;
final point0 = Offset(0, 0);
p.moveTo(point0.dx, point0.dy);
final point1 = Offset(targetX - holeWidthHalf, 0);
p.lineTo(point1.dx, point1.dy);
final point2 = Offset(targetX, holeHeight);
final controlPoint1 = Offset(point1.dx + 24, 0);
final controlPoint2 = Offset(point1.dx + 15, 28);
p.cubicTo(
controlPoint1.dx,
controlPoint1.dy,
controlPoint2.dx,
controlPoint2.dy,
point2.dx,
point2.dy,
);
final point3 = Offset(targetX + holeWidthHalf, 0);
final controlPoint3 = Offset(point3.dx - 15, 28);
final controlPoint4 = Offset(point3.dx - 24, 0);
p.cubicTo(
controlPoint3.dx,
controlPoint3.dy,
controlPoint4.dx,
controlPoint4.dy,
point3.dx,
point3.dy,
);
final point4 = Offset(size.width, 0);
p.lineTo(point4.dx, point4.dy);
canvas.drawPath(
p,
Paint()
..color = Colors.black
..style = PaintingStyle.stroke
..strokeWidth = 2);
drawPoint(canvas, point0);
drawPoint(canvas, point1);
drawPoint(canvas, point2);
drawPoint(canvas, point3);
drawPoint(canvas, point4);
}
void drawPoint(Canvas canvas, Offset point) {
canvas.drawCircle(point, 3, Paint()..color = Colors.black);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => true;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment