getAssetById method Null safety

Future<MediaAsset?> getAssetById(
  1. String id
)

Returns a MediaAsset instance for a CMS asset that is referenced by ID. Returns null if the asset could not be retrieved from the CMS. Do not call for assets that are stored locally as it will always return null.

Implementation

Future<MediaAsset?> getAssetById(String id) async {
  final gqlQueryString = '''
    query GetAssetById {
      upload(
        id: "$id"
      ) {
        ${MediaGqlEntity.gqlQueryFragment}
      }
    }
  ''';

  try {
    final queryResult = await graphQLClient
        .query<void>(QueryOptions(document: gql(gqlQueryString)));

    if (queryResult.hasException) {
      logger?.e(queryResult.exception.toString());
      return null;
    }

    final data = queryResult.data!['users'] as List<dynamic>;

    if (data.isNotEmpty) {
      final assetData = data.first as Map<String, dynamic>;
      final gqlAsset = MediaGqlEntity.fromJson(assetData);

      if (gqlAsset == null) {
        logger?.e('Unable to deserialize media asset with id $id');
        return null;
      }

      return gqlAsset.toMediaAsset();
    }

    return null;
  } catch (e, stackTrace) {
    logger?.e(
        'Could not retrieve media asset from repository', e, stackTrace);
    return null;
  }
}