getCurrentUser method Null safety
로그인된 사용자 정보를 가져옵니다
Implementation
Future<User> getCurrentUser() async {
try {
LogManager().addLog("getCurrentUser()", screen: runtimeType.toString());
userState = Provider.of<UserState>(context, listen: false);
/// 로그인 된 유저 정보를 이미 가져왔으면 가져온 정보를 반환합니다.
if (userState.currentUser != null && userState.currentUser?.id != "null") {
LogManager().addLog("로그인된 유저 정보를 캐시에서 가져옴. 캐시 정보를 반환.", screen: runtimeType.toString());
return userState.currentUser!;
}
late AuthUser authUser;
try {
LogManager().addLog("로그인된 유저 정보가 캐시에 없음. 새로 요청 시도.", screen: runtimeType.toString());
authUser = await Amplify.Auth.getCurrentUser(); // SignedOutException 던짐
registerNotificationToken();
LogManager().addLog("유저 정보를 새로 가져옴", screen: runtimeType.toString());
LogManager().addLog(authUser.username, screen: runtimeType.toString());
LogManager().addLog(authUser.userId, screen: runtimeType.toString());
userState.currentUser = User(
id: authUser.userId,
username: authUser.username,
name: '',
type: "owner",
awsAccessKey: userState.currentUser?.awsAccessKey,
awsSecretKey: userState.currentUser?.awsSecretKey,
awsSessionToken: userState.currentUser?.awsSessionToken,
);
LogManager().addLog("유저 정보를 캐시에 저장함", screen: runtimeType.toString());
} on AmplifyException catch (e) {
LogManager().addLog("AmplifyException 발생", screen: runtimeType.toString());
if (e is SignedOutException) {
LogManager().addLog("SignedOutException 발생", screen: runtimeType.toString());
} else {
LogManager().addLog("그 외 AmplifyException 발생", screen: runtimeType.toString());
}
LogManager().addLog(e.message, screen: runtimeType.toString());
rethrow;
} catch (e) {
LogManager().addLog("Exception 발생", screen: runtimeType.toString());
LogManager().addLog(e.toString(), screen: runtimeType.toString());
rethrow;
}
LogManager().addLog("Amplify.Auth.fetchUserAttributes()", screen: runtimeType.toString());
List<AuthUserAttribute> authUserAttributes = await Amplify.Auth.fetchUserAttributes();
LogManager().addLog("getDeviceId()", screen: runtimeType.toString());
deviceId = await getDeviceId();
LogManager().addLog("deviceId: $deviceId", screen: runtimeType.toString());
for (AuthUserAttribute e in authUserAttributes) {
switch (e.userAttributeKey.key) {
case "name":
userState.currentUser?.name = e.value;
break;
case "email":
userState.currentUser?.email = e.value;
break;
case "phone_number":
userState.currentUser?.phoneNumber = e.value;
break;
case "birthdate":
userState.currentUser?.birth = DateTime.parse(e.value);
break;
}
}
LogManager().addLog("로그인된 사용자 정보 가져오기 성공: ${userState.currentUser!.username}", screen: runtimeType.toString());
LogManager().addLog(
"${{
"id": ApiService().userState.currentUser?.id,
"username": ApiService().userState.currentUser?.username,
"phoneNumber": ApiService().userState.currentUser?.phoneNumber,
"deviceId": await ApiService().getDeviceId().catchError((e) => "-"),
}}",
screen: runtimeType.toString(),
);
LogManager().addLog("${ApiService().demographic.toString()}", screen: runtimeType.toString());
return userState.currentUser!;
} catch (e) {
LogManager().addLog("로그인된 사용자 정보 가져오기 실패: ${userState.currentUser?.username}", screen: runtimeType.toString());
rethrow;
}
}