소셜 로그인 진행 중 로딩 표시 · 중복 입력 방지

This commit is contained in:
Sn-Kinos
2026-10-11 23:43:43 +09:00
parent c40bde2cd0
commit c42fd615a6
2 changed files with 21 additions and 3 deletions
+7 -1
View File
@@ -209,6 +209,7 @@ class _SimpleLoginScreenState extends State<SimpleLoginScreen> {
bool _busy = false;
Future<void> _signIn(SocialProvider provider) async {
if (_busy) return;
if (widget.signUp) {
final agreed = await Navigator.of(context).push<Set<String>>(
MaterialPageRoute(builder: (_) => const TermsScreen()),
@@ -217,6 +218,8 @@ class _SimpleLoginScreenState extends State<SimpleLoginScreen> {
// 인증 뒤 동의가 필요한 계정이면 이 동의를 서버에 기록한다(약관을 다시 묻지 않는다).
widget.auth.pendingConsent = agreed;
}
// 제공자 화면에서 돌아온 뒤에도 서버 토큰 교환 · 로그인에 몇 초 걸린다(Kakao · LINE).
// 끝날 때까지 화면 전체를 막고 진행 표시를 띄운다 — 다시 누르지 못하게.
setState(() => _busy = true);
final outcome = await widget.auth.signIn(provider);
if (outcome is! AuthSucceeded) widget.auth.pendingConsent = null;
@@ -348,7 +351,10 @@ class _SimpleLoginScreenState extends State<SimpleLoginScreen> {
),
),
);
return scaffold;
return PopScope(
canPop: !_busy,
child: Stack(children: [scaffold, if (_busy) const BlockingProgress()]),
);
}
}