pollForToken method
Implementation
Future<String?> pollForToken(
String deviceCode, int interval, String clientId, String tokenUrl, String scope) async {
while (true) {
await Future.delayed(Duration(seconds: interval));
final response = await http.post(
Uri.parse(tokenUrl), // Replace with your provider's token URL
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: {
'client_id': clientId,
'grant_type': 'urn:ietf:params:oauth:grant-type:device_code',
'device_code': deviceCode,
'scope': scope
},
);
if (response.statusCode == 200) {
final tokenResponse = json.decode(response.body);
print('Access token: ${tokenResponse['access_token']}');
Preferences.prefs?.setString("RefreshToken", tokenResponse['refresh_token']);
print('Refresh token: ${tokenResponse['refresh_token']}');
return tokenResponse['access_token'];
} else {
final errorResponse = json.decode(response.body);
if (errorResponse['error'] == 'authorization_pending') {
print('Authorization pending...');
continue;
} else if (errorResponse['error'] == 'authorization_declined') {
print('Authorization declined by user');
break;
} else if (errorResponse['error'] == 'expired_token') {
print('Device code expired');
break;
} else {
print('Unknown error: ${errorResponse['error']}');
break;
}
}
}
return null;
}