getCarePlans method Null safety

Future<BuiltList<CarePlan>> getCarePlans(
  1. {int offset = 0,
  2. int limit = 200,
  3. Patient? subject}
)

Retrieves all care plans for a user. Will return an empty list if no care plans exist or if the backend query failed.

Implementation

Future<BuiltList<CarePlan>> getCarePlans({
  final int offset = 0,
  final int limit = 200,
  final Patient? subject,
}) async {
  final gqlQueryString = '''
  query FetchCarePlans {
    carePlans(
      start: $offset,
      limit: $limit,
      where: {
        ${subject != null ? 'subject: ${subject.id}' : ''}
      }
    ) {
      ${CarePlanGqlEntity.gqlQueryFragment}
    }
  }
  ''';

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

    if (queryResult.hasException) {
      logger?.e(queryResult.exception.toString());
      return BuiltList<CarePlan>();
    }

    final data = queryResult.data!['carePlans'] as List<dynamic>;
    final l = data
        .map((dynamic e) =>
            CarePlanGqlEntity.fromJson(e as Map<String, dynamic>))
        .where((element) => element != null)
        .map((element) => element!.toCarePlan())
        .toBuiltList();

    if (!_carePlanStreamController.isClosed) {
      _carePlanStreamController
          .add(l.map((c) => EntityRead<CarePlan>(c)).toBuiltList());
    }

    return l;
  } catch (e, stackTrace) {
    logger?.e('Could not read care plans: ', e.toString(), stackTrace);
    return BuiltList<CarePlan>();
  }
}