Skip to content

Commit 2be5653

Browse files
committed
Version 1.0.4 - Added reflection style clones
1 parent 4b9045c commit 2be5653

File tree

6 files changed

+23
-6
lines changed

6 files changed

+23
-6
lines changed

example/lib/diet_plan.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,13 @@ import 'dart:core';
33

44
import 'package:parse_server_sdk/parse.dart';
55

6-
class DietPlan extends ParseObject {
6+
class DietPlan extends ParseObject implements ParseCloneable {
77
DietPlan() : super(DIET_PLAN);
8+
DietPlan.clone(): this();
9+
10+
/// Looks strangely hacky but due to Flutter not using reflection, we have to
11+
/// mimic a clone
12+
@override clone(Map map) => DietPlan.clone()..fromJson(map);
813

914
static const String DIET_PLAN = 'Diet_Plans';
1015
static const String NAME = 'Name';

lib/parse.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ part 'src/objects/parse_geo_point.dart';
2222
part 'src/objects/parse_object.dart';
2323
part 'src/objects/parse_response.dart';
2424
part 'src/objects/parse_user.dart';
25+
part 'src/objects/parse_clonable.dart';
2526
part 'src/utils/parse_utils_date.dart';
2627
part 'src/utils/parse_utils_objects.dart';
2728
part 'src/utils/parse_utils.dart';

lib/src/objects/parse_clonable.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
part of flutter_parse_sdk;
2+
3+
/// Creates method which can be used to deep clone objects
4+
abstract class ParseCloneable {
5+
clone(Map map);
6+
}

lib/src/objects/parse_object.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
part of flutter_parse_sdk;
22

3-
class ParseObject extends ParseBase {
3+
class ParseObject extends ParseBase implements ParseCloneable {
44

55
ParseObject.clone(String className): this('className');
66

7+
@override
8+
clone(Map map) => ParseObject.clone(className)..fromJson(map);
9+
710
String _path;
811
bool _debug;
912
ParseHTTPClient _client;

lib/src/objects/parse_response.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,7 @@ class ParseResponse {
8282

8383
/// Handles a response with a single result object
8484
static _handleSingleResult(ParseBase object, map) {
85-
if (object is ParseUser) object = ParseUser.clone(map);
86-
if (object is ParseObject) object = ParseObject.clone(object.className);
87-
return object.fromJson(map);
85+
if (object is ParseCloneable) return (object as ParseCloneable).clone(map);
86+
return null;
8887
}
8988
}

lib/src/objects/parse_user.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
part of flutter_parse_sdk;
22

3-
class ParseUser extends ParseBase {
3+
class ParseUser extends ParseBase implements ParseCloneable {
44

55
ParseUser.clone(Map map): this(map[USERNAME],map[PASSWORD],map[EMAIL]);
66

7+
@override
8+
clone(Map map) => ParseUser.clone(map)..fromJson(map);
9+
710
final String className = '_User';
811
static final String path = "/classes/_User";
912

0 commit comments

Comments
 (0)