반응형
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
- JPA 공부
- 기술공부
- 자료구조공부
- 플러터 개발
- nestjs스터디
- JPA
- 스프링부트
- 코테준비
- 스프링
- DDD
- 스프링공부
- 자바공부
- querydsl
- 코테공부
- 프로그래머스
- Kafka
- nestjs공부
- JPA예제
- 카프카
- 알고리즘공부
- 기술면접공부
- Axon framework
- nestjs
- Flutter
- 스프링부트공부
- 스프링 공부
- JPA공부
- 플러터 공부
- JPA스터디
- K8S
Archives
- Today
- Total
DevBoi
[Flutter] 클릭 이벤트 처리와 화면 전환 본문
반응형
일단 텍스트의 값을 받아야 한다.
플러터에서는 이런 컨트롤러를 사용해서 값을 받고, 그다음에 리소스낭비를 줄이기 위해 dispose메소드를 실행시켜야한다고 한다.
이런식으로 TextField에서 컨트롤러를 매핑하는 작업을 한다.
if(controller.text == 'smith' && controller2.text == '1234'){
Navigator.push(context,MaterialPageRoute(builder: (BuildContext context)=> Dice()));
실제로 값을 사용할 때는 이렇게 사용하면 된다.
그렇게 되면 controller.text로하면 텍스트 값을 가져오는 것이다.
일단 토스트 메시지 같은 메서드를 만들어준다
void showSnackBar2(BuildContext context){
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content:
Text('로그인 정보 불 일치',textAlign: TextAlign.center,),
duration: Duration(seconds: 2),
backgroundColor: Colors.blue,
)
);
}
해당 메서드는 아래와 같이 사용한다.
if (controller.text == 'smith' &&
controller2.text == '1234') {
Navigator.push(context, MaterialPageRoute(
builder: (BuildContext context) => Dice()));
}
else {
showSnackBar2(context);
}
이렇게 하고 우선 대충 DIce를 만들고 화면 전환을 한다.
클릭시 이벤트는 이렇게 주면 된다.
onPressed: () {
if (controller.text == 'smith' &&
controller2.text == '1234') {
Navigator.push(context, MaterialPageRoute(
builder: (BuildContext context) => Dice()));
}
else {
showSnackBar2(context);
}
},
화면 전환을 위해서는 Builder widget을 써야한다.
Builder widget을 써야하는 이유는 아래와 같다.
Builder의 위젯은 context를 파라미터로 담는데
항상 토스트 메시지를 표시하거나, context를 사용하여, stateful한 동작을 할때는 이 위젯을 사용해야한다,
stateful, stateless한 위젯의 부모 위젯이라고 한다.
따라서 해당 위젯으로 변경해준 것이다.
기존 소스에서 대략 이렇게 변경되었다.
Widget build, BuilCOntext로 변경되었고
기존의 Scaffold를 return하게 되는 것이다.
class _LoginState extends State<Login> {
TextEditingController controller = TextEditingController();
TextEditingController controller2 = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Login"),
backgroundColor: Colors.redAccent,
centerTitle: true,
leading: IconButton(
icon: Icon(Icons.menu),
onPressed: (){},
),
actions:<Widget> [
IconButton(
icon: Icon(Icons.search),
반응형
'[Mobile] > [Flutter]' 카테고리의 다른 글
[Flutter] IOS 앱 빌드 및 배포 (TestFilght) (0) | 2023.06.04 |
---|---|
[Flutter] Aos 앱 빌드 릴리즈 하기 (0) | 2023.06.02 |
[Flutter] 간단한 로그인 화면 구현 (0) | 2023.01.08 |
[Flutter] 플러터의 위젯 (0) | 2023.01.08 |
[Flutter] App을 웹으로 빌드해보자 (0) | 2023.01.08 |