exec method

Future<Map> exec(
  1. String method,
  2. String name, {
  3. dynamic fields = const {},
  4. dynamic objectId = '',
  5. dynamic queries = const {},
  6. Map<String, String> additionalHeaders = const {},
  7. dynamic path = '',
  8. dynamic multipart = false,
  9. dynamic isScript = false,
})

リクエストを実行する 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);
  }
}