import 'dart:convert'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:syncrow_app/utils/helpers/decode_base64.dart'; class Token { static const String loginAccessTokenKey = 'access_token'; static const String loginRefreshTokenKey = 'refreshToken'; final String accessToken; final String refreshToken; Token.emptyConstructor() : accessToken = '', refreshToken = ''; bool get accessTokenIsNotEmpty => accessToken.isNotEmpty; bool get refreshTokenIsNotEmpty => refreshToken.isNotEmpty; bool get isNotEmpty => accessToken.isNotEmpty && refreshToken.isNotEmpty; Token( this.accessToken, this.refreshToken, ); Token.refreshToken(this.refreshToken) : accessToken = ''; factory Token.fromJson(Map json) { //save token to secure storage var storage = const FlutterSecureStorage(); storage.write( key: loginAccessTokenKey, value: json[loginAccessTokenKey] ?? ''); //create token object ? return Token( json[loginAccessTokenKey] ?? '', json[loginRefreshTokenKey] ?? ''); } Map toJson() => {loginRefreshTokenKey: refreshToken}; Map accessTokenToJson() => {loginAccessTokenKey: accessToken}; Map decodeToken() { final parts = accessToken.split('.'); if (parts.length != 3) { throw Exception('invalid access token'); } final payload = decodeBase64(parts[1]); return json.decode(payload); } }