ofClass<T> method

  1. @override
Future<List<T>> ofClass<T>(
  1. Type type, {
  2. int limit = 10,
  3. String? subcollection,
})
override

Lists a limited number of items of a specific type without a query.

Implementation

@override
Future<List<T>> ofClass<T>(Type type, { int limit = 10, String? subcollection }) async {
  if (T.toString() != type.toString()) {
    throw ArgumentError("Type mismatch. Attempting to list items of type '${T.toString()}', but parameter type was ${type.toString()}");
  }

  final deserializer = LS.deserializers[type];
  if (deserializer == null) {
    throw UnsupportedError('No deserializer found for type: $type. Consider re-generating Firestorm data classes.');
  }

  var collectionReference = LS.instance.collection(type.toString());
  if (subcollection != null) {
    collectionReference = collectionReference.doc(subcollection).collection(subcollection);
  }

  Map<String, dynamic>? items = await collectionReference.get();
  if (items == null) {
    return [];
  }

  List<T> objects = [];

  //TODO - Consider the use of Multithreading
  for (var doc in items.entries) {
    if (doc.value != null) {
      objects.add(deserializer(doc.value));
    }
    if (objects.length >= limit) {  //Manually stops the reading.
      break;
    }
  }
  return objects;
}