fetchObjectWithID<T extends ManagedObject> method Null safety

Future<T?> fetchObjectWithID<T extends ManagedObject>(
  1. dynamic identifier
)

Returns an object of type T from this context if it exists, otherwise returns null.

If T cannot be inferred, an error is thrown. If identifier is not the same type as T's primary key, null is returned.

Implementation

Future<T?> fetchObjectWithID<T extends ManagedObject>(
    dynamic identifier) async {
  final entity = dataModel!.tryEntityForType(T);
  if (entity == null) {
    throw ArgumentError("Unknown entity '$T' in fetchObjectWithID. "
        "Provide a type to this method and ensure it is in this context's data model.");
  }

  final primaryKey = entity.primaryKeyAttribute!;
  if (!primaryKey.type!.isAssignableWith(identifier)) {
    return null;
  }

  final query = Query<T>(this)
    ..where((o) => o[primaryKey.name]).equalTo(identifier);
  return query.fetchOne();
}