일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- React JS
- Maui
- db
- 오류
- 함수
- 바인딩
- Flutter
- 애니메이션
- 깃허브
- Animation
- 파이어베이스
- Binding
- Firebase
- JavaScript
- 플러터
- MSSQL
- MVVM
- AnimationController
- 닷넷
- 리엑트
- spring boot
- page
- GitHub
- listview
- 마우이
- HTML
- MS-SQL
- .NET
- 자바스크립트
- typescript
- Today
- Total
개발노트
27. [Flutter] showModalBottomSheet 로 하단에서 올라오는 작은 화면 만들기 본문
showModalBottomSheet
showModalBottomSheet 위젯을 이용하면 하단에서 올라오는 Sheet를 만들수 있습니다.
GestureDetector의 onTap을 이용하여 클릭했을 때 Sheet가 나오는 기능을 만들어보겠습니다.
Sheet안에는 ListView의 아이템이 나오도록 만들었습니다.
예시.
import 'package:flutter/material.dart';
class TestScreen extends StatefulWidget {
const TestScreen({super.key});
@override
State<TestScreen> createState() => _TestScreenState();
}
class _TestScreenState extends State<TestScreen> {
void _onTap(BuildContext context) async {
await showModalBottomSheet(
shape: Border.all(),
isScrollControlled: true,
context: context,
builder: (context) {
return Container(
height: MediaQuery.of(context).size.height * 0.7,
decoration: const BoxDecoration(color: Colors.white),
clipBehavior: Clip.hardEdge,
child: Scaffold(
appBar: AppBar(
centerTitle: true,
elevation: 0,
title: const Text(
"showModalBottomSheet",
style: TextStyle(color: Colors.black),
),
),
body: ListView.separated(
padding: const EdgeInsets.all(10),
itemCount: 3,
itemBuilder: (context, index) {
return const Row(
children: [
CircleAvatar(
child: FaIcon(FontAwesomeIcons.guitar),
),
Text("Guitar")
],
);
},
separatorBuilder: (context, index) => const SizedBox(
height: 20,
),
),
),
);
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: GestureDetector(
onTap: () => _onTap(context),
child: const CircleAvatar(
radius: 30,
child: Text("Gyu"),
),
),
),
);
}
}
설명.
1. 클릭할 위젯에 GestureDetector의 onTap: () => _onTap(context) 를 통해 BuildContext를 메소드에 넘겨줍니다.
2. 비동기 함수를 만들기 위해 async을 붙이고, showModalBottomSheet 를 await 합니다.
void _onTap(BuildContext context) async {
await showModalBottomSheet(
shape: Border.all(),
//shape는 Border와 같은 테두리 속성을 설정합니다.
isScrollControlled: true,
//isScrollControlled를 true로 설정하여 높이가 자동으로 설정되는 것을 해지하고 아래 위젯의 높이로 설정합니다.
context: context,
builder: (context) {
return Container(
height: MediaQuery.of(context).size.height * 0.7,
//MediaQury는 단말기의 물리적 정보를 가져오는 역할을 하며 여기서는 사용 단말기의 높이를 가져옵니다.
//연산을 통해 사용 단말기의 높이의 70%의 높이로 Sheet 높이를 설정합니다.
decoration: const BoxDecoration(color: Colors.white),
//decoration:을 설정해야 높이가 적용됩니다.
clipBehavior: Clip.hardEdge,
3. Sheet에 나올 위젯들을 builder: 에 작성합니다.
'앱 개발 > Flutter' 카테고리의 다른 글
29. [Flutter] GridView 로 분할 화면 만들기(표 처럼) (0) | 2023.09.14 |
---|---|
28. [Flutter] TabBar, TabBarView로 상단 바 만들기 (0) | 2023.09.13 |
26. [Flutter] VideoPlayer 위젯으로 앱에 동영상 활용하기 (0) | 2023.07.19 |
25. [Flutter] PageView List의 item 값 Page형태로 전환시키기 (0) | 2023.07.17 |
24. [Flutter] AnimatedCrossFade 화면 전환 애니메이션 및 Drag 기능 만들기(with GestureDetector) (0) | 2023.07.07 |