Skip to content

Commit 362c196

Browse files
committed
fix null parsing issue in request body
1 parent c7575b8 commit 362c196

File tree

161 files changed

+8064
-7249
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

161 files changed

+8064
-7249
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Change Log
22

3+
## 20.3.1
4+
5+
* Fix passing of `null` values and stripping only non-nullable optional parameters from the request body
6+
37
## 20.3.0
48

59
* Add `total` parameter to list queries allowing skipping counting rows in a table for improved performance
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import 'package:appwrite/appwrite.dart';
2+
3+
Client client = Client()
4+
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
5+
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
6+
7+
Avatars avatars = Avatars(client);
8+
9+
// Downloading file
10+
UInt8List bytes = await avatars.getScreenshot(
11+
url: 'https://example.com',
12+
headers: {}, // optional
13+
viewportWidth: 1, // optional
14+
viewportHeight: 1, // optional
15+
scale: 0.1, // optional
16+
theme: .light, // optional
17+
userAgent: '<USER_AGENT>', // optional
18+
fullpage: false, // optional
19+
locale: '<LOCALE>', // optional
20+
timezone: .africaAbidjan, // optional
21+
latitude: -90, // optional
22+
longitude: -180, // optional
23+
accuracy: 0, // optional
24+
touch: false, // optional
25+
permissions: [], // optional
26+
sleep: 0, // optional
27+
width: 0, // optional
28+
height: 0, // optional
29+
quality: -1, // optional
30+
output: .jpg, // optional
31+
)
32+
33+
final file = File('path_to_file/filename.ext');
34+
file.writeAsBytesSync(bytes);
35+
36+
// Displaying image preview
37+
FutureBuilder(
38+
future: avatars.getScreenshot(
39+
url:'https://example.com' ,
40+
headers:{} , // optional
41+
viewportWidth:1 , // optional
42+
viewportHeight:1 , // optional
43+
scale:0.1 , // optional
44+
theme: .light, // optional
45+
userAgent:'<USER_AGENT>' , // optional
46+
fullpage:false , // optional
47+
locale:'<LOCALE>' , // optional
48+
timezone: .africaAbidjan, // optional
49+
latitude:-90 , // optional
50+
longitude:-180 , // optional
51+
accuracy:0 , // optional
52+
touch:false , // optional
53+
permissions:[] , // optional
54+
sleep:0 , // optional
55+
width:0 , // optional
56+
height:0 , // optional
57+
quality:-1 , // optional
58+
output: .jpg, // optional
59+
), // Works for both public file and private file, for private files you need to be logged in
60+
builder: (context, snapshot) {
61+
return snapshot.hasData && snapshot.data != null
62+
? Image.memory(snapshot.data)
63+
: CircularProgressIndicator();
64+
}
65+
);

lib/appwrite.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/// Appwrite Flutter SDK
22
///
3-
/// This SDK is compatible with Appwrite server version 1.8.x.
3+
/// This SDK is compatible with Appwrite server version 1.8.x.
44
/// For older versions, please check
55
/// [previous releases](https://github.com/appwrite/sdk-for-flutter/releases).
66
library appwrite;

lib/client_browser.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export 'src/client_browser.dart';
1+
export 'src/client_browser.dart';

lib/client_io.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export 'src/client_io.dart';
1+
export 'src/client_io.dart';

lib/enums.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ part 'src/enums/o_auth_provider.dart';
77
part 'src/enums/browser.dart';
88
part 'src/enums/credit_card.dart';
99
part 'src/enums/flag.dart';
10+
part 'src/enums/theme.dart';
11+
part 'src/enums/timezone.dart';
12+
part 'src/enums/output.dart';
1013
part 'src/enums/execution_method.dart';
1114
part 'src/enums/image_gravity.dart';
1215
part 'src/enums/image_format.dart';

