Controller
isLoading.value = true;
try {
await _appwrite.loginWithOAuth(provider);
currentUserId.value = await _appwrite.getCurrentUserId();
handlePostLogin();
} catch (e) {
Get.snackbar(
'Error',
e.toString(),
duration: const Duration(seconds: 20),
);
} finally {
isLoading.value = false;
}
}```
*Service*
``` Future<void> loginWithOAuth(String provider) async {
try {
await account.createOAuth2Session(
provider: _mapProvider(provider),
);
// :white_check_mark: Wait until Appwrite knows about the new session
var user = await _waitForSession();
String fullName = user.name ?? '';
String username;
if (fullName.trim().isEmpty) {
fullName = _deriveNameFromEmail(user.email ?? '');
username = fullName.split(' ').first;
await account.updateName(name: fullName);
// Refresh the user object to reflect the change
user = await account.get();
} else {
username = fullName.split(' ').first;
}
await functions.createExecution(
functionId: createProfileID,
body: jsonEncode({
'userId': user.$id,
'username': user.$id,
'fullName': fullName,
}),
);
//insert the user to my php server
await ApiService.createProfile(
userId: user.$id,
userName: user.$id,
fullName: fullName,
email: user.email,
password: user.password.toString(),
);
//sharePreference
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('userId', user.$id);
prefs.setBool('isUserLogin', true);
} catch (e, s) {
debugPrint('OAuth login error: $e\n$s');
throw Exception('OAuth login failed');
}
}```