Skip to content

Commit 82e554e

Browse files
authored
Merge branch 'master' into develop
2 parents 6ba0e8a + da7bd4c commit 82e554e

File tree

11 files changed

+120
-65
lines changed

11 files changed

+120
-65
lines changed

example/lib/main.dart

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_plugin_example/application_constants.dart';
33
import 'package:flutter_plugin_example/diet_plan.dart';
4-
import 'package:flutter_plugin_example/subscription.dart';
54
import 'package:parse_server_sdk/parse.dart';
65

76
void main() => runApp(new MyApp());
@@ -59,7 +58,6 @@ class _MyAppState extends State<MyApp> {
5958
initUser();
6059
function();
6160
functionWithParameters();
62-
test();
6361
}
6462

6563
void createItem() async {
@@ -139,13 +137,20 @@ class _MyAppState extends State<MyApp> {
139137

140138
initUser() async {
141139
// All return type ParseUser except all
142-
var user = ParseUser("TestFlutter", "TestPassword123", "[email protected]");
140+
var user =
141+
ParseUser("TestFlutter", "TestPassword123", "[email protected]");
143142
var response = await user.signUp();
144143
if (response.success) user = response.result;
145144

146145
response = await user.login();
147146
if (response.success) user = response.result;
148147

148+
response = await user.requestPasswordReset();
149+
if (response.success) user = response.result;
150+
151+
response = await user.verificationEmailRequest();
152+
if (response.success) user = response.result;
153+
149154
user = null;
150155
// Best practice for starting the app. This will check for a valid user
151156
user = await ParseUser.currentUser();
@@ -155,12 +160,6 @@ class _MyAppState extends State<MyApp> {
155160
response = await ParseUser.getCurrentUserFromServer();
156161
if (response.success) user = response.result;
157162

158-
response = await user.requestPasswordReset();
159-
if (response.success) user = response.result;
160-
161-
response = await user.verificationEmailRequest();
162-
if (response.success) user = response.result;
163-
164163
response = await user.save();
165164
if (response.success) user = response.result;
166165

@@ -179,14 +178,16 @@ class _MyAppState extends State<MyApp> {
179178
}
180179

181180
function() async {
182-
183-
var user = ParseUser("TestFlutter", "TestPassword123", "[email protected]");
181+
var user =
182+
ParseUser("TestFlutter", "TestPassword123", "[email protected]");
184183
await user.signUp();
185184
var loginResponse = await user.login();
186185
if (loginResponse.success) user = loginResponse.result;
187186

188187
var customClient = ParseHTTPClient();
189-
customClient.additionalHeaders = { keyHeaderSessionToken: ParseCoreData().sessionId };
188+
customClient.additionalHeaders = {
189+
keyHeaderSessionToken: ParseCoreData().sessionId
190+
};
190191
var function = ParseCloudFunction('hello', client: customClient);
191192
function.execute();
192193

@@ -213,15 +214,4 @@ class _MyAppState extends State<MyApp> {
213214
print("We have our configs.");
214215
}
215216
}
216-
217-
Future test() async {
218-
var operator = ParseObject('operator');
219-
operator.set<String>('objectId', "npTxjstsAe");
220-
221-
var query = QueryBuilder<SubscriptionParse>(SubscriptionParse())
222-
..whereEqualTo('operator', operator);
223-
224-
var result = await query.query();
225-
var response = result;
226-
}
227217
}

example/lib/subscription.dart

Lines changed: 0 additions & 31 deletions
This file was deleted.

lib/parse.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import 'package:meta/meta.dart';
1111
import 'package:path/path.dart' as path;
1212
import 'package:shared_preferences/shared_preferences.dart';
1313
import 'package:web_socket_channel/io.dart';
14+
import 'package:uuid/uuid.dart';
15+
import 'package:path_provider/path_provider.dart';
1416

1517
part 'src/base/parse_constants.dart';
1618

lib/src/base/parse_constants.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const String keyLibraryName = 'Flutter Parse SDK';
77
// End Points
88
const String keyEndPointUserName = '/users/me';
99
const String keyEndPointLogin = '/login';
10+
const String keyEndPointUsers = '/users';
1011
const String keyEndPointVerificationEmail = '/verificationEmailRequest';
1112
const String keyEndPointRequestPasswordReset = '/requestPasswordReset';
1213
const String keyEndPointClasses = '/classes/';

lib/src/enums/parse_enum_api_rq.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ enum ParseApiRQ {
1212
currentUser,
1313
signUp,
1414
login,
15+
loginAnonymous,
1516
verificationEmailRequest,
1617
requestPasswordReset,
1718
destroy,
1819
all,
1920
execute,
21+
executeObjectionFunction,
2022
upload,
2123
add,
2224
addAll,

lib/src/objects/parse_file.dart

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ class ParseFile extends ParseObject {
1212

1313
String get url => _fileUrl;
1414

15+
File get file => _file;
16+
17+
set url(String url) => _fileUrl = url;
18+
19+
set name(String name) => _fileName = name;
20+
1521
bool get saved => url != null;
1622

1723
@override
@@ -24,14 +30,56 @@ class ParseFile extends ParseObject {
2430
/// Creates a new file
2531
///
2632
/// {https://docs.parseplatform.org/rest/guide/#files/}
27-
ParseFile(this._file, {bool debug, ParseHTTPClient client}) : super(keyFile) {
33+
ParseFile(this._file,
34+
{String name, String url, bool debug, ParseHTTPClient client})
35+
: super(keyFile) {
2836
client == null
2937
? _client = ParseHTTPClient(ParseCoreData().securityContext)
3038
: _client = client;
39+
3140
_debug = isDebugEnabled(objectLevelDebug: debug);
41+
if (_file != null) {
42+
this._fileName = path.basename(_file.path);
43+
this._path = 'files/$_fileName';
44+
} else {
45+
this._fileName = name;
46+
this._fileUrl = url;
47+
}
48+
}
49+
50+
Future<ParseFile> loadStorage() async {
51+
Directory tempPath = await getTemporaryDirectory();
52+
53+
if (_fileName == null) {
54+
_file = null;
55+
return this;
56+
}
57+
58+
File possibleFile = new File("${tempPath.path}/$_fileName");
59+
bool exists = await possibleFile.exists();
60+
61+
if (exists) {
62+
_file = possibleFile;
63+
} else {
64+
_file = null;
65+
}
66+
67+
return this;
68+
}
69+
70+
Future<ParseFile> download() async {
71+
if (_fileUrl == null) {
72+
return this;
73+
}
74+
75+
Directory tempPath = await getTemporaryDirectory();
76+
this._file = new File("${tempPath.path}/$_fileName");
77+
await _file.create();
78+
79+
var response = await _client.get(_fileUrl);
80+
_file.writeAsBytes(response.bodyBytes);
3281

33-
this._fileName = path.basename(_file.path);
34-
this._path = 'files/$_fileName';
82+
return this;
3583
}
3684

3785
/// Uploads a file to Parse Server

lib/src/objects/parse_function.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,16 @@ class ParseCloudFunction extends ParseObject {
2626
var result = await _client.post(uri, body: json.encode(getObjectData()));
2727
return handleResponse(this, result, ParseApiRQ.execute, _debug, className);
2828
}
29+
30+
/// Executes a cloud function that returns a ParseObject type
31+
///
32+
/// To add the parameters, create an object and call [set](value to set)
33+
Future<ParseResponse> executeObjectFunction<T extends ParseObject>(
34+
{Map parameters, Map headers}) async {
35+
var uri = _client.data.serverUrl + "$_path";
36+
if (parameters != null) setObjectData(parameters);
37+
var result = await _client.post(uri, body: json.encode(getObjectData()));
38+
return handleResponse<T>(
39+
this, result, ParseApiRQ.executeObjectionFunction, _debug, className);
40+
}
2941
}

lib/src/objects/parse_object.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
part of flutter_parse_sdk;
22

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

67
@override
78
clone(Map map) => ParseObject.clone(className)..fromJson(map);

lib/src/objects/parse_user.dart

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ class ParseUser extends ParseObject implements ParseCloneable {
154154
keyVarPassword: password
155155
});
156156

157-
final response = await _client.post(url, headers: {
157+
final response = await _client.get(url, headers: {
158158
keyHeaderRevocableSession: "1",
159159
});
160160

@@ -165,6 +165,36 @@ class ParseUser extends ParseObject implements ParseCloneable {
165165
}
166166
}
167167

168+
// Logs in a user anonymously
169+
Future<ParseResponse> loginAnonymous() async {
170+
try {
171+
Uri tempUri = Uri.parse(_client.data.serverUrl);
172+
173+
Uri url = Uri(
174+
scheme: tempUri.scheme,
175+
host: tempUri.host,
176+
path: "${tempUri.path}$keyEndPointUsers",
177+
);
178+
179+
var uuid = new Uuid();
180+
181+
final response = await _client.post(url,
182+
headers: {
183+
keyHeaderRevocableSession: "1",
184+
},
185+
body: jsonEncode({
186+
"authData": {
187+
"anonymous": {"id": uuid.v4()}
188+
}
189+
}));
190+
191+
return _handleResponse(
192+
this, response, ParseApiRQ.loginAnonymous, _debug, className);
193+
} on Exception catch (e) {
194+
return _handleException(e, ParseApiRQ.loginAnonymous, _debug, className);
195+
}
196+
}
197+
168198
/// Removes the current user from the session data
169199
logout() {
170200
_client.data.sessionId = null;
@@ -212,7 +242,9 @@ class ParseUser extends ParseObject implements ParseCloneable {
212242
var uri = _client.data.serverUrl + "$path/$objectId";
213243
var body =
214244
json.encode(toJson(forApiRQ: true), toEncodable: dateTimeEncoder);
215-
final response = await _client.put(uri, body: body);
245+
final response = await _client.put(uri,
246+
headers: {keyHeaderSessionToken: _client.data.sessionId},
247+
body: body);
216248
return _handleResponse(
217249
this, response, ParseApiRQ.save, _debug, className);
218250
} on Exception catch (e) {

lib/src/utils/parse_decoder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ dynamic parseDecode(dynamic value) {
6464
}
6565
return ParseObject(className).fromJson(map);
6666
case "File":
67-
return new ParseFile(null).fromJson(map);
67+
return new ParseFile(null, url: map["url"], name: map["name"]).fromJson(map);
6868
case "GeoPoint":
6969
num latitude = map["latitude"] ?? 0.0;
7070
num longitude = map["longitude"] ?? 0.0;

pubspec.yaml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,10 @@ dependencies:
1818
# Utils
1919
shared_preferences: ^0.4.3
2020
path_provider: ^0.4.1
21-
22-
23-
21+
uuid: ^1.0.3
2422

2523
dev_dependencies:
2624
# Testing
2725
test: ^1.5.1
2826
flutter_test:
29-
sdk: flutter
27+
sdk: flutter

0 commit comments

Comments
 (0)