exec method
リクエストを実行する
method
リクエストメソッド
name
クラス名
objectId
オブジェクトID。省略時は空文字。
fields
データ情報。省略時は空のMap。
queries
検索条件。省略時は空のMap。
multipart
マルチパートリクエストかどうか(ファイルストア用)。省略時はfalse
path
パス。省略時は空文字。
additionHeaders
追加するヘッダー情報。省略時は空のMap。
isScript
スクリプト実行かどうか。省略時はfalse。
Implementation
Future<Map> exec(String method, String name,
{fields = const {},
objectId = '',
queries = const {},
Map<String, String> additionalHeaders = const {},
path = '',
multipart = false,
isScript = false}) async {
Signature s = new Signature(NCMBRequest.ncmb!, isScript: isScript);
DateTime time = DateTime.now();
final newFields = Map.from(fields)
..removeWhere((k, v) => (k == 'objectId' ||
k == 'createDate' ||
k == 'updateDate' ||
(method == 'PUT' && name == 'users' && k == 'authData') ||
(method == 'PUT' && name == 'users' && k == 'mailAddressConfirm')));
String signature = s.generate(method, name, time,
objectId: objectId, queries: queries, definePath: path);
String url =
s.url(name, objectId: objectId, queries: queries, definePath: path);
Map<String, String> headers = {
"X-NCMB-Application-Key": NCMBRequest.ncmb!.applicationKey!,
"X-NCMB-Timestamp": time.toUtc().toIso8601String(),
"X-NCMB-Signature": signature
};
headers.addAll(additionalHeaders);
if (name == 'files') {
headers.remove('Content-Type');
}
var sessionToken = NCMBRequest.ncmb!.sessionToken;
if (sessionToken != null) {
headers['X-NCMB-Apps-Session-Token'] = sessionToken;
}
try {
var response = await req(url, method, newFields, headers,
multipart: multipart, fileName: objectId);
if (response.data is Uint8List) {
return {"data": response.data};
}
if (!isScript && method == 'DELETE') return {};
return response.data;
} on DioError catch (e) {
throw Exception(e.response!.data);
}
}