diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ab7d326..2f26f34e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +## 20.3.1 + +* Fix passing of `null` values and stripping only non-nullable optional parameters from the request body + ## 20.3.0 * Add `total` parameter to list queries allowing skipping counting rows in a table for improved performance diff --git a/README.md b/README.md index 1653f064..7c6aab4a 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Add this to your package's `pubspec.yaml` file: ```yml dependencies: - appwrite: ^20.3.0 + appwrite: ^20.3.1 ``` You can install packages from the command line: diff --git a/docs/examples/avatars/get-screenshot.md b/docs/examples/avatars/get-screenshot.md new file mode 100644 index 00000000..768cb8f2 --- /dev/null +++ b/docs/examples/avatars/get-screenshot.md @@ -0,0 +1,65 @@ +import 'package:appwrite/appwrite.dart'; + +Client client = Client() + .setEndpoint('https://.cloud.appwrite.io/v1') // Your API Endpoint + .setProject(''); // Your project ID + +Avatars avatars = Avatars(client); + +// Downloading file +UInt8List bytes = await avatars.getScreenshot( + url: 'https://example.com', + headers: {}, // optional + viewportWidth: 1, // optional + viewportHeight: 1, // optional + scale: 0.1, // optional + theme: .light, // optional + userAgent: '', // optional + fullpage: false, // optional + locale: '', // optional + timezone: .africaAbidjan, // optional + latitude: -90, // optional + longitude: -180, // optional + accuracy: 0, // optional + touch: false, // optional + permissions: [], // optional + sleep: 0, // optional + width: 0, // optional + height: 0, // optional + quality: -1, // optional + output: .jpg, // optional +) + +final file = File('path_to_file/filename.ext'); +file.writeAsBytesSync(bytes); + +// Displaying image preview +FutureBuilder( + future: avatars.getScreenshot( + url:'https://example.com' , + headers:{} , // optional + viewportWidth:1 , // optional + viewportHeight:1 , // optional + scale:0.1 , // optional + theme: .light, // optional + userAgent:'' , // optional + fullpage:false , // optional + locale:'' , // optional + timezone: .africaAbidjan, // optional + latitude:-90 , // optional + longitude:-180 , // optional + accuracy:0 , // optional + touch:false , // optional + permissions:[] , // optional + sleep:0 , // optional + width:0 , // optional + height:0 , // optional + quality:-1 , // optional + output: .jpg, // optional +), // Works for both public file and private file, for private files you need to be logged in + builder: (context, snapshot) { + return snapshot.hasData && snapshot.data != null + ? Image.memory(snapshot.data) + : CircularProgressIndicator(); + } +); diff --git a/lib/enums.dart b/lib/enums.dart index 1559bafb..04d860cf 100644 --- a/lib/enums.dart +++ b/lib/enums.dart @@ -7,6 +7,9 @@ part 'src/enums/o_auth_provider.dart'; part 'src/enums/browser.dart'; part 'src/enums/credit_card.dart'; part 'src/enums/flag.dart'; +part 'src/enums/theme.dart'; +part 'src/enums/timezone.dart'; +part 'src/enums/output.dart'; part 'src/enums/execution_method.dart'; part 'src/enums/image_gravity.dart'; part 'src/enums/image_format.dart'; diff --git a/lib/services/account.dart b/lib/services/account.dart index 69e25d07..fcd2ca63 100644 --- a/lib/services/account.dart +++ b/lib/services/account.dart @@ -37,7 +37,7 @@ class Account extends Service { 'userId': userId, 'email': email, 'password': password, - 'name': name, + if (name != null) 'name': name, }; final Map apiHeaders = { @@ -83,8 +83,8 @@ class Account extends Service { const String apiPath = '/account/identities'; final Map apiParams = { - 'queries': queries, - 'total': total, + if (queries != null) 'queries': queries, + if (total != null) 'total': total, }; final Map apiHeaders = {}; @@ -138,8 +138,8 @@ class Account extends Service { const String apiPath = '/account/logs'; final Map apiParams = { - 'queries': queries, - 'total': total, + if (queries != null) 'queries': queries, + if (total != null) 'total': total, }; final Map apiHeaders = {}; @@ -563,7 +563,7 @@ class Account extends Service { final Map apiParams = { 'password': password, - 'oldPassword': oldPassword, + if (oldPassword != null) 'oldPassword': oldPassword, }; final Map apiHeaders = { @@ -821,9 +821,9 @@ class Account extends Service { .replaceAll('{provider}', provider.value); final Map params = { - 'success': success, - 'failure': failure, - 'scopes': scopes, + if (success != null) 'success': success, + if (failure != null) 'failure': failure, + if (scopes != null) 'scopes': scopes, 'project': client.config['project'], }; @@ -985,7 +985,7 @@ class Account extends Service { final Map apiParams = { 'targetId': targetId, 'identifier': identifier, - 'providerId': providerId, + if (providerId != null) 'providerId': providerId, }; final Map apiHeaders = { @@ -1062,7 +1062,7 @@ class Account extends Service { final Map apiParams = { 'userId': userId, 'email': email, - 'phrase': phrase, + if (phrase != null) 'phrase': phrase, }; final Map apiHeaders = { @@ -1099,8 +1099,8 @@ class Account extends Service { final Map apiParams = { 'userId': userId, 'email': email, - 'url': url, - 'phrase': phrase, + if (url != null) 'url': url, + if (phrase != null) 'phrase': phrase, }; final Map apiHeaders = { @@ -1136,9 +1136,9 @@ class Account extends Service { .replaceAll('{provider}', provider.value); final Map params = { - 'success': success, - 'failure': failure, - 'scopes': scopes, + if (success != null) 'success': success, + if (failure != null) 'failure': failure, + if (scopes != null) 'scopes': scopes, 'project': client.config['project'], }; diff --git a/lib/services/avatars.dart b/lib/services/avatars.dart index 8876025d..f24d5d84 100644 --- a/lib/services/avatars.dart +++ b/lib/services/avatars.dart @@ -25,9 +25,9 @@ class Avatars extends Service { '/avatars/browsers/{code}'.replaceAll('{code}', code.value); final Map params = { - 'width': width, - 'height': height, - 'quality': quality, + if (width != null) 'width': width, + if (height != null) 'height': height, + if (quality != null) 'quality': quality, 'project': client.config['project'], }; @@ -54,9 +54,9 @@ class Avatars extends Service { '/avatars/credit-cards/{code}'.replaceAll('{code}', code.value); final Map params = { - 'width': width, - 'height': height, - 'quality': quality, + if (width != null) 'width': width, + if (height != null) 'height': height, + if (quality != null) 'quality': quality, 'project': client.config['project'], }; @@ -98,9 +98,9 @@ class Avatars extends Service { '/avatars/flags/{code}'.replaceAll('{code}', code.value); final Map params = { - 'width': width, - 'height': height, - 'quality': quality, + if (width != null) 'width': width, + if (height != null) 'height': height, + if (quality != null) 'quality': quality, 'project': client.config['project'], }; @@ -126,8 +126,8 @@ class Avatars extends Service { final Map params = { 'url': url, - 'width': width, - 'height': height, + if (width != null) 'width': width, + if (height != null) 'height': height, 'project': client.config['project'], }; @@ -157,10 +157,10 @@ class Avatars extends Service { const String apiPath = '/avatars/initials'; final Map params = { - 'name': name, - 'width': width, - 'height': height, - 'background': background, + if (name != null) 'name': name, + if (width != null) 'width': width, + if (height != null) 'height': height, + if (background != null) 'background': background, 'project': client.config['project'], }; @@ -178,9 +178,71 @@ class Avatars extends Service { final Map params = { 'text': text, - 'size': size, - 'margin': margin, - 'download': download, + if (size != null) 'size': size, + if (margin != null) 'margin': margin, + if (download != null) 'download': download, + 'project': client.config['project'], + }; + + final res = await client.call(HttpMethod.get, + path: apiPath, params: params, responseType: ResponseType.bytes); + return res.data; + } + + /// Use this endpoint to capture a screenshot of any website URL. This endpoint + /// uses a headless browser to render the webpage and capture it as an image. + /// + /// You can configure the browser viewport size, theme, user agent, + /// geolocation, permissions, and more. Capture either just the viewport or the + /// full page scroll. + /// + /// When width and height are specified, the image is resized accordingly. If + /// both dimensions are 0, the API provides an image at original size. If + /// dimensions are not specified, the default viewport size is 1280x720px. + Future getScreenshot( + {required String url, + Map? headers, + int? viewportWidth, + int? viewportHeight, + double? scale, + enums.Theme? theme, + String? userAgent, + bool? fullpage, + String? locale, + enums.Timezone? timezone, + double? latitude, + double? longitude, + double? accuracy, + bool? touch, + List? permissions, + int? sleep, + int? width, + int? height, + int? quality, + enums.Output? output}) async { + const String apiPath = '/avatars/screenshots'; + + final Map params = { + 'url': url, + if (headers != null) 'headers': headers, + if (viewportWidth != null) 'viewportWidth': viewportWidth, + if (viewportHeight != null) 'viewportHeight': viewportHeight, + if (scale != null) 'scale': scale, + if (theme != null) 'theme': theme!.value, + if (userAgent != null) 'userAgent': userAgent, + if (fullpage != null) 'fullpage': fullpage, + if (locale != null) 'locale': locale, + if (timezone != null) 'timezone': timezone!.value, + if (latitude != null) 'latitude': latitude, + if (longitude != null) 'longitude': longitude, + if (accuracy != null) 'accuracy': accuracy, + if (touch != null) 'touch': touch, + if (permissions != null) 'permissions': permissions, + if (sleep != null) 'sleep': sleep, + if (width != null) 'width': width, + if (height != null) 'height': height, + if (quality != null) 'quality': quality, + if (output != null) 'output': output!.value, 'project': client.config['project'], }; diff --git a/lib/services/databases.dart b/lib/services/databases.dart index 1f2f2b6f..e3e83c52 100644 --- a/lib/services/databases.dart +++ b/lib/services/databases.dart @@ -12,7 +12,7 @@ class Databases extends Service { const String apiPath = '/databases/transactions'; final Map apiParams = { - 'queries': queries, + if (queries != null) 'queries': queries, }; final Map apiHeaders = {}; @@ -28,7 +28,7 @@ class Databases extends Service { const String apiPath = '/databases/transactions'; final Map apiParams = { - 'ttl': ttl, + if (ttl != null) 'ttl': ttl, }; final Map apiHeaders = { @@ -64,8 +64,8 @@ class Databases extends Service { .replaceAll('{transactionId}', transactionId); final Map apiParams = { - 'commit': commit, - 'rollback': rollback, + if (commit != null) 'commit': commit, + if (rollback != null) 'rollback': rollback, }; final Map apiHeaders = { @@ -102,7 +102,7 @@ class Databases extends Service { .replaceAll('{transactionId}', transactionId); final Map apiParams = { - 'operations': operations, + if (operations != null) 'operations': operations, }; final Map apiHeaders = { @@ -131,9 +131,9 @@ class Databases extends Service { .replaceAll('{collectionId}', collectionId); final Map apiParams = { - 'queries': queries, - 'transactionId': transactionId, - 'total': total, + if (queries != null) 'queries': queries, + if (transactionId != null) 'transactionId': transactionId, + if (total != null) 'total': total, }; final Map apiHeaders = {}; @@ -165,8 +165,8 @@ class Databases extends Service { final Map apiParams = { 'documentId': documentId, 'data': data, - 'permissions': permissions, - 'transactionId': transactionId, + if (permissions != null) 'permissions': permissions, + if (transactionId != null) 'transactionId': transactionId, }; final Map apiHeaders = { @@ -196,8 +196,8 @@ class Databases extends Service { .replaceAll('{documentId}', documentId); final Map apiParams = { - 'queries': queries, - 'transactionId': transactionId, + if (queries != null) 'queries': queries, + if (transactionId != null) 'transactionId': transactionId, }; final Map apiHeaders = {}; @@ -229,8 +229,8 @@ class Databases extends Service { final Map apiParams = { 'data': data, - 'permissions': permissions, - 'transactionId': transactionId, + if (permissions != null) 'permissions': permissions, + if (transactionId != null) 'transactionId': transactionId, }; final Map apiHeaders = { @@ -261,9 +261,9 @@ class Databases extends Service { .replaceAll('{documentId}', documentId); final Map apiParams = { - 'data': data, - 'permissions': permissions, - 'transactionId': transactionId, + if (data != null) 'data': data, + if (permissions != null) 'permissions': permissions, + if (transactionId != null) 'transactionId': transactionId, }; final Map apiHeaders = { @@ -291,7 +291,7 @@ class Databases extends Service { .replaceAll('{documentId}', documentId); final Map apiParams = { - 'transactionId': transactionId, + if (transactionId != null) 'transactionId': transactionId, }; final Map apiHeaders = { @@ -323,9 +323,9 @@ class Databases extends Service { .replaceAll('{attribute}', attribute); final Map apiParams = { - 'value': value, - 'min': min, - 'transactionId': transactionId, + if (value != null) 'value': value, + if (min != null) 'min': min, + if (transactionId != null) 'transactionId': transactionId, }; final Map apiHeaders = { @@ -357,9 +357,9 @@ class Databases extends Service { .replaceAll('{attribute}', attribute); final Map apiParams = { - 'value': value, - 'max': max, - 'transactionId': transactionId, + if (value != null) 'value': value, + if (max != null) 'max': max, + if (transactionId != null) 'transactionId': transactionId, }; final Map apiHeaders = { diff --git a/lib/services/functions.dart b/lib/services/functions.dart index b7d9e754..7aa458ee 100644 --- a/lib/services/functions.dart +++ b/lib/services/functions.dart @@ -14,8 +14,8 @@ class Functions extends Service { .replaceAll('{functionId}', functionId); final Map apiParams = { - 'queries': queries, - 'total': total, + if (queries != null) 'queries': queries, + if (total != null) 'total': total, }; final Map apiHeaders = {}; @@ -42,12 +42,12 @@ class Functions extends Service { .replaceAll('{functionId}', functionId); final Map apiParams = { - 'body': body, - 'async': xasync, - 'path': path, - 'method': method?.value, - 'headers': headers, - 'scheduledAt': scheduledAt, + if (body != null) 'body': body, + if (xasync != null) 'async': xasync, + if (path != null) 'path': path, + if (method != null) 'method': method!.value, + if (headers != null) 'headers': headers, + if (scheduledAt != null) 'scheduledAt': scheduledAt, }; final Map apiHeaders = { diff --git a/lib/services/storage.dart b/lib/services/storage.dart index de6ebb67..8cc371af 100644 --- a/lib/services/storage.dart +++ b/lib/services/storage.dart @@ -16,9 +16,9 @@ class Storage extends Service { '/storage/buckets/{bucketId}/files'.replaceAll('{bucketId}', bucketId); final Map apiParams = { - 'queries': queries, - 'search': search, - 'total': total, + if (queries != null) 'queries': queries, + if (search != null) 'search': search, + if (total != null) 'total': total, }; final Map apiHeaders = {}; @@ -59,7 +59,7 @@ class Storage extends Service { final Map apiParams = { 'fileId': fileId, 'file': file, - 'permissions': permissions, + if (permissions != null) 'permissions': permissions, }; final Map apiHeaders = { @@ -111,8 +111,8 @@ class Storage extends Service { .replaceAll('{fileId}', fileId); final Map apiParams = { - 'name': name, - 'permissions': permissions, + if (name != null) 'name': name, + if (permissions != null) 'permissions': permissions, }; final Map apiHeaders = { @@ -154,7 +154,7 @@ class Storage extends Service { .replaceAll('{fileId}', fileId); final Map params = { - 'token': token, + if (token != null) 'token': token, 'project': client.config['project'], }; @@ -188,18 +188,18 @@ class Storage extends Service { .replaceAll('{fileId}', fileId); final Map params = { - 'width': width, - 'height': height, - 'gravity': gravity?.value, - 'quality': quality, - 'borderWidth': borderWidth, - 'borderColor': borderColor, - 'borderRadius': borderRadius, - 'opacity': opacity, - 'rotation': rotation, - 'background': background, - 'output': output?.value, - 'token': token, + if (width != null) 'width': width, + if (height != null) 'height': height, + if (gravity != null) 'gravity': gravity!.value, + if (quality != null) 'quality': quality, + if (borderWidth != null) 'borderWidth': borderWidth, + if (borderColor != null) 'borderColor': borderColor, + if (borderRadius != null) 'borderRadius': borderRadius, + if (opacity != null) 'opacity': opacity, + if (rotation != null) 'rotation': rotation, + if (background != null) 'background': background, + if (output != null) 'output': output!.value, + if (token != null) 'token': token, 'project': client.config['project'], }; @@ -218,7 +218,7 @@ class Storage extends Service { .replaceAll('{fileId}', fileId); final Map params = { - 'token': token, + if (token != null) 'token': token, 'project': client.config['project'], }; diff --git a/lib/services/tables_db.dart b/lib/services/tables_db.dart index 39a44707..12a61f04 100644 --- a/lib/services/tables_db.dart +++ b/lib/services/tables_db.dart @@ -10,7 +10,7 @@ class TablesDB extends Service { const String apiPath = '/tablesdb/transactions'; final Map apiParams = { - 'queries': queries, + if (queries != null) 'queries': queries, }; final Map apiHeaders = {}; @@ -26,7 +26,7 @@ class TablesDB extends Service { const String apiPath = '/tablesdb/transactions'; final Map apiParams = { - 'ttl': ttl, + if (ttl != null) 'ttl': ttl, }; final Map apiHeaders = { @@ -62,8 +62,8 @@ class TablesDB extends Service { .replaceAll('{transactionId}', transactionId); final Map apiParams = { - 'commit': commit, - 'rollback': rollback, + if (commit != null) 'commit': commit, + if (rollback != null) 'rollback': rollback, }; final Map apiHeaders = { @@ -100,7 +100,7 @@ class TablesDB extends Service { .replaceAll('{transactionId}', transactionId); final Map apiParams = { - 'operations': operations, + if (operations != null) 'operations': operations, }; final Map apiHeaders = { @@ -126,9 +126,9 @@ class TablesDB extends Service { .replaceAll('{tableId}', tableId); final Map apiParams = { - 'queries': queries, - 'transactionId': transactionId, - 'total': total, + if (queries != null) 'queries': queries, + if (transactionId != null) 'transactionId': transactionId, + if (total != null) 'total': total, }; final Map apiHeaders = {}; @@ -157,8 +157,8 @@ class TablesDB extends Service { final Map apiParams = { 'rowId': rowId, 'data': data, - 'permissions': permissions, - 'transactionId': transactionId, + if (permissions != null) 'permissions': permissions, + if (transactionId != null) 'transactionId': transactionId, }; final Map apiHeaders = { @@ -186,8 +186,8 @@ class TablesDB extends Service { .replaceAll('{rowId}', rowId); final Map apiParams = { - 'queries': queries, - 'transactionId': transactionId, + if (queries != null) 'queries': queries, + if (transactionId != null) 'transactionId': transactionId, }; final Map apiHeaders = {}; @@ -216,9 +216,9 @@ class TablesDB extends Service { .replaceAll('{rowId}', rowId); final Map apiParams = { - 'data': data, - 'permissions': permissions, - 'transactionId': transactionId, + if (data != null) 'data': data, + if (permissions != null) 'permissions': permissions, + if (transactionId != null) 'transactionId': transactionId, }; final Map apiHeaders = { @@ -247,9 +247,9 @@ class TablesDB extends Service { .replaceAll('{rowId}', rowId); final Map apiParams = { - 'data': data, - 'permissions': permissions, - 'transactionId': transactionId, + if (data != null) 'data': data, + if (permissions != null) 'permissions': permissions, + if (transactionId != null) 'transactionId': transactionId, }; final Map apiHeaders = { @@ -275,7 +275,7 @@ class TablesDB extends Service { .replaceAll('{rowId}', rowId); final Map apiParams = { - 'transactionId': transactionId, + if (transactionId != null) 'transactionId': transactionId, }; final Map apiHeaders = { @@ -305,9 +305,9 @@ class TablesDB extends Service { .replaceAll('{column}', column); final Map apiParams = { - 'value': value, - 'min': min, - 'transactionId': transactionId, + if (value != null) 'value': value, + if (min != null) 'min': min, + if (transactionId != null) 'transactionId': transactionId, }; final Map apiHeaders = { @@ -337,9 +337,9 @@ class TablesDB extends Service { .replaceAll('{column}', column); final Map apiParams = { - 'value': value, - 'max': max, - 'transactionId': transactionId, + if (value != null) 'value': value, + if (max != null) 'max': max, + if (transactionId != null) 'transactionId': transactionId, }; final Map apiHeaders = { diff --git a/lib/services/teams.dart b/lib/services/teams.dart index 879459e9..6b4d5e39 100644 --- a/lib/services/teams.dart +++ b/lib/services/teams.dart @@ -13,9 +13,9 @@ class Teams extends Service { const String apiPath = '/teams'; final Map apiParams = { - 'queries': queries, - 'search': search, - 'total': total, + if (queries != null) 'queries': queries, + if (search != null) 'search': search, + if (total != null) 'total': total, }; final Map apiHeaders = {}; @@ -38,7 +38,7 @@ class Teams extends Service { final Map apiParams = { 'teamId': teamId, 'name': name, - 'roles': roles, + if (roles != null) 'roles': roles, }; final Map apiHeaders = { @@ -113,9 +113,9 @@ class Teams extends Service { '/teams/{teamId}/memberships'.replaceAll('{teamId}', teamId); final Map apiParams = { - 'queries': queries, - 'search': search, - 'total': total, + if (queries != null) 'queries': queries, + if (search != null) 'search': search, + if (total != null) 'total': total, }; final Map apiHeaders = {}; @@ -159,12 +159,12 @@ class Teams extends Service { '/teams/{teamId}/memberships'.replaceAll('{teamId}', teamId); final Map apiParams = { - 'email': email, - 'userId': userId, - 'phone': phone, + if (email != null) 'email': email, + if (userId != null) 'userId': userId, + if (phone != null) 'phone': phone, 'roles': roles, - 'url': url, - 'name': name, + if (url != null) 'url': url, + if (name != null) 'name': name, }; final Map apiHeaders = { diff --git a/lib/src/client_browser.dart b/lib/src/client_browser.dart index dfc2360c..26810cc4 100644 --- a/lib/src/client_browser.dart +++ b/lib/src/client_browser.dart @@ -40,7 +40,7 @@ class ClientBrowser extends ClientBase with ClientMixin { 'x-sdk-name': 'Flutter', 'x-sdk-platform': 'client', 'x-sdk-language': 'flutter', - 'x-sdk-version': '20.3.0', + 'x-sdk-version': '20.3.1', 'X-Appwrite-Response-Format': '1.8.0', }; diff --git a/lib/src/client_io.dart b/lib/src/client_io.dart index ac581fc6..961481c7 100644 --- a/lib/src/client_io.dart +++ b/lib/src/client_io.dart @@ -58,7 +58,7 @@ class ClientIO extends ClientBase with ClientMixin { 'x-sdk-name': 'Flutter', 'x-sdk-platform': 'client', 'x-sdk-language': 'flutter', - 'x-sdk-version': '20.3.0', + 'x-sdk-version': '20.3.1', 'X-Appwrite-Response-Format': '1.8.0', }; diff --git a/lib/src/client_mixin.dart b/lib/src/client_mixin.dart index e4f413a7..23d5468a 100644 --- a/lib/src/client_mixin.dart +++ b/lib/src/client_mixin.dart @@ -12,23 +12,24 @@ mixin ClientMixin { required Map headers, required Map params, }) { - if (params.isNotEmpty) { - params.removeWhere((key, value) => value == null); - } - http.BaseRequest request = http.Request(method.name(), uri); if (headers['content-type'] == 'multipart/form-data') { request = http.MultipartRequest(method.name(), uri); if (params.isNotEmpty) { params.forEach((key, value) { + if (value == null) { + return; + } if (value is http.MultipartFile) { (request as http.MultipartRequest).files.add(value); } else { if (value is List) { value.asMap().forEach((i, v) { - (request as http.MultipartRequest).fields.addAll({ - "$key[$i]": v.toString(), - }); + if (v != null) { + (request as http.MultipartRequest).fields.addAll({ + "$key[$i]": v.toString(), + }); + } }); } else { (request as http.MultipartRequest).fields.addAll({ @@ -40,15 +41,19 @@ mixin ClientMixin { } } else if (method == HttpMethod.get) { if (params.isNotEmpty) { - params = params.map((key, value) { - if (value is int || value is double) { - return MapEntry(key, value.toString()); - } - if (value is List) { - return MapEntry("$key[]", value); + Map filteredParams = {}; + params.forEach((key, value) { + if (value != null) { + if (value is int || value is double) { + filteredParams[key] = value.toString(); + } else if (value is List) { + filteredParams["$key[]"] = value; + } else { + filteredParams[key] = value; + } } - return MapEntry(key, value); }); + params = filteredParams; } uri = Uri( fragment: uri.fragment, diff --git a/lib/src/enums/output.dart b/lib/src/enums/output.dart new file mode 100644 index 00000000..01790d67 --- /dev/null +++ b/lib/src/enums/output.dart @@ -0,0 +1,17 @@ +part of '../../enums.dart'; + +enum Output { + jpg(value: 'jpg'), + jpeg(value: 'jpeg'), + png(value: 'png'), + webp(value: 'webp'), + heic(value: 'heic'), + avif(value: 'avif'), + gif(value: 'gif'); + + const Output({required this.value}); + + final String value; + + String toJson() => value; +} diff --git a/lib/src/enums/theme.dart b/lib/src/enums/theme.dart new file mode 100644 index 00000000..979320f1 --- /dev/null +++ b/lib/src/enums/theme.dart @@ -0,0 +1,12 @@ +part of '../../enums.dart'; + +enum Theme { + light(value: 'light'), + dark(value: 'dark'); + + const Theme({required this.value}); + + final String value; + + String toJson() => value; +} diff --git a/lib/src/enums/timezone.dart b/lib/src/enums/timezone.dart new file mode 100644 index 00000000..d5d8d94a --- /dev/null +++ b/lib/src/enums/timezone.dart @@ -0,0 +1,429 @@ +part of '../../enums.dart'; + +enum Timezone { + africaAbidjan(value: 'africa/abidjan'), + africaAccra(value: 'africa/accra'), + africaAddisAbaba(value: 'africa/addis_ababa'), + africaAlgiers(value: 'africa/algiers'), + africaAsmara(value: 'africa/asmara'), + africaBamako(value: 'africa/bamako'), + africaBangui(value: 'africa/bangui'), + africaBanjul(value: 'africa/banjul'), + africaBissau(value: 'africa/bissau'), + africaBlantyre(value: 'africa/blantyre'), + africaBrazzaville(value: 'africa/brazzaville'), + africaBujumbura(value: 'africa/bujumbura'), + africaCairo(value: 'africa/cairo'), + africaCasablanca(value: 'africa/casablanca'), + africaCeuta(value: 'africa/ceuta'), + africaConakry(value: 'africa/conakry'), + africaDakar(value: 'africa/dakar'), + africaDarEsSalaam(value: 'africa/dar_es_salaam'), + africaDjibouti(value: 'africa/djibouti'), + africaDouala(value: 'africa/douala'), + africaElAaiun(value: 'africa/el_aaiun'), + africaFreetown(value: 'africa/freetown'), + africaGaborone(value: 'africa/gaborone'), + africaHarare(value: 'africa/harare'), + africaJohannesburg(value: 'africa/johannesburg'), + africaJuba(value: 'africa/juba'), + africaKampala(value: 'africa/kampala'), + africaKhartoum(value: 'africa/khartoum'), + africaKigali(value: 'africa/kigali'), + africaKinshasa(value: 'africa/kinshasa'), + africaLagos(value: 'africa/lagos'), + africaLibreville(value: 'africa/libreville'), + africaLome(value: 'africa/lome'), + africaLuanda(value: 'africa/luanda'), + africaLubumbashi(value: 'africa/lubumbashi'), + africaLusaka(value: 'africa/lusaka'), + africaMalabo(value: 'africa/malabo'), + africaMaputo(value: 'africa/maputo'), + africaMaseru(value: 'africa/maseru'), + africaMbabane(value: 'africa/mbabane'), + africaMogadishu(value: 'africa/mogadishu'), + africaMonrovia(value: 'africa/monrovia'), + africaNairobi(value: 'africa/nairobi'), + africaNdjamena(value: 'africa/ndjamena'), + africaNiamey(value: 'africa/niamey'), + africaNouakchott(value: 'africa/nouakchott'), + africaOuagadougou(value: 'africa/ouagadougou'), + africaPortoNovo(value: 'africa/porto-novo'), + africaSaoTome(value: 'africa/sao_tome'), + africaTripoli(value: 'africa/tripoli'), + africaTunis(value: 'africa/tunis'), + africaWindhoek(value: 'africa/windhoek'), + americaAdak(value: 'america/adak'), + americaAnchorage(value: 'america/anchorage'), + americaAnguilla(value: 'america/anguilla'), + americaAntigua(value: 'america/antigua'), + americaAraguaina(value: 'america/araguaina'), + americaArgentinaBuenosAires(value: 'america/argentina/buenos_aires'), + americaArgentinaCatamarca(value: 'america/argentina/catamarca'), + americaArgentinaCordoba(value: 'america/argentina/cordoba'), + americaArgentinaJujuy(value: 'america/argentina/jujuy'), + americaArgentinaLaRioja(value: 'america/argentina/la_rioja'), + americaArgentinaMendoza(value: 'america/argentina/mendoza'), + americaArgentinaRioGallegos(value: 'america/argentina/rio_gallegos'), + americaArgentinaSalta(value: 'america/argentina/salta'), + americaArgentinaSanJuan(value: 'america/argentina/san_juan'), + americaArgentinaSanLuis(value: 'america/argentina/san_luis'), + americaArgentinaTucuman(value: 'america/argentina/tucuman'), + americaArgentinaUshuaia(value: 'america/argentina/ushuaia'), + americaAruba(value: 'america/aruba'), + americaAsuncion(value: 'america/asuncion'), + americaAtikokan(value: 'america/atikokan'), + americaBahia(value: 'america/bahia'), + americaBahiaBanderas(value: 'america/bahia_banderas'), + americaBarbados(value: 'america/barbados'), + americaBelem(value: 'america/belem'), + americaBelize(value: 'america/belize'), + americaBlancSablon(value: 'america/blanc-sablon'), + americaBoaVista(value: 'america/boa_vista'), + americaBogota(value: 'america/bogota'), + americaBoise(value: 'america/boise'), + americaCambridgeBay(value: 'america/cambridge_bay'), + americaCampoGrande(value: 'america/campo_grande'), + americaCancun(value: 'america/cancun'), + americaCaracas(value: 'america/caracas'), + americaCayenne(value: 'america/cayenne'), + americaCayman(value: 'america/cayman'), + americaChicago(value: 'america/chicago'), + americaChihuahua(value: 'america/chihuahua'), + americaCiudadJuarez(value: 'america/ciudad_juarez'), + americaCostaRica(value: 'america/costa_rica'), + americaCoyhaique(value: 'america/coyhaique'), + americaCreston(value: 'america/creston'), + americaCuiaba(value: 'america/cuiaba'), + americaCuracao(value: 'america/curacao'), + americaDanmarkshavn(value: 'america/danmarkshavn'), + americaDawson(value: 'america/dawson'), + americaDawsonCreek(value: 'america/dawson_creek'), + americaDenver(value: 'america/denver'), + americaDetroit(value: 'america/detroit'), + americaDominica(value: 'america/dominica'), + americaEdmonton(value: 'america/edmonton'), + americaEirunepe(value: 'america/eirunepe'), + americaElSalvador(value: 'america/el_salvador'), + americaFortNelson(value: 'america/fort_nelson'), + americaFortaleza(value: 'america/fortaleza'), + americaGlaceBay(value: 'america/glace_bay'), + americaGooseBay(value: 'america/goose_bay'), + americaGrandTurk(value: 'america/grand_turk'), + americaGrenada(value: 'america/grenada'), + americaGuadeloupe(value: 'america/guadeloupe'), + americaGuatemala(value: 'america/guatemala'), + americaGuayaquil(value: 'america/guayaquil'), + americaGuyana(value: 'america/guyana'), + americaHalifax(value: 'america/halifax'), + americaHavana(value: 'america/havana'), + americaHermosillo(value: 'america/hermosillo'), + americaIndianaIndianapolis(value: 'america/indiana/indianapolis'), + americaIndianaKnox(value: 'america/indiana/knox'), + americaIndianaMarengo(value: 'america/indiana/marengo'), + americaIndianaPetersburg(value: 'america/indiana/petersburg'), + americaIndianaTellCity(value: 'america/indiana/tell_city'), + americaIndianaVevay(value: 'america/indiana/vevay'), + americaIndianaVincennes(value: 'america/indiana/vincennes'), + americaIndianaWinamac(value: 'america/indiana/winamac'), + americaInuvik(value: 'america/inuvik'), + americaIqaluit(value: 'america/iqaluit'), + americaJamaica(value: 'america/jamaica'), + americaJuneau(value: 'america/juneau'), + americaKentuckyLouisville(value: 'america/kentucky/louisville'), + americaKentuckyMonticello(value: 'america/kentucky/monticello'), + americaKralendijk(value: 'america/kralendijk'), + americaLaPaz(value: 'america/la_paz'), + americaLima(value: 'america/lima'), + americaLosAngeles(value: 'america/los_angeles'), + americaLowerPrinces(value: 'america/lower_princes'), + americaMaceio(value: 'america/maceio'), + americaManagua(value: 'america/managua'), + americaManaus(value: 'america/manaus'), + americaMarigot(value: 'america/marigot'), + americaMartinique(value: 'america/martinique'), + americaMatamoros(value: 'america/matamoros'), + americaMazatlan(value: 'america/mazatlan'), + americaMenominee(value: 'america/menominee'), + americaMerida(value: 'america/merida'), + americaMetlakatla(value: 'america/metlakatla'), + americaMexicoCity(value: 'america/mexico_city'), + americaMiquelon(value: 'america/miquelon'), + americaMoncton(value: 'america/moncton'), + americaMonterrey(value: 'america/monterrey'), + americaMontevideo(value: 'america/montevideo'), + americaMontserrat(value: 'america/montserrat'), + americaNassau(value: 'america/nassau'), + americaNewYork(value: 'america/new_york'), + americaNome(value: 'america/nome'), + americaNoronha(value: 'america/noronha'), + americaNorthDakotaBeulah(value: 'america/north_dakota/beulah'), + americaNorthDakotaCenter(value: 'america/north_dakota/center'), + americaNorthDakotaNewSalem(value: 'america/north_dakota/new_salem'), + americaNuuk(value: 'america/nuuk'), + americaOjinaga(value: 'america/ojinaga'), + americaPanama(value: 'america/panama'), + americaParamaribo(value: 'america/paramaribo'), + americaPhoenix(value: 'america/phoenix'), + americaPortAuPrince(value: 'america/port-au-prince'), + americaPortOfSpain(value: 'america/port_of_spain'), + americaPortoVelho(value: 'america/porto_velho'), + americaPuertoRico(value: 'america/puerto_rico'), + americaPuntaArenas(value: 'america/punta_arenas'), + americaRankinInlet(value: 'america/rankin_inlet'), + americaRecife(value: 'america/recife'), + americaRegina(value: 'america/regina'), + americaResolute(value: 'america/resolute'), + americaRioBranco(value: 'america/rio_branco'), + americaSantarem(value: 'america/santarem'), + americaSantiago(value: 'america/santiago'), + americaSantoDomingo(value: 'america/santo_domingo'), + americaSaoPaulo(value: 'america/sao_paulo'), + americaScoresbysund(value: 'america/scoresbysund'), + americaSitka(value: 'america/sitka'), + americaStBarthelemy(value: 'america/st_barthelemy'), + americaStJohns(value: 'america/st_johns'), + americaStKitts(value: 'america/st_kitts'), + americaStLucia(value: 'america/st_lucia'), + americaStThomas(value: 'america/st_thomas'), + americaStVincent(value: 'america/st_vincent'), + americaSwiftCurrent(value: 'america/swift_current'), + americaTegucigalpa(value: 'america/tegucigalpa'), + americaThule(value: 'america/thule'), + americaTijuana(value: 'america/tijuana'), + americaToronto(value: 'america/toronto'), + americaTortola(value: 'america/tortola'), + americaVancouver(value: 'america/vancouver'), + americaWhitehorse(value: 'america/whitehorse'), + americaWinnipeg(value: 'america/winnipeg'), + americaYakutat(value: 'america/yakutat'), + antarcticaCasey(value: 'antarctica/casey'), + antarcticaDavis(value: 'antarctica/davis'), + antarcticaDumontdurville(value: 'antarctica/dumontdurville'), + antarcticaMacquarie(value: 'antarctica/macquarie'), + antarcticaMawson(value: 'antarctica/mawson'), + antarcticaMcmurdo(value: 'antarctica/mcmurdo'), + antarcticaPalmer(value: 'antarctica/palmer'), + antarcticaRothera(value: 'antarctica/rothera'), + antarcticaSyowa(value: 'antarctica/syowa'), + antarcticaTroll(value: 'antarctica/troll'), + antarcticaVostok(value: 'antarctica/vostok'), + arcticLongyearbyen(value: 'arctic/longyearbyen'), + asiaAden(value: 'asia/aden'), + asiaAlmaty(value: 'asia/almaty'), + asiaAmman(value: 'asia/amman'), + asiaAnadyr(value: 'asia/anadyr'), + asiaAqtau(value: 'asia/aqtau'), + asiaAqtobe(value: 'asia/aqtobe'), + asiaAshgabat(value: 'asia/ashgabat'), + asiaAtyrau(value: 'asia/atyrau'), + asiaBaghdad(value: 'asia/baghdad'), + asiaBahrain(value: 'asia/bahrain'), + asiaBaku(value: 'asia/baku'), + asiaBangkok(value: 'asia/bangkok'), + asiaBarnaul(value: 'asia/barnaul'), + asiaBeirut(value: 'asia/beirut'), + asiaBishkek(value: 'asia/bishkek'), + asiaBrunei(value: 'asia/brunei'), + asiaChita(value: 'asia/chita'), + asiaColombo(value: 'asia/colombo'), + asiaDamascus(value: 'asia/damascus'), + asiaDhaka(value: 'asia/dhaka'), + asiaDili(value: 'asia/dili'), + asiaDubai(value: 'asia/dubai'), + asiaDushanbe(value: 'asia/dushanbe'), + asiaFamagusta(value: 'asia/famagusta'), + asiaGaza(value: 'asia/gaza'), + asiaHebron(value: 'asia/hebron'), + asiaHoChiMinh(value: 'asia/ho_chi_minh'), + asiaHongKong(value: 'asia/hong_kong'), + asiaHovd(value: 'asia/hovd'), + asiaIrkutsk(value: 'asia/irkutsk'), + asiaJakarta(value: 'asia/jakarta'), + asiaJayapura(value: 'asia/jayapura'), + asiaJerusalem(value: 'asia/jerusalem'), + asiaKabul(value: 'asia/kabul'), + asiaKamchatka(value: 'asia/kamchatka'), + asiaKarachi(value: 'asia/karachi'), + asiaKathmandu(value: 'asia/kathmandu'), + asiaKhandyga(value: 'asia/khandyga'), + asiaKolkata(value: 'asia/kolkata'), + asiaKrasnoyarsk(value: 'asia/krasnoyarsk'), + asiaKualaLumpur(value: 'asia/kuala_lumpur'), + asiaKuching(value: 'asia/kuching'), + asiaKuwait(value: 'asia/kuwait'), + asiaMacau(value: 'asia/macau'), + asiaMagadan(value: 'asia/magadan'), + asiaMakassar(value: 'asia/makassar'), + asiaManila(value: 'asia/manila'), + asiaMuscat(value: 'asia/muscat'), + asiaNicosia(value: 'asia/nicosia'), + asiaNovokuznetsk(value: 'asia/novokuznetsk'), + asiaNovosibirsk(value: 'asia/novosibirsk'), + asiaOmsk(value: 'asia/omsk'), + asiaOral(value: 'asia/oral'), + asiaPhnomPenh(value: 'asia/phnom_penh'), + asiaPontianak(value: 'asia/pontianak'), + asiaPyongyang(value: 'asia/pyongyang'), + asiaQatar(value: 'asia/qatar'), + asiaQostanay(value: 'asia/qostanay'), + asiaQyzylorda(value: 'asia/qyzylorda'), + asiaRiyadh(value: 'asia/riyadh'), + asiaSakhalin(value: 'asia/sakhalin'), + asiaSamarkand(value: 'asia/samarkand'), + asiaSeoul(value: 'asia/seoul'), + asiaShanghai(value: 'asia/shanghai'), + asiaSingapore(value: 'asia/singapore'), + asiaSrednekolymsk(value: 'asia/srednekolymsk'), + asiaTaipei(value: 'asia/taipei'), + asiaTashkent(value: 'asia/tashkent'), + asiaTbilisi(value: 'asia/tbilisi'), + asiaTehran(value: 'asia/tehran'), + asiaThimphu(value: 'asia/thimphu'), + asiaTokyo(value: 'asia/tokyo'), + asiaTomsk(value: 'asia/tomsk'), + asiaUlaanbaatar(value: 'asia/ulaanbaatar'), + asiaUrumqi(value: 'asia/urumqi'), + asiaUstNera(value: 'asia/ust-nera'), + asiaVientiane(value: 'asia/vientiane'), + asiaVladivostok(value: 'asia/vladivostok'), + asiaYakutsk(value: 'asia/yakutsk'), + asiaYangon(value: 'asia/yangon'), + asiaYekaterinburg(value: 'asia/yekaterinburg'), + asiaYerevan(value: 'asia/yerevan'), + atlanticAzores(value: 'atlantic/azores'), + atlanticBermuda(value: 'atlantic/bermuda'), + atlanticCanary(value: 'atlantic/canary'), + atlanticCapeVerde(value: 'atlantic/cape_verde'), + atlanticFaroe(value: 'atlantic/faroe'), + atlanticMadeira(value: 'atlantic/madeira'), + atlanticReykjavik(value: 'atlantic/reykjavik'), + atlanticSouthGeorgia(value: 'atlantic/south_georgia'), + atlanticStHelena(value: 'atlantic/st_helena'), + atlanticStanley(value: 'atlantic/stanley'), + australiaAdelaide(value: 'australia/adelaide'), + australiaBrisbane(value: 'australia/brisbane'), + australiaBrokenHill(value: 'australia/broken_hill'), + australiaDarwin(value: 'australia/darwin'), + australiaEucla(value: 'australia/eucla'), + australiaHobart(value: 'australia/hobart'), + australiaLindeman(value: 'australia/lindeman'), + australiaLordHowe(value: 'australia/lord_howe'), + australiaMelbourne(value: 'australia/melbourne'), + australiaPerth(value: 'australia/perth'), + australiaSydney(value: 'australia/sydney'), + europeAmsterdam(value: 'europe/amsterdam'), + europeAndorra(value: 'europe/andorra'), + europeAstrakhan(value: 'europe/astrakhan'), + europeAthens(value: 'europe/athens'), + europeBelgrade(value: 'europe/belgrade'), + europeBerlin(value: 'europe/berlin'), + europeBratislava(value: 'europe/bratislava'), + europeBrussels(value: 'europe/brussels'), + europeBucharest(value: 'europe/bucharest'), + europeBudapest(value: 'europe/budapest'), + europeBusingen(value: 'europe/busingen'), + europeChisinau(value: 'europe/chisinau'), + europeCopenhagen(value: 'europe/copenhagen'), + europeDublin(value: 'europe/dublin'), + europeGibraltar(value: 'europe/gibraltar'), + europeGuernsey(value: 'europe/guernsey'), + europeHelsinki(value: 'europe/helsinki'), + europeIsleOfMan(value: 'europe/isle_of_man'), + europeIstanbul(value: 'europe/istanbul'), + europeJersey(value: 'europe/jersey'), + europeKaliningrad(value: 'europe/kaliningrad'), + europeKirov(value: 'europe/kirov'), + europeKyiv(value: 'europe/kyiv'), + europeLisbon(value: 'europe/lisbon'), + europeLjubljana(value: 'europe/ljubljana'), + europeLondon(value: 'europe/london'), + europeLuxembourg(value: 'europe/luxembourg'), + europeMadrid(value: 'europe/madrid'), + europeMalta(value: 'europe/malta'), + europeMariehamn(value: 'europe/mariehamn'), + europeMinsk(value: 'europe/minsk'), + europeMonaco(value: 'europe/monaco'), + europeMoscow(value: 'europe/moscow'), + europeOslo(value: 'europe/oslo'), + europeParis(value: 'europe/paris'), + europePodgorica(value: 'europe/podgorica'), + europePrague(value: 'europe/prague'), + europeRiga(value: 'europe/riga'), + europeRome(value: 'europe/rome'), + europeSamara(value: 'europe/samara'), + europeSanMarino(value: 'europe/san_marino'), + europeSarajevo(value: 'europe/sarajevo'), + europeSaratov(value: 'europe/saratov'), + europeSimferopol(value: 'europe/simferopol'), + europeSkopje(value: 'europe/skopje'), + europeSofia(value: 'europe/sofia'), + europeStockholm(value: 'europe/stockholm'), + europeTallinn(value: 'europe/tallinn'), + europeTirane(value: 'europe/tirane'), + europeUlyanovsk(value: 'europe/ulyanovsk'), + europeVaduz(value: 'europe/vaduz'), + europeVatican(value: 'europe/vatican'), + europeVienna(value: 'europe/vienna'), + europeVilnius(value: 'europe/vilnius'), + europeVolgograd(value: 'europe/volgograd'), + europeWarsaw(value: 'europe/warsaw'), + europeZagreb(value: 'europe/zagreb'), + europeZurich(value: 'europe/zurich'), + indianAntananarivo(value: 'indian/antananarivo'), + indianChagos(value: 'indian/chagos'), + indianChristmas(value: 'indian/christmas'), + indianCocos(value: 'indian/cocos'), + indianComoro(value: 'indian/comoro'), + indianKerguelen(value: 'indian/kerguelen'), + indianMahe(value: 'indian/mahe'), + indianMaldives(value: 'indian/maldives'), + indianMauritius(value: 'indian/mauritius'), + indianMayotte(value: 'indian/mayotte'), + indianReunion(value: 'indian/reunion'), + pacificApia(value: 'pacific/apia'), + pacificAuckland(value: 'pacific/auckland'), + pacificBougainville(value: 'pacific/bougainville'), + pacificChatham(value: 'pacific/chatham'), + pacificChuuk(value: 'pacific/chuuk'), + pacificEaster(value: 'pacific/easter'), + pacificEfate(value: 'pacific/efate'), + pacificFakaofo(value: 'pacific/fakaofo'), + pacificFiji(value: 'pacific/fiji'), + pacificFunafuti(value: 'pacific/funafuti'), + pacificGalapagos(value: 'pacific/galapagos'), + pacificGambier(value: 'pacific/gambier'), + pacificGuadalcanal(value: 'pacific/guadalcanal'), + pacificGuam(value: 'pacific/guam'), + pacificHonolulu(value: 'pacific/honolulu'), + pacificKanton(value: 'pacific/kanton'), + pacificKiritimati(value: 'pacific/kiritimati'), + pacificKosrae(value: 'pacific/kosrae'), + pacificKwajalein(value: 'pacific/kwajalein'), + pacificMajuro(value: 'pacific/majuro'), + pacificMarquesas(value: 'pacific/marquesas'), + pacificMidway(value: 'pacific/midway'), + pacificNauru(value: 'pacific/nauru'), + pacificNiue(value: 'pacific/niue'), + pacificNorfolk(value: 'pacific/norfolk'), + pacificNoumea(value: 'pacific/noumea'), + pacificPagoPago(value: 'pacific/pago_pago'), + pacificPalau(value: 'pacific/palau'), + pacificPitcairn(value: 'pacific/pitcairn'), + pacificPohnpei(value: 'pacific/pohnpei'), + pacificPortMoresby(value: 'pacific/port_moresby'), + pacificRarotonga(value: 'pacific/rarotonga'), + pacificSaipan(value: 'pacific/saipan'), + pacificTahiti(value: 'pacific/tahiti'), + pacificTarawa(value: 'pacific/tarawa'), + pacificTongatapu(value: 'pacific/tongatapu'), + pacificWake(value: 'pacific/wake'), + pacificWallis(value: 'pacific/wallis'), + utc(value: 'utc'); + + const Timezone({required this.value}); + + final String value; + + String toJson() => value; +} diff --git a/pubspec.yaml b/pubspec.yaml index 76c973dd..848a2e61 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: appwrite -version: 20.3.0 +version: 20.3.1 description: Appwrite is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API homepage: https://appwrite.io repository: https://github.com/appwrite/sdk-for-flutter diff --git a/test/services/avatars_test.dart b/test/services/avatars_test.dart index 01abe69c..8d2c48fb 100644 --- a/test/services/avatars_test.dart +++ b/test/services/avatars_test.dart @@ -145,5 +145,18 @@ void main() { ); expect(response, isA()); }); + + test('test method getScreenshot()', () async { + final Uint8List data = Uint8List.fromList([]); + + when(client.call( + HttpMethod.get, + )).thenAnswer((_) async => Response(data: data)); + + final response = await avatars.getScreenshot( + url: 'https://example.com', + ); + expect(response, isA()); + }); }); }