generateController function

void generateController(
  1. String path,
  2. String pascal,
  3. String lower
)

Implementation

void generateController(String path, String pascal, String lower) {
  final file = File('$path/${lower}_controller.dart');

  file.writeAsStringSync('''
import '${lower}_provider.dart';
import '${lower}_repository.dart';

class ${pascal}Controller {
  late ${pascal}Provider _provider;
  late ${pascal}Repository _repository;

  ${pascal}Controller({
    ${pascal}Provider? provider,
    ${pascal}Repository? repository,
  }) {
    _provider = provider ?? ${pascal}Provider();
    _repository = repository ?? ${pascal}Repository(apiController: ApiController());
  }

  ${pascal}Provider get provider => _provider;
  ${pascal}Repository get repository => _repository;

  Future<void> getAll() async {
    if (_provider.isLoading.get()) return;

    try {
      _provider.isLoading.set(value: true, isNotify: true);

      final result = await _repository.getAll();

      _provider.items.setList(list: result ?? [], isNotify: true);
    } finally {
      _provider.isLoading.set(value: false, isNotify: true);
    }
  }

  Future<void> getById(String id) async {
    if (_provider.isLoading.get()) return;

    try {
      _provider.isLoading.set(value: true, isNotify: true);

      final result = await _repository.getById(id);

      _provider.selectedItem.set(value: result, isNotify: true);
    } finally {
      _provider.isLoading.set(value: false, isNotify: true);
    }
  }

  Future<void> create(Create${pascal}RequestDto request) async {
    if (_provider.isOperating.get()) return;

    try {
      _provider.isOperating.set(value: true, isNotify: true);

      await _repository.create(request);
    } finally {
      _provider.isOperating.set(value: false, isNotify: true);
    }
  }

  Future<void> update(String id, Update${pascal}RequestDto request) async {
    if (_provider.isOperating.get()) return;

    try {
      _provider.isOperating.set(value: true, isNotify: true);

      await _repository.update(id, request);
    } finally {
      _provider.isOperating.set(value: false, isNotify: true);
    }
  }

  Future<void> delete(String id) async {
    if (_provider.isOperating.get()) return;

    try {
      _provider.isOperating.set(value: true, isNotify: true);

      await _repository.delete(id);
    } finally {
      _provider.isOperating.set(value: false, isNotify: true);
    }
  }
}
''');
}