requestRecords function
Implementation
requestRecords(String domain, StateApi state, EntityDetails entities) async {
try {
final domainId = await domainToNonFungId(domain);
final recordsVaultIdResponse = await state.keyValueStoreData(
stateKeyValueStoreDataRequest: StateKeyValueStoreDataRequest((builder) {
builder.keyValueStoreAddress = entities.recordServiceVaultId;
builder.keys.add(StateKeyValueStoreDataRequestKeyItem((builder) {
final key = ProgrammaticScryptoSborValueNonFungibleLocalId(
(builder) => builder.value = domainId);
builder.keyJson = key;
}));
})).then((s) => s.data);
final recordsVaultId = (recordsVaultIdResponse?.entries[0].value
.programmaticJson as ProgrammaticScryptoSborValueOwn?)
?.value;
if (recordsVaultId == null) {
return [];
}
final recordIdsResponse = await state.entityNonFungibleIdsPage(
stateEntityNonFungibleIdsPageRequest:
StateEntityNonFungibleIdsPageRequest((builder) {
builder.address = entities.rnsStorage;
builder.resourceAddress = entities.resolverRecordResource;
builder.vaultAddress = recordsVaultId;
})).then((s) => s.data);
final recordIds = recordIdsResponse?.items;
final nftDataList = await state.nonFungibleData(
stateNonFungibleDataRequest: StateNonFungibleDataRequest((builder) {
builder.resourceAddress = entities.resolverRecordResource;
builder.nonFungibleIds.addAll(recordIds ?? []);
})).then((s) => s.data?.nonFungibleIds);
return nftDataList?.map((nft) {
if (nft.data?.programmaticJson.kind ==
ProgrammaticScryptoSborValueKind.tuple) {
return (nft.data?.programmaticJson as ProgrammaticScryptoSborValueTuple)
.fields
.fold<RecordItem>(
RecordItem(
recordId: nft.nonFungibleId,
keyImageUrl: '',
platformIdentifier: '',
domainId: '',
context: '',
idAdditions: [],
),
(acc, field) {
return parseRecordData(field, acc);
},
);
}
return RecordItem(
recordId: nft.nonFungibleId,
keyImageUrl: '',
platformIdentifier: '',
domainId: '',
context: '',
idAdditions: [],
);
}).toList();
} catch (e) {
print(e);
return null;
}
}