사용 버전: kakao_flutter_sdk: ^1.3.0-beta.4
질문:
flutter web에서 sdk를 이용하여 로그인 시 브라우저 새창이 생기게됩니다.
이 때, 기존에 로그인을 실행한 화면의 context가 먹통이될때가 잦습니다.
테스트 시 새로고침한 이후부터 이슈가 생기는것 같습니다.
이슈 경로는 아래와 같습니다.
LoginPage 진입
→ 브라우저 새로고침
→ sdk로 카카오 로그인 실행
→ 새창에서 로그인
→ 로그인 완료 후 새창이 닫힘
→ LoginPage에서 로그인의 결과값 수신
→ 결과 값에 따라 다른 페이지로 이동
→ 이 때 context가 unmounted 되어 context 핸들링 불가 하는 이슈 발생
위 상황이오니 확인 부탁드립니다.
안녕하세요
이슈가 발생하는 환경과 구현하신 코드 첨부 부탁드립니다.
- 환경
OS: Window 10 64bit
IDEA: Intellij
[√] Flutter (Channel stable, 3.3.9, on Microsoft Windows [Version 10.0.19044.2251], locale ko-KR)
[√] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[√] Chrome - develop for the web
[X] Visual Studio - develop for Windows
X Visual Studio not installed; this is necessary for Windows development.
Download at https://visualstudio.microsoft.com/downloads/.
Please install the “Desktop development with C++” workload, including all of its default components
[√] Android Studio (version 2021.2)
[√] IntelliJ IDEA Ultimate Edition (version 2022.2)
[√] Connected device (3 available)
[√] HTTP Host Availability
- 코드
void _login() {
showLoading(context);
locator<LogInProvider>().logIn().then((value) {
if (value) {
Navigator.of(context).pop();
Navigator.of(context).pop();
} else {
Navigator.of(context).pop();
showToast(context: context, message: '로그인 실패');
}
});
}
class KakaoRemoteDataSourceImpl extends KakaoRemoteDataSource {
final _api = UserApi.instance;
@override
Future<String> getAuthToken() async {
if (await isKakaoTalkInstalled()) {
try {
return await _api
.loginWithKakaoTalk()
.then((value) => value.accessToken);
} catch (error) {
if (error is PlatformException && error.code == 'CANCELED') {
try {
return await _api
.loginWithKakaoAccount()
.then((value) => value.accessToken);
} catch (error) {
logger.e('[getAuthToken] $error');
throw Exception('[getAuthToken] $error');
}
} else {
logger.e('[getAuthToken] $error');
throw Exception('[getAuthToken] $error');
}
}
} else {
try {
return await _api
.loginWithKakaoAccount()
.then((value) => value.accessToken);
} catch (error) {
logger.e('[getAuthToken] $error');
throw Exception('[getAuthToken] $error');
}
}
}
}
login() 은 getAuthToken() 을 호출합니다.
호출 후 결과 값에 따라 toast or pop을 진행하는데
context가 unmounted되어 context에서 이슈가 발생합니다.
별도로 앱을 만들어서 재현해보려했는데 이슈가 재현되지 않네요ㅠㅠ
sdk에서는 로그인 과정, 로그인 후에 별도로 페이지를 로딩시키거나 context 관련된 작업을 수행하지 않고 있어서 구현하신 코드 상의 이슈인 것으로 보여요.
확인 부탁드리겠습니다.
flutter web에서 수행하여야 되며
로그인 → 로그아웃 → 새로 고침 후 재 테스트 부탁드립니다.
말씀해주신 동선으로도 테스트를 해보았지만 이슈가 재현되지 않네요ㅠㅠ
첨부해주신 코드만으로는 앱이 정확히 어떻게 구현되었는지 알기가 어려워서 이슈를 재현하는것 조차 어려운 상황인데요,
프로젝트를 공유해주시면 확인하는데 조금 더 수월할 것 같습니다.
개발 중인 프로젝트를 공유해주시긴 어려울 것으로 보여서 혹시 간단한 샘플 프로젝트를 공유해주실 수 있을까요?
가능하시다면 tony.mb 에게 개인 메시지로 이슈가 재현되는 샘플 프로젝트 보내주시면 감사하겠습니다