controllerTemplate function
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);
}
}
''';
}