lib/operator.dart

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class Operator {
3131

3232
result['method'] = method;
3333

34-
if (values != null) {
34+
if(values != null) {
3535
result['values'] = values is List ? values : [values];
3636
}
3737

@@ -147,7 +147,8 @@ class Operator {
147147
Operator._('arrayRemove', [value]).toString();
148148

149149
/// Remove duplicate values from an array attribute.
150-
static String arrayUnique() => Operator._('arrayUnique', []).toString();
150+
static String arrayUnique() =>
151+
Operator._('arrayUnique', []).toString();
151152

152153
/// Keep only values that exist in both the current array and the provided array.
153154
static String arrayIntersect(List<dynamic> values) =>
@@ -172,7 +173,8 @@ class Operator {
172173
Operator._('stringReplace', [search, replace]).toString();
173174

174175
/// Toggle a boolean attribute.
175-
static String toggle() => Operator._('toggle', []).toString();
176+
static String toggle() =>
177+
Operator._('toggle', []).toString();
176178

177179
/// Add days to a date attribute.
178180
static String dateAddDays(int days) =>
@@ -183,5 +185,6 @@ class Operator {
183185
Operator._('dateSubDays', [days]).toString();
184186

185187
/// Set a date attribute to the current date and time.
186-
static String dateSetNow() => Operator._('dateSetNow', []).toString();
188+
static String dateSetNow() =>
189+
Operator._('dateSetNow', []).toString();
187190
}

lib/query.dart

Lines changed: 36 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ class Query {
1010

1111
Map<String, dynamic> toJson() {
1212
final result = <String, dynamic>{};
13-
13+
1414
result['method'] = method;
15-
16-
if (attribute != null) {
15+
16+
if(attribute != null) {
1717
result['attribute'] = attribute;
1818
}
19-
20-
if (values != null) {
19+
20+
if(values != null) {
2121
result['values'] = values is List ? values : [values];
2222
}
2323

@@ -28,7 +28,7 @@ class Query {
2828
String toString() => jsonEncode(toJson());
2929

3030
/// Filter resources where [attribute] is equal to [value].
31-
///
31+
///
3232
/// [value] can be a single value or a list. If a list is used
3333
/// the query will return resources where [attribute] is equal
3434
/// to any of the values in the list.
@@ -106,36 +106,40 @@ class Query {
106106
Query._('notEndsWith', attribute, value).toString();
107107

108108
/// Filter resources where document was created before [value].
109-
static String createdBefore(String value) => lessThan('\$createdAt', value);
109+
static String createdBefore(String value) =>
110+
lessThan('\$createdAt', value);
110111

111112
/// Filter resources where document was created after [value].
112-
static String createdAfter(String value) => greaterThan('\$createdAt', value);
113+
static String createdAfter(String value) =>
114+
greaterThan('\$createdAt', value);
113115

114116
/// Filter resources where document was created between [start] and [end] (inclusive).
115117
static String createdBetween(String start, String end) =>
116118
between('\$createdAt', start, end);
117119

118120
/// Filter resources where document was updated before [value].
119-
static String updatedBefore(String value) => lessThan('\$updatedAt', value);
121+
static String updatedBefore(String value) =>
122+
lessThan('\$updatedAt', value);
120123

121124
/// Filter resources where document was updated after [value].
122-
static String updatedAfter(String value) => greaterThan('\$updatedAt', value);
125+
static String updatedAfter(String value) =>
126+
greaterThan('\$updatedAt', value);
123127

124128
/// Filter resources where document was updated between [start] and [end] (inclusive).
125129
static String updatedBetween(String start, String end) =>
126130
between('\$updatedAt', start, end);
127131

128132
static String or(List<String> queries) => Query._(
129-
'or',
130-
null,
131-
queries.map((query) => jsonDecode(query)).toList(),
132-
).toString();
133+
'or',
134+
null,
135+
queries.map((query) => jsonDecode(query)).toList(),
136+
).toString();
133137

134138
static String and(List<String> queries) => Query._(
135-
'and',
136-
null,
137-
queries.map((query) => jsonDecode(query)).toList(),
138-
).toString();
139+
'and',
140+
null,
141+
queries.map((query) => jsonDecode(query)).toList(),
142+
).toString();
139143

140144
/// Specify which attributes should be returned by the API call.
141145
static String select(List<String> attributes) =>
@@ -150,17 +154,18 @@ class Query {
150154
Query._('orderDesc', attribute).toString();
151155

152156
/// Sort results randomly.
153-
static String orderRandom() => Query._('orderRandom').toString();
157+
static String orderRandom() =>
158+
Query._('orderRandom').toString();
154159

155160
/// Return results before [id].
156-
///
161+
///
157162
/// Refer to the [Cursor Based Pagination](https://appwrite.io/docs/pagination#cursor-pagination)
158163
/// docs for more information.
159164
static String cursorBefore(String id) =>
160165
Query._('cursorBefore', null, id).toString();
161166

162167
/// Return results after [id].
163-
///
168+
///
164169
/// Refer to the [Cursor Based Pagination](https://appwrite.io/docs/pagination#cursor-pagination)
165170
/// docs for more information.
166171
static String cursorAfter(String id) =>
@@ -170,43 +175,27 @@ class Query {
170175
static String limit(int limit) => Query._('limit', null, limit).toString();
171176

172177
/// Return results from [offset].
173-
///
178+
///
174179
/// Refer to the [Offset Pagination](https://appwrite.io/docs/pagination#offset-pagination)
175180
/// docs for more information.
176181
static String offset(int offset) =>
177182
Query._('offset', null, offset).toString();
178183

179184
/// Filter resources where [attribute] is at a specific distance from the given coordinates.
180-
static String distanceEqual(
181-
String attribute, List<dynamic> values, num distance,
182-
[bool meters = true]) =>
183-
Query._('distanceEqual', attribute, [
184-
[values, distance, meters]
185-
]).toString();
185+
static String distanceEqual(String attribute, List<dynamic> values, num distance, [bool meters = true]) =>
186+
Query._('distanceEqual', attribute, [[values, distance, meters]]).toString();
186187

187188
/// Filter resources where [attribute] is not at a specific distance from the given coordinates.
188-
static String distanceNotEqual(
189-
String attribute, List<dynamic> values, num distance,
190-
[bool meters = true]) =>
191-
Query._('distanceNotEqual', attribute, [
192-
[values, distance, meters]
193-
]).toString();
189+
static String distanceNotEqual(String attribute, List<dynamic> values, num distance, [bool meters = true]) =>
190+
Query._('distanceNotEqual', attribute, [[values, distance, meters]]).toString();
194191

195192
/// Filter resources where [attribute] is at a distance greater than the specified value from the given coordinates.
196-
static String distanceGreaterThan(
197-
String attribute, List<dynamic> values, num distance,
198-
[bool meters = true]) =>
199-
Query._('distanceGreaterThan', attribute, [
200-
[values, distance, meters]
201-
]).toString();
193+
static String distanceGreaterThan(String attribute, List<dynamic> values, num distance, [bool meters = true]) =>
194+
Query._('distanceGreaterThan', attribute, [[values, distance, meters]]).toString();
202195

203196
/// Filter resources where [attribute] is at a distance less than the specified value from the given coordinates.
204-
static String distanceLessThan(
205-
String attribute, List<dynamic> values, num distance,
206-
[bool meters = true]) =>
207-
Query._('distanceLessThan', attribute, [
208-
[values, distance, meters]
209-
]).toString();
197+
static String distanceLessThan(String attribute, List<dynamic> values, num distance, [bool meters = true]) =>
198+
Query._('distanceLessThan', attribute, [[values, distance, meters]]).toString();
210199

211200
/// Filter resources where [attribute] intersects with the given geometry.
212201
static String intersects(String attribute, List<dynamic> values) =>
@@ -239,4 +228,4 @@ class Query {
239228
/// Filter resources where [attribute] does not touch the given geometry.
240229
static String notTouches(String attribute, List<dynamic> values) =>
241230
Query._('notTouches', attribute, [values]).toString();
242-
}
231+
}

lib/realtime_browser.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export 'src/realtime_browser.dart';
1+
export 'src/realtime_browser.dart';

lib/realtime_io.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export 'src/realtime_io.dart';
1+
export 'src/realtime_io.dart';

0 commit comments

Comments
 (0)