해결된 질문
작성
·
37
1
한가지 궁금한 것이 있어 질문 남깁니다.
다른게 아니라 로그인이나 회원가입을 만들 때 onPressed를 async-await으로 만든다고 알고 있는데
강의에서는 async-await 없이 로그인과 회원가입을 만들더라고요.
그 이유가 궁금합니다.
답변 1
2
안녕하세요.
로그인이라는 비동기 함수가 끝나길 기다렸다가 결과에 따라 다음 로직을 실행해야 하는 경우 async await을 사용하여 구현할 수도 있지만, 아래 강의 자료와 같이 로그인이 성공하면 onSuccess
로 전달한 함수가 호출되고, 실패한 경우에는 onError
로 전달한 함수가 호출되는 콜백(call back) 함수 방식으로도 구현할 수 있습니다.
// 로그인
authService.signIn(
email: emailController.text,
password: passwordController.text,
onSuccess: () {
// 로그인 성공
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text("로그인 성공"),
));
// HomePage로 이동
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => HomePage()),
);
},
onError: (err) {
// 에러 발생
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(err),
));
},
);
},
만약 위 내용을 async-await 형태로 바꾼다면 authService.signIn
에서 Exception을 던질지, 성공 실패 값을 반환할지 여부에 따라 다르겠지만, 만약 실패시 Exception을 던지도록 만든다면 아래와 같이 구현할 수 있습니다.
try {
await authService.signIn(
email: emailController.text,
password: emailController.text,
);
// 로그인 성공
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text("로그인 성공"),
));
// HomePage로 이동
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => HomePage()),
);
} catch (err) {
// 에러 발생
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(err.toString()),
));
}
감사합니다 :)
답변 감사합니다 ^^