getById method Null safety

Future<PlanDefinition?> getById(
  1. String planDefinitionId
)

Implementation

Future<PlanDefinition?> getById(final String planDefinitionId) async {
  final gqlQueryString = '''
    query FindOne {
      planDefinitions(
        where: {
          id: $planDefinitionId
        }
      ) {
        ${PlanDefinitionGqlEntity.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!['planDefinitions'] as List<dynamic>;
    final q = data
        .map((dynamic e) =>
            PlanDefinitionGqlEntity.fromJson(e as Map<String, dynamic>))
        .where((element) => element != null)
        .map((e) => e!.toPlanDefinition())
        .first;

    return q;
  } catch (e, stackTrace) {
    logger?.e('Could not fetch questionnaires: ', e.toString(), stackTrace);
    return null;
  }
}