Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 스프링부트사진올리기
- 출처 따배도
- 도커설치하는법
- dockerinstall
- vm도커설치하는법
- WAS웹서버
- 출처 노마드코더
- 스프링부트중복예외처리
- ssh도커설치
- 출처 메타코딩
- springboot_exception_handler
- 파이썬sort
- centos도커설치
- 서버에도커설치
- 출처 코딩셰프
- 스프링사진
- 스프링부트팔로우취소
- 스프링부트팔로잉
- 스프링구독
- 스프링부트
- 우분투도커설치
- 스프링부트api
- 스프링이미지업로드
- 스프링익셉션처리
- 출처 문어박사
- 스프링부트서버에사진전송
- 스프링부트구독취소
- 인스타클론
- 멀티폼
- 스프링사진업로드
Archives
- Today
- Total
MakerHyeon
[Flutter] 스낵바(Snack bar)와 BuildContext 본문
build(BuildContext context)...에서 사용되는 BuildContext는 return되는 위젯의 것이 아니라, 이함수를 불러오는 BuildContext가 context가 된다! 여기에서는 MyPage의 context를 뜻한다.
scaffold.of(context) 메소드가 의미하는 바는 현재 buildContext에서 위로 거슬러 올라가며 가장 가까운 Scaffold 위젯을 찾아 반환하라는 것이다. 하지만 이를 찾지못해 문제가 생기고,이를 해결하기 위해 builder위젯을 추가해주는것이다.
플러터 2.0에는 여기저기 흩어져있는 SnackBar를 관리하는 ScaffoldMessenger라는 새로운 위젯이 추가되었다!
+) 한 페이지에서만 스낵바가 보여지고 페이지 이동을 하면 스낵바가 즉시 사라지게 하려면...?
=> 루트 scaffoldMessenger가 아니라, 개별적 scaffoldMessenger를 생성해야 한다.
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(
debugShowCheckedModeBanner: false, // 디버그 없애기
title: 'Snack Bar',
theme: ThemeData(
primarySwatch: Colors.red,
),
home: const MyPage(), // 앱실행시 가장먼저 보여지는 경로
);
}
}
class MyPage extends StatelessWidget {
const MyPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Scaffold Messenger'),
centerTitle: true,
),
body: const HomeBody(),
floatingActionButton: FloatingActionButton(
child: const Icon(Icons.thumb_up),
onPressed: () {
// ScaffoldMessenger는 가장 가까운 ScaffoldMessenger를 찾아서 반환
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: const Text('Like a new Snack bar!'),
duration: const Duration(seconds: 5),
action: SnackBarAction(
label: 'Undo',
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: ((context) => const ThirdPage())),
);
},
),
),
);
},
),
);
}
}
// home page
class HomeBody extends StatelessWidget {
const HomeBody({super.key});
@override
Widget build(BuildContext context) {
return Center(
child: ElevatedButton(
child: const Text('Go to the second page'),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const SecondPage()),
);
},
),
);
}
}
// second page
class SecondPage extends StatelessWidget {
const SecondPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Second Page'),
),
body: const Center(
child: Text(
'"좋아요가 추가 되었습니다',
style: TextStyle(
fontSize: 20.0,
color: Colors.redAccent,
),
),
),
);
}
}
/**
* 한 페이지에서만 스낵바가 보여지고 페이지 이동을 하면 스낵바가 즉시 사라지게 하려면...?
=> 루트 scaffoldMessenger가 아니라, 개별적 scaffoldMessenger생성해야함
*/
// Third Page
class ThirdPage extends StatelessWidget {
const ThirdPage({super.key});
@override
Widget build(BuildContext context) {
return ScaffoldMessenger(
child: Scaffold(
appBar: AppBar(
title: const Text('Third Page'),
),
body: Builder(
// builder위젯은 반드시 위젯을 리턴해주어야 함
builder: (context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text(
'"좋아요"를 취소 하시겠습니까?',
style: TextStyle(fontSize: 20.0, color: Colors.redAccent),
),
ElevatedButton(
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('"좋아요" 가 취소되었습니다.'),
duration: Duration(seconds: 3),
),
);
},
child: const Text('취소하기'))
],
),
);
},
),
),
);
}
}
/*
class ThirdPage extends StatelessWidget {
const ThirdPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Third Page'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text('"좋아요"를 취소 하시겠습니까?',
style: TextStyle(fontSize:20.0, color: Colors.redAccent),
),
ElevatedButton(onPressed: (){
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
content: Text('"좋아요" 가 취소되었습니다.'),
duration: Duration(seconds:3),
),);
}, child: const Text('취소하기'))
],
),
),
);
}
}
*/
'Flutter' 카테고리의 다른 글
[Flutter] 빌더(Builder widget)위젯 없이 스낵바(Snack bar)만들기 (0) | 2023.04.07 |
---|---|
[Flutter] Drawer (0) | 2023.04.03 |
[Flutter] App bar icon button (0) | 2023.04.03 |
[Flutter] 간단한 화면 구성 연습 # 1 (0) | 2023.04.03 |
[Flutter] 기본 구조 template (0) | 2023.03.28 |
Comments