Skip to content

Commit eecc751

Browse files
committed
Version 1.0.5 - Fixed saving issues
1 parent 62be758 commit eecc751

13 files changed

+311
-333
lines changed

.idea/workspace.xml

+244-227
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/main.dart

+14
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class _MyAppState extends State<MyApp> {
5151
}
5252

5353
runTestQueries() {
54+
createItem();
5455
getAllItems();
5556
getAllItemsByName();
5657
getSingleItem();
@@ -59,6 +60,19 @@ class _MyAppState extends State<MyApp> {
5960
initUser();
6061
}
6162

63+
void createItem() async {
64+
65+
var newObject = ParseObject('TestObjectForApi');
66+
newObject.set<String>('name', 'testItem');
67+
newObject.set<int>('age', 26);
68+
69+
var apiResponse = await newObject.create();
70+
71+
if (apiResponse.success && apiResponse.result != null) {
72+
print(ApplicationConstants.keyAppName + ": " + apiResponse.result.toString());
73+
}
74+
}
75+
6276
void getAllItemsByName() async {
6377
var apiResponse = await ParseObject('ParseTableName').getAll();
6478

lib/parse.dart

-4
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,6 @@ part 'src/utils/parse_logger.dart';
4545

4646
part 'src/utils/parse_utils.dart';
4747

48-
part 'src/utils/parse_utils_date.dart';
49-
50-
part 'src/utils/parse_utils_objects.dart';
51-
5248
class Parse {
5349
ParseCoreData data;
5450
final ParseHTTPClient client = new ParseHTTPClient();

lib/src/base/parse_constants.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const String keyEndPointHealth = '/health';
1616
const String keyVarClassName = 'className';
1717
const String keyVarObjectId = 'objectId';
1818
const String keyVarCreatedAt = 'createdAt';
19-
const String keyVarUpdatedAt = 'updatedAT';
19+
const String keyVarUpdatedAt = 'updatedAt';
2020
const String keyVarUsername = 'username';
2121
const String keyVarEmail = 'email';
2222
const String keyVarPassword = 'password';

lib/src/network/parse_http_client.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class ParseHTTPClient extends BaseClient {
1313
Future<StreamedResponse> send(BaseRequest request) {
1414
request.headers[keyHeaderUserAgent] = _userAgent;
1515
request.headers[keyHeaderApplicationId] = data.applicationId;
16-
request.headers[keyHeaderContentType] = keyHeaderContentTypeJson;
16+
//request.headers[keyHeaderContentType] = keyHeaderContentTypeJson;
1717
if (data.masterKey != null) request.headers[keyHeaderMasterKey] = data.masterKey;
1818
return _client.send(request);
1919
}

lib/src/objects/parse_base.dart

+17-19
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,10 @@ abstract class ParseBase {
1616
set objectId(String objectId) => set<String>(keyVarObjectId, objectId);
1717

1818
/// Returns [DateTime] createdAt
19-
DateTime get createdAt => stringToDateTime(get<String>(keyVarCreatedAt));
20-
21-
set createdAt(DateTime createdAt) =>
22-
set<String>(keyVarCreatedAt, dateTimeToString(createdAt));
19+
DateTime get createdAt => get<DateTime>(keyVarCreatedAt);
2320

2421
/// Returns [DateTime] updatedAt
25-
DateTime get updatedAt => stringToDateTime(get<String>(keyVarUpdatedAt));
26-
27-
set updatedAt(DateTime updatedAt) =>
28-
set<String>(keyVarUpdatedAt, dateTimeToString(updatedAt));
22+
DateTime get updatedAt => get<DateTime>(keyVarUpdatedAt);
2923

3024
/// Converts object to [String] in JSON format
3125
@protected
@@ -39,28 +33,30 @@ abstract class ParseBase {
3933
}
4034

4135
if (createdAt != null) {
42-
map[keyVarCreatedAt] = dateTimeToString(createdAt);
36+
map[keyVarCreatedAt] = createdAt.toIso8601String();
4337
}
4438

4539
if (updatedAt != null) {
46-
map[keyVarUpdatedAt] = dateTimeToString(updatedAt);
40+
map[keyVarUpdatedAt] = updatedAt.toIso8601String();
4741
}
4842

4943
getObjectData().forEach((key, value) {
5044
if (!map.containsKey(key)) map[key] = parseEncode(value);
5145
});
5246

5347
if (forApiRQ) {
54-
map.remove(keyVarClassName);
55-
map.remove(keyVarAcl);
56-
map.remove(keyParamSessionToken);
48+
map.remove(keyVarCreatedAt);
49+
map.remove(keyVarUpdatedAt);
50+
map.remove(keyVarClassName);
51+
map.remove(keyVarAcl);
52+
map.remove(keyParamSessionToken);
5753
}
5854

5955
return map;
6056
}
6157

6258
@override
63-
String toString() => JsonEncoder().convert(toJson());
59+
String toString() => json.encode(toJson());
6460

6561
@protected
6662
fromJson(Map objectData) {
@@ -70,9 +66,9 @@ abstract class ParseBase {
7066
} else if (key == keyVarObjectId) {
7167
objectId = value;
7268
} else if (key == keyVarCreatedAt) {
73-
createdAt = stringToDateTime(value);
69+
set<DateTime>(keyVarCreatedAt, DateTime.parse(value));
7470
} else if (key == keyVarUpdatedAt) {
75-
updatedAt = stringToDateTime(value);
71+
set<DateTime>(keyVarUpdatedAt, DateTime.parse(value));
7672
} else {
7773
getObjectData()[key] = parseDecode(value);
7874
}
@@ -83,7 +79,7 @@ abstract class ParseBase {
8379

8480
/// Creates a copy of this class
8581
@protected
86-
copy() => fromJson(JsonDecoder().convert(toJson()));
82+
copy() => fromJson(json.decode(toJson()));
8783

8884
/// Sets all the objects variables
8985
@protected
@@ -135,7 +131,9 @@ abstract class ParseBase {
135131
/// Replicates Android SDK pin process and saves object to storage
136132
Future<bool> pin() async {
137133
if (objectId != null) {
138-
await ParseCoreData().getStore().setString(objectId, JsonEncoder().convert(toJson()));
134+
await ParseCoreData()
135+
.getStore()
136+
.setString(objectId, json.encode(toJson()));
139137
return true;
140138
} else {
141139
return false;
@@ -163,7 +161,7 @@ abstract class ParseBase {
163161
var itemFromStore = ParseCoreData().getStore().getString(objectId);
164162

165163
if (itemFromStore != null) {
166-
var map = JsonDecoder().convert(itemFromStore);
164+
var map = json.decode(itemFromStore);
167165

168166
if (map != null) {
169167
return fromJson(map);

lib/src/objects/parse_object.dart

+12-9
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
part of flutter_parse_sdk;
22

33
class ParseObject extends ParseBase implements ParseCloneable {
4-
5-
ParseObject.clone(String className): this('className');
4+
ParseObject.clone(String className) : this('className');
65

76
@override
87
clone(Map map) => ParseObject.clone(className)..fromJson(map);
@@ -16,18 +15,18 @@ class ParseObject extends ParseBase implements ParseCloneable {
1615
/// [String] className refers to the Table Name in your Parse Server,
1716
/// [bool] debug will overwrite the current default debug settings and
1817
/// [ParseHttpClient] can be overwritten to create your own HTTP Client
19-
ParseObject(String className, {bool debug: false}): super() {
18+
ParseObject(String className, {bool debug: false}) : super() {
2019
setClassName(className);
2120
_path = "$keyEndPointClasses$className";
2221
setClient(ParseHTTPClient());
2322
setDebug(isDebugEnabled(objectLevelDebug: debug));
2423
}
2524

26-
void setDebug(bool debug){
25+
void setDebug(bool debug) {
2726
_debug = debug;
2827
}
2928

30-
void setClient(ParseHTTPClient client){
29+
void setClient(ParseHTTPClient client) {
3130
_client = client;
3231
}
3332

@@ -57,7 +56,8 @@ class ParseObject extends ParseBase implements ParseCloneable {
5756
Future<ParseResponse> create() async {
5857
try {
5958
var uri = _client.data.serverUrl + "$_path";
60-
var result = await _client.post(uri, body: toJson(forApiRQ: true));
59+
var body = json.encode(toJson(forApiRQ: true));
60+
var result = await _client.post(uri, body: body);
6161
return handleResponse(result, ParseApiRQ.create);
6262
} on Exception catch (e) {
6363
return handleException(e, ParseApiRQ.create);
@@ -71,7 +71,8 @@ class ParseObject extends ParseBase implements ParseCloneable {
7171
} else {
7272
try {
7373
var uri = "${ParseCoreData().serverUrl}$_path/$objectId";
74-
var result = await _client.put(uri, body: toJson(forApiRQ: true));
74+
var body = json.encode(toJson(forApiRQ: true));
75+
var result = await _client.put(uri, body: body);
7576
return handleResponse(result, ParseApiRQ.save);
7677
} on Exception catch (e) {
7778
return handleException(e, ParseApiRQ.save);
@@ -107,7 +108,8 @@ class ParseObject extends ParseBase implements ParseCloneable {
107108
ParseResponse parseResponse = ParseResponse.handleResponse(this, response);
108109

109110
if (_debug) {
110-
logger(ParseCoreData().appName, className, type.toString(), parseResponse);
111+
logger(
112+
ParseCoreData().appName, className, type.toString(), parseResponse);
111113
}
112114

113115
return parseResponse;
@@ -119,7 +121,8 @@ class ParseObject extends ParseBase implements ParseCloneable {
119121
ParseResponse parseResponse = ParseResponse.handleException(exception);
120122

121123
if (_debug) {
122-
logger(ParseCoreData().appName, className, type.toString(), parseResponse);
124+
logger(
125+
ParseCoreData().appName, className, type.toString(), parseResponse);
123126
}
124127

125128
return parseResponse;

lib/src/objects/parse_response.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class ParseResponse {
1919
if (apiResponse != null) {
2020
parseResponse.statusCode = apiResponse.statusCode;
2121

22-
if (apiResponse.statusCode != 200) {
22+
if (apiResponse.statusCode != 200 && apiResponse.statusCode != 201) {
2323
return _handleError(parseResponse, apiResponse);
2424
} else if (apiResponse.body == "{\"results\":[]}"){
2525
return _handleSuccessWithNoResults(parseResponse, 1, "Successful request, but no results found");

lib/src/objects/parse_user.dart

+6-8
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class ParseUser extends ParseBase implements ParseCloneable {
106106
headers: {
107107
keyHeaderRevocableSession: "1",
108108
},
109-
body: JsonEncoder().convert(bodyData));
109+
body: json.encode(bodyData));
110110

111111
_handleResponse(response, ParseApiRQ.signUp);
112112
return this;
@@ -151,8 +151,7 @@ class ParseUser extends ParseBase implements ParseCloneable {
151151
try {
152152
final response = await _client.post(
153153
"${_client.data.serverUrl}$keyEndPointVerificationEmail",
154-
body: JsonEncoder().convert({keyVarEmail: emailAddress}));
155-
154+
body: json.encode({keyVarEmail: emailAddress}));
156155
return _handleResponse(response, ParseApiRQ.verificationEmailRequest);
157156
} on Exception catch (e) {
158157
return _handleException(e, ParseApiRQ.verificationEmailRequest);
@@ -164,7 +163,7 @@ class ParseUser extends ParseBase implements ParseCloneable {
164163
try {
165164
final response = await _client.post(
166165
"${_client.data.serverUrl}$keyEndPointRequestPasswordReset",
167-
body: JsonEncoder().convert({keyVarEmail: emailAddress}));
166+
body: json.encode({keyVarEmail: emailAddress}));
168167
return _handleResponse(response, ParseApiRQ.requestPasswordReset);
169168
} on Exception catch (e) {
170169
return _handleException(e, ParseApiRQ.requestPasswordReset);
@@ -180,10 +179,9 @@ class ParseUser extends ParseBase implements ParseCloneable {
180179
return signUp();
181180
} else {
182181
try {
183-
Map map = toJson(forApiRQ: true);
184-
final response = await _client.put(
185-
_client.data.serverUrl + "$path/$objectId",
186-
body: map);
182+
var uri = _client.data.serverUrl + "$path/$objectId";
183+
var body = json.encode(toJson(forApiRQ: true), toEncodable: dateTimeEncoder);
184+
final response = await _client.put(uri, body: body);
187185
return _handleResponse(response, ParseApiRQ.save);
188186
} on Exception catch (e) {
189187
return _handleException(e, ParseApiRQ.save);

lib/src/utils/parse_decoder.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ dynamic parseDecode(dynamic value) {
5050
switch (map["__type"]) {
5151
case "Date":
5252
String iso = map["iso"];
53-
return stringToDateTime(iso);
53+
return DateTime.parse(iso);
5454
case "Bytes":
5555
String val = map["base64"];
5656
return base64.decode(val);

lib/src/utils/parse_encoder.dart

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
part of flutter_parse_sdk;
22

3+
/// Custom encoder for DateTime
4+
dynamic dateTimeEncoder(dynamic item) {
5+
if(item is DateTime) {
6+
return item.toIso8601String();
7+
}
8+
return item;
9+
}
10+
311
bool isValidType(dynamic value) {
412
return value == null ||
513
value is String ||
@@ -24,7 +32,7 @@ dynamic parseEncode(dynamic value) {
2432
}
2533

2634
if (value is ParseObject) {
27-
return value.toJson;
35+
return _encodeObject(value);
2836
}
2937

3038
if (value is ParseUser) {
@@ -38,6 +46,10 @@ dynamic parseEncode(dynamic value) {
3846
return value;
3947
}
4048

49+
String _encodeObject(ParseObject object){
50+
return "{'__type': 'Pointer', $keyVarClassName: ${object.className}, $keyVarObjectId: ${object.objectId}}";
51+
}
52+
4153
Map<String, dynamic> _encodeDate(DateTime date) {
42-
return <String, dynamic>{"__type": "Date", "iso": dateTimeToString(date)};
54+
return <String, dynamic>{"__type": "Date", "iso": date.toIso8601String()};
4355
}

lib/src/utils/parse_utils_date.dart

-51
This file was deleted.

lib/src/utils/parse_utils_objects.dart

-9
This file was deleted.

0 commit comments

Comments
 (0)