clean_feature_gen 1.0.2
clean_feature_gen: ^1.0.2 copied to clipboard
Generate complete Clean Architecture features for Flutter — entities, models, BLoC/Cubit, repositories, DI, routes, and tests from YAML config.
/// Example demonstrating how to use clean_feature_gen programmatically.
///
/// ## CLI Usage (most common)
///
/// ```bash
/// # Install globally
/// dart pub global activate clean_feature_gen
///
/// # Create a sample config file
/// clean_feature_gen init
///
/// # Generate from YAML config
/// clean_feature_gen generate --config feature_config.yaml
///
/// # Generate with inline flags
/// clean_feature_gen generate --name login --state-management bloc --has-api
/// ```
///
/// ## Programmatic Usage
///
/// You can also use the library directly in your Dart scripts:
library;
import 'package:clean_feature_gen/clean_feature_gen.dart';
Future<void> main() async {
// 1. Define models with fields
const userModel = ModelDefinition(
name: 'User',
fields: [
FieldDefinition(name: 'id', type: 'int'),
FieldDefinition(name: 'email', type: 'String'),
FieldDefinition(name: 'fullName', type: 'String', jsonKey: 'full_name'),
FieldDefinition(name: 'avatarUrl', type: 'String?', jsonKey: 'avatar_url'),
FieldDefinition(name: 'isActive', type: 'bool', defaultValue: 'true'),
],
);
// 2. Define use cases
const getUserProfile = UsecaseDefinition(
name: 'GetUserProfile',
returnType: 'User',
params: [
ParamDefinition(name: 'userId', type: 'int'),
],
);
const updateProfile = UsecaseDefinition(
name: 'UpdateUserProfile',
returnType: 'User',
params: [
ParamDefinition(name: 'user', type: 'User'),
],
);
const deleteProfile = UsecaseDefinition(
name: 'DeleteUserProfile',
returnType: 'void',
params: [
ParamDefinition(name: 'userId', type: 'int'),
],
);
// 3. Define screens
const profileScreen = ScreenDefinition(
name: 'UserProfileScreen',
type: ScreenType.stateless,
hasAppBar: true,
hasLoadingState: true,
hasErrorState: true,
);
const editScreen = ScreenDefinition(
name: 'EditProfileScreen',
type: ScreenType.stateful,
hasPullToRefresh: false,
);
// 4. Create the feature config
const config = FeatureConfig(
name: 'user_profile',
stateManagement: StateManagement.bloc,
hasApi: true,
apiBase: '/api/v1/users',
generateTests: true,
generateDi: true,
generateRoutes: true,
useJsonSerializable: true,
hasLocalDataSource: false,
models: [userModel],
usecases: [getUserProfile, updateProfile, deleteProfile],
screens: [profileScreen, editScreen],
);
// 5. Validate before generating
final errors = config.validate();
if (errors.isNotEmpty) {
for (final error in errors) {
print('Validation error: $error');
}
return;
}
// 6. Generate the feature
final generator = FeatureGenerator(
config: config,
projectRoot: '.', // Current directory (must be a Flutter project root)
overwrite: false,
logger: const Logger(verbose: true),
);
await generator.generate();
}