diff --git a/lib/parse_server_sdk.dart b/lib/parse_server_sdk.dart index 89ba5a595..c849972ce 100644 --- a/lib/parse_server_sdk.dart +++ b/lib/parse_server_sdk.dart @@ -89,8 +89,6 @@ class Parse { sessionId: sessionId, securityContext: securityContext); - ParseCoreData().initStorage(); - _hasBeenInitialized = true; return Parse(); diff --git a/lib/src/data/parse_core_data.dart b/lib/src/data/parse_core_data.dart index c19f82cd7..89676cfd1 100644 --- a/lib/src/data/parse_core_data.dart +++ b/lib/src/data/parse_core_data.dart @@ -52,12 +52,8 @@ class ParseCoreData { this.sessionId = sessionId; } - void initStorage() async { - storage = await SharedPreferences.getInstance(); - } - Future getStore() async { - return storage != null ? storage : await SharedPreferences.getInstance(); + return storage ?? (storage = await SharedPreferences.getInstance()); } @override diff --git a/lib/src/network/parse_http_client.dart b/lib/src/network/parse_http_client.dart index c84d9842d..b4ef85064 100644 --- a/lib/src/network/parse_http_client.dart +++ b/lib/src/network/parse_http_client.dart @@ -17,13 +17,18 @@ class ParseHTTPClient extends BaseClient { Future send(BaseRequest request) { request.headers[keyHeaderUserAgent] = _userAgent; request.headers[keyHeaderApplicationId] = data.applicationId; + if ((data.sessionId != null) && + (request.headers[keyHeaderSessionToken] == null)) + request.headers[keyHeaderSessionToken] = data.sessionId; - if (data.clientKey != null) request.headers[keyHeaderClientKey] = data.clientKey; - if (data.masterKey != null) request.headers[keyHeaderMasterKey] = data.masterKey; + if (data.clientKey != null) + request.headers[keyHeaderClientKey] = data.clientKey; + if (data.masterKey != null) + request.headers[keyHeaderMasterKey] = data.masterKey; /// If developer wants to add custom headers, extend this class and add headers needed. - if (additionalHeaders != null && additionalHeaders.length > 0){ - additionalHeaders.forEach((k,v) => request.headers[k] = v); + if (additionalHeaders != null && additionalHeaders.length > 0) { + additionalHeaders.forEach((k, v) => request.headers[k] = v); } return _client.send(request); diff --git a/lib/src/objects/parse_base.dart b/lib/src/objects/parse_base.dart index 71e21b8d6..8cc15fba9 100644 --- a/lib/src/objects/parse_base.dart +++ b/lib/src/objects/parse_base.dart @@ -88,7 +88,7 @@ abstract class ParseBase { /// Returns the objects variables @protected - Map getObjectData() => _objectData != null ? _objectData : Map(); + Map getObjectData() => _objectData ?? Map(); /// Saves in storage @protected @@ -149,7 +149,7 @@ abstract class ParseBase { /// Replicates Android SDK pin process and saves object to storage Future unpin({String key}) async { if (objectId != null) { - await SharedPreferences.getInstance() + await ParseCoreData().getStore() ..remove(key ?? objectId); return true; } @@ -165,13 +165,7 @@ abstract class ParseBase { var itemFromStore = (await ParseCoreData().getStore()).getString(objectId); - if (itemFromStore != null) { - var map = json.decode(itemFromStore); - - if (map != null) { - return fromJson(map); - } - } + if (itemFromStore != null) return fromJson(json.decode(itemFromStore)); } return null; } diff --git a/lib/src/objects/parse_user.dart b/lib/src/objects/parse_user.dart index 072c28f8b..11ce1e1aa 100644 --- a/lib/src/objects/parse_user.dart +++ b/lib/src/objects/parse_user.dart @@ -69,12 +69,13 @@ class ParseUser extends ParseObject implements ParseCloneable { client ?? ParseHTTPClient(ParseCoreData().securityContext); // We can't get the current user and session without a sessionId - if (token == null && ParseCoreData().sessionId == null) { + if ((ParseCoreData().sessionId == null) && (token == null)) { return null; } - if (token == null) { - token = ParseCoreData().sessionId; + final Map headers = {}; + if (token != null) { + headers[keyHeaderSessionToken] = token; } try { @@ -85,8 +86,7 @@ class ParseUser extends ParseObject implements ParseCloneable { host: tempUri.host, path: "${tempUri.path}$keyEndPointUserName"); - final response = - await _client.get(uri, headers: {keyHeaderSessionToken: token}); + final response = await _client.get(uri, headers: headers); return _handleResponse(_getEmptyUser(), response, ParseApiRQ.currentUser, _debug, _getEmptyUser().className); } on Exception catch (e) { @@ -242,9 +242,7 @@ class ParseUser extends ParseObject implements ParseCloneable { var uri = _client.data.serverUrl + "$path/$objectId"; var body = json.encode(toJson(forApiRQ: true), toEncodable: dateTimeEncoder); - final response = await _client.put(uri, - headers: {keyHeaderSessionToken: _client.data.sessionId}, - body: body); + final response = await _client.put(uri, body: body); return _handleResponse( this, response, ParseApiRQ.save, _debug, className); } on Exception catch (e) { @@ -257,9 +255,8 @@ class ParseUser extends ParseObject implements ParseCloneable { Future destroy() async { if (objectId != null) { try { - final response = await _client.delete( - _client.data.serverUrl + "$path/$objectId", - headers: {keyHeaderSessionToken: _client.data.sessionId}); + final response = + await _client.delete(_client.data.serverUrl + "$path/$objectId"); return _handleResponse( this, response, ParseApiRQ.destroy, _debug, className); } on Exception catch (e) {