Skip to content

Commit cb70c75

Browse files
committed
Version 1.0.6 - ParseUser now extends ParseObject - BREAKING UPDATE
1 parent eecc751 commit cb70c75

File tree

7 files changed

+103
-63
lines changed

7 files changed

+103
-63
lines changed

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Want to get involved? Join our Slack channel and help out! (http://flutter-parse
1313
To install, either add to your pubspec.yaml
1414
```
1515
dependencies:
16-
parse_server_sdk: ^1.0.5
16+
parse_server_sdk: ^1.0.6
1717
```
1818
or clone this repository and add to your project. As this is an early development with multiple contributors, it is probably best to download/clone and keep updating as an when a new feature is added.
1919

@@ -174,11 +174,13 @@ var user = ParseUser().create("TestFlutter", "TestPassword123", "TestFlutterSDK
174174
Then have the user sign up:
175175

176176
```
177-
user = await user.signUp();
177+
var response = await user.signUp();
178+
if (response.success) user = response.result;
178179
```
179180
You can also logout and login with the user:
180181
```
181-
user = await user.login();
182+
var response = await user.login();
183+
if (response.success) user = response.result;
182184
```
183185
Also, once logged in you can manage sessions tokens. This feature can be called after Parse().init() on startup to check for a logged in user.
184186
```

example/lib/main.dart

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -138,22 +138,43 @@ class _MyAppState extends State<MyApp> {
138138

139139
// All return type ParseUser except all
140140
var user = ParseUser("TestFlutter", "TestPassword123", "[email protected]");
141-
user = await user.signUp();
142-
user = await user.login();
141+
var response = await user.signUp();
142+
if (response.success) user = response.result;
143+
144+
response = await user.login();
145+
if (response.success) user = response.result;
143146
user = null;
144147

145-
// Best practice for starting the app. This will check for a
146-
user = ParseUser.currentUser();
147-
user = await user.getCurrentUserFromServer();
148-
user = await user.requestPasswordReset();
149-
user = await user.verificationEmailRequest();
148+
// Best practice for starting the app. This will check for a valid user
149+
user = await ParseUser.currentUser();
150+
user.logout();
151+
152+
user = await ParseUser.currentUser();
153+
154+
response = await user.getCurrentUserFromServer();
155+
if (response.success) user = response.result;
156+
157+
response = await user.requestPasswordReset();
158+
if (response.success) user = response.result;
159+
160+
response = await user.verificationEmailRequest();
161+
if (response.success) user = response.result;
162+
163+
response = await user.save();
164+
if (response.success) user = response.result;
150165

151-
user = await user.save();
152166
var destroyResponse = await user.destroy();
153167
if (destroyResponse.success) print('object has been destroyed!');
154168

155169
// Returns type ParseResponse as its a query, not a single result
156-
await ParseUser.all();
170+
response = await ParseUser.all();
171+
if (response.success) user = response.result;
172+
173+
var queryBuilder = QueryBuilder<ParseUser>(ParseUser.forQuery())
174+
..startsWith(ParseUser.keyUsername, 'phillw');;
175+
176+
var apiResponse = await queryBuilder.query();
177+
if (apiResponse.success) user = response.result;
157178
}
158179

159180
function() {

lib/src/objects/parse_base.dart

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ part of flutter_parse_sdk;
22

33
abstract class ParseBase {
44
String className;
5+
Type type;
56

67
setClassName(String className) => this.className = className;
78

@@ -87,7 +88,7 @@ abstract class ParseBase {
8788

8889
/// Returns the objects variables
8990
@protected
90-
Map getObjectData() => _objectData;
91+
Map getObjectData() => _objectData != null ? _objectData : Map();
9192

9293
/// Saves in storage
9394
@protected
@@ -131,9 +132,11 @@ abstract class ParseBase {
131132
/// Replicates Android SDK pin process and saves object to storage
132133
Future<bool> pin() async {
133134
if (objectId != null) {
135+
var objectToSave = json.encode(toJson());
136+
ParseCoreData().getStore().remove(objectId);
134137
await ParseCoreData()
135138
.getStore()
136-
.setString(objectId, json.encode(toJson()));
139+
.setString(objectId, objectToSave);
137140
return true;
138141
} else {
139142
return false;
@@ -145,9 +148,9 @@ abstract class ParseBase {
145148
/// Replicates Android SDK pin process and saves object to storage
146149
Future<bool> unpin() async {
147150
if (objectId != null) {
148-
var itemToSave =
149-
await ParseCoreData().getStore().setString(objectId, null);
150-
if (itemToSave) return true;
151+
await ParseCoreData().getStore().setString(objectId, "");
152+
await ParseCoreData().getStore().remove(objectId);
153+
return true;
151154
}
152155

153156
return false;

lib/src/objects/parse_object.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ class ParseObject extends ParseBase implements ParseCloneable {
105105
/// Handles an API response and logs data if [bool] debug is enabled
106106
@protected
107107
ParseResponse handleResponse(Response response, ParseApiRQ type) {
108-
ParseResponse parseResponse = ParseResponse.handleResponse(this, response);
108+
ParseResponse parseResponse = ParseResponse.handleResponse<ParseObject>(this, response);
109109

110110
if (_debug) {
111111
logger(

lib/src/objects/parse_response.dart

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class ParseResponse {
1313
/// 2. Success but no results. [ParseResponse()] is returned.
1414
/// 3. Success with simple OK.
1515
/// 4. Success with results. Again [ParseResponse()] is returned
16-
static handleResponse(dynamic object, Response apiResponse) {
16+
static handleResponse<T extends ParseBase>(dynamic object, Response apiResponse) {
1717
var parseResponse = ParseResponse();
1818

1919
if (apiResponse != null) {
@@ -26,7 +26,7 @@ class ParseResponse {
2626
} else if (apiResponse.body == "OK"){
2727
return _handleSuccessWithNoResults(parseResponse, 2, "Successful request");
2828
} else {
29-
return _handleSuccess(parseResponse, object, apiResponse.body);
29+
return _handleSuccess<T>(parseResponse, object, apiResponse.body);
3030
}
3131
} else {
3232
parseResponse.error = ParseError(message: "Error reaching server, or server response was null");
@@ -58,33 +58,33 @@ class ParseResponse {
5858
}
5959

6060
/// Handles successful response with results
61-
static ParseResponse _handleSuccess(ParseResponse response, dynamic object, String responseBody) {
61+
static ParseResponse _handleSuccess<T extends ParseBase>(ParseResponse response, dynamic object, String responseBody) {
6262
response.success = true;
6363

6464
var map = JsonDecoder().convert(responseBody) as Map;
6565

6666
if (map != null && map.length == 1 && map.containsKey('results')) {
67-
response.result = _handleMultipleResults(object, map.entries.first.value);
67+
response.result = _handleMultipleResults<T>(object, map.entries.first.value);
6868
} else {
69-
response.result = _handleSingleResult(object, map);
69+
response.result = _handleSingleResult<T>(object, map);
7070
}
7171

7272
return response;
7373
}
7474

7575
/// Handles a response with a multiple result object
76-
static _handleMultipleResults(dynamic object, dynamic map) {
77-
var resultsList = List();
76+
static List<T> _handleMultipleResults<T extends ParseBase>(dynamic object, dynamic map) {
77+
var resultsList = List<T>();
7878

7979
for (var value in map) {
80-
resultsList.add(_handleSingleResult(object, value));
80+
resultsList.add(_handleSingleResult<T>(object, value));
8181
}
8282

8383
return resultsList;
8484
}
8585

8686
/// Handles a response with a single result object
87-
static _handleSingleResult(dynamic object, map) {
87+
static T _handleSingleResult<T extends ParseBase>(dynamic object, map) {
8888
if (object is Parse) return map;
8989
if (object is ParseCloneable) return object.clone(map);
9090
return null;

0 commit comments

Comments
 (0)