인프런 커뮤니티 질문&답변

robobo153님의 프로필 이미지

작성한 질문수

Flutter 앱 개발 기초

firebase 로그인 및 회원가입 async-await 필요여부

해결된 질문

24.09.07 18:09 작성

·

22

1

한가지 궁금한 것이 있어 질문 남깁니다.

다른게 아니라 로그인이나 회원가입을 만들 때 onPressed를 async-await으로 만든다고 알고 있는데

강의에서는 async-await 없이 로그인과 회원가입을 만들더라고요.

그 이유가 궁금합니다.

 

 

답변 1

2

DevStory님의 프로필 이미지
DevStory
지식공유자

2024. 09. 08. 19:52

안녕하세요.

로그인이라는 비동기 함수가 끝나길 기다렸다가 결과에 따라 다음 로직을 실행해야 하는 경우 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()),
    ));
  }

감사합니다 :)

robobo153님의 프로필 이미지
robobo153
질문자

2024. 09. 18. 02:36

답변 감사합니다 ^^