controllerTemplate function

String controllerTemplate(
  1. String feature,
  2. String pascal,
  3. String camel, {
  4. bool memoryAware = false,
})

Implementation

String controllerTemplate(
  String feature,
  String pascal,
  String camel, {
  bool memoryAware = false,
}) {
  if (memoryAware) {
    return '''
import '../../../core/memory/memory_aware_controller.dart';
import '../../../core/memory/service_priority.dart';
import '../../../core/network/data_strategy.dart';
import '../model/${feature}_model.dart';
import '../repository/${feature}_repository.dart';

class ${pascal}Controller extends MemoryAwareController {
  final ${pascal}Repository _repository;

  ${pascal}Controller({
    required super.memoryManager,
    required ${pascal}Repository repository,
    super.notificationService,
  }) : _repository = repository,
       super(servicePriority: ServicePriority.normal);

  ${pascal}Model? _$camel;
  List<${pascal}Model> _${camel}List = [];

  ${pascal}Model? get $camel => _$camel;
  List<${pascal}Model> get ${camel}List => _${camel}List;

  @override
  String get serviceId => '${feature}_controller';

  @override
  bool get isActive => _${camel}List.isNotEmpty;

  @override
  Future<void> onMemoryWarning() async {
    if (_${camel}List.length > 20) {
      _${camel}List = _${camel}List.sublist(0, 20);
      notifyListeners();
    }
  }

  @override
  Future<void> onKill() async {
    _$camel = null;
    _${camel}List = [];
    notifyListeners();
  }

  @override
  Future<void> onRevive() async => loadAll();

  Future<void> loadById(String id, {DataStrategy strategy = DataStrategy.localFirst}) async {
    markSelfActive();
    await load(
      strategy: strategy,
      cacheAction: () => _repository.getFromCache(id),
      freshAction: () => _repository.getFromRemote(id),
      onSuccess: (data) => _$camel = data,
    );
  }

  Future<void> loadAll() async {
    markSelfActive();
    await executeResult(() => _repository.getAll(), onSuccess: (data) => _${camel}List = data);
  }
}
''';
  }

  return '''
import '../../../core/controller/base_controller.dart';
import '../../../core/network/data_strategy.dart';
import '../model/${feature}_model.dart';
import '../repository/${feature}_repository.dart';

class ${pascal}Controller extends BaseController {
  final ${pascal}Repository _repository;

  ${pascal}Controller({required ${pascal}Repository repository}) : _repository = repository;

  ${pascal}Model? _$camel;
  List<${pascal}Model> _${camel}List = [];

  ${pascal}Model? get $camel => _$camel;
  List<${pascal}Model> get ${camel}List => _${camel}List;

  Future<void> loadById(String id, {DataStrategy strategy = DataStrategy.localFirst}) async {
    await load(
      strategy: strategy,
      cacheAction: () => _repository.getFromCache(id),
      freshAction: () => _repository.getFromRemote(id),
      onSuccess: (data) => _$camel = data,
    );
  }

  Future<void> loadAll() async {
    await executeResult(() => _repository.getAll(), onSuccess: (data) => _${camel}List = data);
  }
}
''';
}