createFeatureFiles function
void
createFeatureFiles({})
Implementation
void createFeatureFiles({
required String projectName,
required String featureName,
required String stateManagement,
}) {
// Screen — sabke liye common
File(
'$projectName/lib/features/$featureName/presentation/screens/${featureName}_screen.dart',
).writeAsStringSync('''
import 'package:flutter/material.dart';
class ${capitalize(featureName)}Screen extends StatelessWidget {
const ${capitalize(featureName)}Screen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('${capitalize(featureName)}'),
),
body: const Center(
child: Text('${capitalize(featureName)} Screen'),
),
);
}
}
''');
// State management ke hisaab se files
if (stateManagement == 'Bloc') {
_createBlocFiles(projectName, featureName);
} else if (stateManagement == 'GetX') {
_createGetXFiles(projectName, featureName);
} else if (stateManagement == 'Provider') {
_createProviderFiles(projectName, featureName);
} else {
_createRiverpodFiles(projectName, featureName);
}
// Domain + Data — sabke liye common
File('$projectName/lib/features/$featureName/domain/entities/${featureName}_entity.dart')
.writeAsStringSync('class ${capitalize(featureName)}Entity {}\n');
File('$projectName/lib/features/$featureName/domain/repository/${featureName}_repository.dart')
.writeAsStringSync('abstract class ${capitalize(featureName)}Repository {}\n');
File('$projectName/lib/features/$featureName/domain/usecases/${featureName}_usecase.dart')
.writeAsStringSync('''
class ${capitalize(featureName)}UseCase {
// final ${capitalize(featureName)}Repository repository;
// ${capitalize(featureName)}UseCase(this.repository);
Future<void> call() async {
// TODO: implement use case
}
}
''');
File('$projectName/lib/features/$featureName/data/models/${featureName}_model.dart')
.writeAsStringSync('''
class ${capitalize(featureName)}Model {
final int id;
final String name;
const ${capitalize(featureName)}Model({
required this.id,
required this.name,
});
factory ${capitalize(featureName)}Model.fromJson(Map<String, dynamic> json) {
return ${capitalize(featureName)}Model(
id: json['id'] as int,
name: json['name'] as String,
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
};
}
@override
String toString() => '${capitalize(featureName)}Model(id: \$id, name: \$name)';
}
''');
File('$projectName/lib/features/$featureName/data/datasource/${featureName}_remote_datasource.dart')
.writeAsStringSync('''
import 'package:dio/dio.dart';
class ${capitalize(featureName)}RemoteDataSource {
final Dio dio;
${capitalize(featureName)}RemoteDataSource(this.dio);
Future<void> fetch${capitalize(featureName)}() async {
// TODO: implement API call
// final response = await dio.get('/endpoint');
}
}
''');
File('$projectName/lib/features/$featureName/data/repository/${featureName}_repository_impl.dart')
.writeAsStringSync('''
import '../../domain/repository/${featureName}_repository.dart';
class ${capitalize(featureName)}RepositoryImpl implements ${capitalize(featureName)}Repository {
// final ${capitalize(featureName)}RemoteDataSource remoteDataSource;
// ${capitalize(featureName)}RepositoryImpl(this.remoteDataSource);
}
''');
print('📝 Feature files generated');
}