반응형
들어가며
SnackBar 위젯이란?
- 화면 하단에 일시적인 메시지를 표시하는 위젯
- 어떤 작업이 성공적으로 완료되거나 오류가 발생했을 때 사용자에게 알리는 역할.
예제
main.dart
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'SnackBar Example',
home: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SnackBar Example'),
),
body: Column(
children: [
ElevatedButton(
child: Text('GlobalSnackBarPage'),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (_) => GlobalSnackBarPage()),
);
},
),
ElevatedButton(
child: Text('LocalSnackBarPage'),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (_) => LocalSnackBarPage()),
);
},
),
],
),
);
}
}
// 해당 페이지를 pop하더라도 SnackBar는 유지되는 예제
class GlobalSnackBarPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('GlobalSnackBarPage'),
),
body: Center(
child: ElevatedButton(
child: Text('Bye'),
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text('Bye'),
duration: Duration(seconds: 5),
));
Navigator.pop(context);
},
),
));
}
}
// 해당 페이지를 pop하면 SnackBar도 같이 사라지는 예제
class LocalSnackBarPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
// ScaffoldMessenger를 사용해야함
return ScaffoldMessenger(
child: Scaffold(
appBar: AppBar(
title: Text('LocalSnackBarPage'),
),
// body를 Builder로 감싸서 생성해야함
body: Builder(builder: (context) {
return Center(
child: ElevatedButton(
child: Text('Bye'),
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text('Bye'),
duration: Duration(seconds: 5),
));
Navigator.pop(context);
},
),
);
}),
));
}
}
화면
반응형
'Development > Flutter' 카테고리의 다른 글
[Flutter] Drawer (0) | 2024.02.21 |
---|---|
[Flutter] Fluttertoast (0) | 2024.02.21 |
[Flutter] Navigator (0) | 2024.02.20 |
[Flutter] AppBar (0) | 2024.02.20 |
[Flutter] Image (0) | 2024.02.18 |