[flutter] 앱 라운드 네비게이션 바 디자인을 위한 클리퍼 사용 예제
앱의 디자인을 개선하기 위한 한 가지 방법은 라운드 네비게이션 바를 추가하는 것입니다. Flutter에서는 이를 구현하기 위해 클리퍼(clipper)를 사용할 수 있습니다. 클리퍼를 사용하면 원하는 모양의 네비게이션 바를 만들 수 있습니다. 이번 포스트에서는 앱 라운드 네비게이션 바를 만들기 위해 클리퍼를 어떻게 사용하는지 알아보겠습니다.
Step 1: CustomClipper
클래스 생성
먼저, CustomClipper
클래스를 생성하여 원하는 모양의 네비게이션 바를 만듭니다. 아래는 샘플 코드입니다.
import 'package:flutter/material.dart';
class AppClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
final path = Path();
path.lineTo(0, size.height - 40);
path.quadraticBezierTo(size.width / 2, size.height, size.width, size.height - 40);
path.lineTo(size.width, 0);
path.close();
return path;
}
@override
bool shouldReclip(covariant CustomClipper<Path> oldClipper) {
return false;
}
}
getClip
메서드에서 원하는 모양의 클리핑 경로를 정의합니다. 위의 예제에서는 밑으로 내려가는 곡선 모양의 경로를 정의하였습니다. shouldReclip
메서드에서는 클리퍼를 다시 그릴지 여부를 결정합니다. 위의 예제에서는 false
를 반환하여 한 번 정의된 경로가 다시 그려지지 않도록 설정했습니다.
Step 2: 네비게이션 바에 클리퍼 적용하기
이제 앱의 네비게이션 바에 위에서 생성한 CustomClipper
를 적용해야 합니다.
import 'package:flutter/material.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
...
bottom: PreferredSize(
preferredSize: Size.fromHeight(80),
child: ClipPath(
clipper: AppClipper(),
child: Container(
color: Colors.blue,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
IconButton(
icon: Icon(Icons.home),
onPressed: () {},
),
IconButton(
icon: Icon(Icons.search),
onPressed: () {},
),
IconButton(
icon: Icon(Icons.settings),
onPressed: () {},
),
],
),
),
),
),
),
...
);
}
}
ClipPath
위젯을 사용하여 네비게이션 바를 감싸고, clipper
속성에 AppClipper
클래스를 전달하여 클리퍼를 적용합니다. 그리고 내부에 원하는 스타일과 아이콘을 추가하면 됩니다.
결론
이렇게 하면 Flutter에서 앱의 라운드 네비게이션 바를 구현할 수 있습니다. 클리퍼를 활용하여 다양한 모양의 네비게이션 바를 만들 수 있으니, 디자인에 창의성을 발휘해보세요!