authorize static method
Future<FitbitCredentials?>
authorize({
- required String clientID,
- required String clientSecret,
- required String redirectUri,
- required String callbackUrlScheme,
- List<
FitbitAuthScope> scopeList = const [FitbitAuthScope.ACTIVITY, FitbitAuthScope.CARDIO_FITNESS, FitbitAuthScope.HEART_RATE, FitbitAuthScope.LOCATION, FitbitAuthScope.NUTRITION, FitbitAuthScope.OXYGEN_SATURATION, FitbitAuthScope.PROFILE, FitbitAuthScope.RESPIRATORY_RATE, FitbitAuthScope.SETTINGS, FitbitAuthScope.SLEEP, FitbitAuthScope.SOCIAL, FitbitAuthScope.TEMPERATURE], - int expiresIn = 28800,
Method that implements the OAuth 2.0 protocol and gets the access and refresh tokens from Fitbit APIs.
Implementation
static Future<FitbitCredentials?> authorize(
{required String clientID,
required String clientSecret,
required String redirectUri,
required String callbackUrlScheme,
List<FitbitAuthScope> scopeList = const [FitbitAuthScope.ACTIVITY, FitbitAuthScope.CARDIO_FITNESS, FitbitAuthScope.HEART_RATE, FitbitAuthScope.LOCATION, FitbitAuthScope.NUTRITION, FitbitAuthScope.OXYGEN_SATURATION, FitbitAuthScope.PROFILE, FitbitAuthScope.RESPIRATORY_RATE, FitbitAuthScope.SETTINGS, FitbitAuthScope.SLEEP, FitbitAuthScope.SOCIAL, FitbitAuthScope.TEMPERATURE],
int expiresIn = 28800
}) async {
// Instantiate Dio and its Response
Dio dio = Dio();
Response response;
FitbitCredentials? fitbitCredentials;
// Generate the fitbit url
final fitbitAuthorizeFormUrl = FitbitAuthAPIURL.authorizeForm(
redirectUri: redirectUri, clientID: clientID, scopeList: scopeList, expiresIn: expiresIn);
// Perform authentication
try {
final result = await FlutterWebAuth.authenticate(
url: fitbitAuthorizeFormUrl.url,
callbackUrlScheme: callbackUrlScheme);
//Get the auth code
final code = Uri.parse(result).queryParameters['code'];
// Generate the fitbit url
final fitbitAuthorizeUrl = FitbitAuthAPIURL.authorize(
redirectUri: redirectUri,
code: code,
clientID: clientID,
clientSecret: clientSecret);
response = await dio.post(
fitbitAuthorizeUrl.url,
data: fitbitAuthorizeUrl.data,
options: Options(
contentType: Headers.formUrlEncodedContentType,
headers: {
'Authorization': fitbitAuthorizeUrl.authorizationHeader,
},
),
);
// Debugging
final logger = Logger();
logger.i('$response');
// Save authorization tokens
final accessToken = response.data['access_token'] as String;
final refreshToken = response.data['refresh_token'] as String;
final userID = response.data['user_id'] as String;
fitbitCredentials = FitbitCredentials(
userID: userID,
fitbitAccessToken: accessToken,
fitbitRefreshToken: refreshToken);
} catch (e) {
print(e);
} // catch
return fitbitCredentials;
}