execute method
execute command
Implementation
@override
Future<void> execute() async {
var usecaseName = name.trim();
if (usecaseName.isEmpty) {
throw Exception('Usecase name is required. Example: $codeSample');
}
final snake = usecaseName.snakeCase;
final pascal = usecaseName.pascalCase;
final baseDir = 'lib/domain/use_case/$snake';
Directory(baseDir).createSync(recursive: true);
final interfacePath = '$baseDir/${snake}_interface.dart';
final usecasePath = '$baseDir/${snake}_use_case.dart';
// Interface content
final interfaceContent = '''import 'package:dartz/dartz.dart';
import 'package:dio/dio.dart';
abstract class ${pascal}Interface {
// TODO: implement interface for $pascal
// Future<Either<DioException, dynamic>> fetch${pascal}s({
// required CancelToken cancelToken,
// required int page,
// required int size,
// });
}
''';
// Usecase content
final usecaseContent = '''import 'package:dartz/dartz.dart';
import 'package:dio/dio.dart';
import '${snake}_interface.dart';
class ${pascal}UseCase implements ${pascal}Interface {
// TODO: import services for $pascal
// TODO: implement business logic for ${pascal}UseCase
}
''';
writeFile(interfacePath, interfaceContent, overwrite: true);
writeFile(usecasePath, usecaseContent, overwrite: true);
// Create export file inside usecase folder
final exportPath = '$baseDir/$snake.dart';
final exportContent = '''export '${snake}_interface.dart';
export '${snake}_use_case.dart';
''';
writeFile(exportPath, exportContent, overwrite: true);
// Update lib/domain/domain.dart
_updateDomainFile(baseDir, snake);
}