728x90
ModalBottomSheet 위젯은 화면을 어둡게 하고 하단에 시트를 표출시키는 위젯입니다.
보통 시트내에 버튼들을 구성하여 선택에 따른 이벤트를 받는 위주의 표현을 위해 사용하는 위젯이지만 유저 인터랙션에 따라 표현을 해야할 때의 구현 방법을 소개합니다.
SetState를 사용하기 위해선 ModalBottomSheet 내부에 StatefulBuilder 위젯을 추가하여 ModalBottomSheet 내에서 SetState 처리가 일어나도록 구현하면 됩니다.
아래는 구현하는 방법에 대한 코드 입니다.
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// 상태를 관리할 변수
int _counter = 0;
// 모달 하단 시트 표시 함수
void _showModalBottomSheet() {
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return StatefulBuilder(
// StatefulBuilder를 사용하여 setState를 하단 시트 내에서 사용할 수 있도록 함
builder: (BuildContext context, StateSetter setState) {
return Container(
padding: EdgeInsets.all(16.0),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('Counter: $_counter'),
ElevatedButton(
onPressed: () {
// setState를 사용하여 _counter를 업데이트
setState(() {
_counter++;
});
},
child: Text('Increment Counter'),
),
],
),
);
},
);
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('ModalBottomSheet with setState'),
),
body: Center(
child: ElevatedButton(
onPressed: _showModalBottomSheet,
child: Text('Show Modal Bottom Sheet'),
),
),
);
}
}
728x90
'Mobile > Flutter' 카테고리의 다른 글
[Flutter/플러터] 딜레이 함수 Future.delayed() (0) | 2024.02.07 |
---|---|
[Flutter] 뒤로 가기 두 번 입력 시 앱 종료되게 하기 (2) | 2023.11.22 |
[Flutter] 리스트 오버스크롤(List Overscroll)시 컬러 변경하기 (2) | 2023.11.16 |
[Flutter]앱 다국어(한국어) 지원하기 (0) | 2023.11.16 |
[Flutter] 위젯 터치 막기 (AbsorbPointer) (0) | 2023.11.15 |
댓글