Develop/Flutter
[Flutter] 밑에서 올라오는 팝업 위젯 (Bottom Sheet)
issuemaker99
2025. 3. 4. 11:16
728x90
Flutter에서 화면 아래에서 위로 올라오는 팝업을 만들려면 showModalBottomSheet 또는 showBottomSheet을 사용하면 됩니다.
1️⃣ showModalBottomSheet (모달 바텀시트)
• 화면을 덮는 반투명 배경이 추가됨 (다른 영역 클릭 시 닫힘)
• 닫을 때는 Navigator.pop(context) 사용
🔧 예제: showModalBottomSheet 사용
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text("Bottom Sheet 예제")),
body: Center(
child: ElevatedButton(
onPressed: () {
showModalBottomSheet(
context: context,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
),
builder: (context) {
return Container(
height: 200,
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text("옵션 선택", style: TextStyle(fontSize: 18)),
ListTile(
leading: const Icon(Icons.photo),
title: const Text("갤러리에서 선택"),
onTap: () => Navigator.pop(context),
),
ListTile(
leading: const Icon(Icons.camera),
title: const Text("카메라 촬영"),
onTap: () => Navigator.pop(context),
),
],
),
);
},
);
},
child: const Text("바텀시트 열기"),
),
),
),
);
}
}
✅ 화면을 덮는 효과 + 닫을 때 다른 영역을 터치하면 자동으로 닫힘
2️⃣ showBottomSheet (항상 열려 있는 바텀시트)
• Scaffold에서 showBottomSheet을 사용하면 닫기 버튼을 눌러야 닫힘
• 자동으로 닫히지 않음 (Navigator.pop(context)를 호출해야 닫힘)
🔧 예제: showBottomSheet 사용
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text("Persistent Bottom Sheet")),
body: Builder(
builder: (context) => Center(
child: ElevatedButton(
onPressed: () {
showBottomSheet(
context: context,
builder: (context) {
return Container(
height: 150,
color: Colors.blue[100],
child: Center(
child: ElevatedButton(
onPressed: () => Navigator.pop(context),
child: const Text("닫기"),
),
),
);
},
);
},
child: const Text("바텀시트 열기"),
),
),
),
),
);
}
}
✅ 닫기 버튼을 눌러야 사라지는 바텀시트
✅ 모달이 아니라서 배경을 터치해도 닫히지 않음
위젯 | 특징 | 닫는 방법 | 사용 예시 |
showModalBottomSheet | 반투명 배경 + 자동 닫힘 | 다른 영역 클릭 | 옵션 선택, 메뉴 팝업 |
showBottomSheet | 항상 열려 있음 | 버튼 클릭 필요 | 항상 떠 있는 바텀시트 (예: 음악 플레이어) |
👉 일반적인 경우 showModalBottomSheet를 사용하면 됩니다! 🚀
LIST