address method

Future address({
  1. required String value,
  2. required String tab,
  3. bool findAll = false,
  4. int page = 1,
  5. int pageSize = 1000,
})

Implementation

Future<dynamic> address(
    {required String value,
    required String tab,
    bool findAll = false,
    int page = 1,
    // Maximun page size
    int pageSize = 1000}) async {
  try {
    switch (tab) {
      case 'blocks':
        PaginatedRequest<dynamic> result = await client.get(api(
            'address/blocks',
            {'address': value, 'page': page, 'page_size': pageSize}));
        List<dynamic> data = result.data;
        if (findAll) {
          data = await getAllResults(result, 'address/blocks',
              {'address': value, 'page': page, 'page_size': pageSize});
        }
        return PaginatedRequest(
          data: data.isNotEmpty ? AddressBlocks.fromJson(data) : null,
          firstPage: result.firstPage,
          lastPage: result.lastPage,
          page: result.page,
          total: result.total,
          totalPages: result.totalPages,
        );
      case 'info':
        List<dynamic> data =
            await client.get(api('address/info', {'addresses': value}));
        return data.length > 0
            ? data.map((info) => AddressInfo.fromJson(info)).toList()
            : [];
      case 'details':
        Map<String, dynamic> data =
            await client.get(api('address/details', {'address': value}));
        return AddressDetails.fromJson({...data, 'address': value});
      case 'labels':
        List<dynamic> data = await client.get(api('address/labels'));
        return data.length > 0
            ? data.map((label) => AddressLabel.fromJson(label)).toList()
            : [];
      case 'mints':
        PaginatedRequest<dynamic> result = await client.get(api(
            'address/mints',
            {'address': value, 'page': page, 'page_size': pageSize}));
        List<dynamic> data = result.data;
        if (findAll) {
          data = await getAllResults(result, 'address/mints',
              {'address': value, 'page': page, 'page_size': pageSize});
        }
        return PaginatedRequest(
          data: AddressMints.fromJson({'address': value, 'mints': data}),
          firstPage: result.firstPage,
          lastPage: result.lastPage,
          page: result.page,
          total: result.total,
          totalPages: result.totalPages,
        );
      case 'data_requests_solved':
        PaginatedRequest<dynamic> result = await client.get(api(
            'address/data-requests-solved',
            {'address': value, 'page': page, 'page_size': pageSize}));
        List<dynamic> data = result.data;
        if (findAll) {
          data = await getAllResults(result, 'address/data-requests-solved',
              {'address': value, 'page': page, 'page_size': pageSize});
        }
        return PaginatedRequest(
          data: AddressDataRequestsSolved.fromJson(
              {'address': value, 'data_requests_solved': data}),
          firstPage: result.firstPage,
          lastPage: result.lastPage,
          page: result.page,
          total: result.total,
          totalPages: result.totalPages,
        );
      case 'data_requests_created':
        PaginatedRequest<dynamic> result = await client.get(api(
            'address/data-requests-created',
            {'address': value, 'page': page, 'page_size': pageSize}));
        List<dynamic> data = result.data;
        if (findAll) {
          data = await getAllResults(result, 'address/data-requests-created',
              {'address': value, 'page': page, 'page_size': pageSize});
        }
        return PaginatedRequest(
          data: AddressDataRequestsCreated.fromJson(
              {'address': value, 'data_requests_created': data}),
          firstPage: result.firstPage,
          lastPage: result.lastPage,
          page: result.page,
          total: result.total,
          totalPages: result.totalPages,
        );
      case 'value_transfers':
        PaginatedRequest<dynamic> result = await client.get(api(
            'address/value-transfers',
            {'address': value, 'page': page, 'page_size': pageSize}));
        List<dynamic> data = result.data;
        if (findAll) {
          data = await getAllResults(result, 'address/value-transfers',
              {'address': value, 'page': page, 'page_size': pageSize});
        }
        return PaginatedRequest(
          data: AddressValueTransfers.fromJson(
              {"value_transfers": data, "address": value}),
          firstPage: result.firstPage,
          lastPage: result.lastPage,
          page: result.page,
          total: result.total,
          totalPages: result.totalPages,
        );
      case 'stakes':
        PaginatedRequest<dynamic> result = await client.get(api(
            'address/stakes',
            {'address': value, 'page': page, 'page_size': pageSize}));
        List<dynamic> data = result.data;
        if (findAll) {
          data = await getAllResults(result, 'address/stakes',
              {'address': value, 'page': page, 'page_size': pageSize});
        }
        return PaginatedRequest(
          data: AddressStakes.fromJson(data),
          firstPage: result.firstPage,
          lastPage: result.lastPage,
          page: result.page,
          total: result.total,
          totalPages: result.totalPages,
        );
      case 'unstakes':
        PaginatedRequest<dynamic> result = await client.get(api(
            'address/unstakes',
            {'address': value, 'page': page, 'page_size': pageSize}));
        List<dynamic> data = result.data;
        if (findAll) {
          data = await getAllResults(result, 'address/unstakes',
              {'address': value, 'page': page, 'page_size': pageSize});
        }
        return PaginatedRequest(
          data: AddressUnstakes.fromJson(data),
          firstPage: result.firstPage,
          lastPage: result.lastPage,
          page: result.page,
          total: result.total,
          totalPages: result.totalPages,
        );
    }
  } on ExplorerException catch (e) {
    throw ExplorerException(
        code: e.code, message: '{"address": "${e.message}"}');
  }
}