Feature-driven Flutter development workflow with GetX, Clean Architecture, and quality gates
Generates complete Flutter features using Clean Architecture, GetX state management, and comprehensive testing.
/plugin marketplace add Kaakati/rails-enterprise-dev/plugin install reactree-flutter-dev@manifest-marketplaceFeature-driven development workflow for Flutter applications using GetX state management and Clean Architecture patterns.
/flutter-feature [feature description]
/flutter-feature add user profile with avatar upload and bio editing
/flutter-feature implement shopping cart with add/remove items and checkout
/flutter-feature create chat feature with real-time messaging and typing indicators
/flutter-feature add offline-first todo list with sync when online
This command implements complete vertical slices of functionality following Clean Architecture:
flutter analyze (0 errors)Each feature creates a complete vertical slice:
lib/
├── domain/
│ ├── entities/
│ │ └── feature_entity.dart
│ ├── repositories/
│ │ └── feature_repository.dart
│ └── usecases/
│ ├── create_feature.dart
│ ├── get_feature.dart
│ └── update_feature.dart
├── data/
│ ├── models/
│ │ └── feature_model.dart
│ ├── repositories/
│ │ └── feature_repository_impl.dart
│ └── datasources/
│ ├── feature_remote_datasource.dart
│ └── feature_local_datasource.dart
└── presentation/
├── controllers/
│ └── feature_controller.dart
├── bindings/
│ └── feature_binding.dart
└── pages/
└── feature_page.dart
test/
├── domain/
│ └── usecases/
│ └── feature_usecases_test.dart
├── data/
│ ├── models/
│ │ └── feature_model_test.dart
│ └── repositories/
│ └── feature_repository_impl_test.dart
├── presentation/
│ ├── controllers/
│ │ └── feature_controller_test.dart
│ └── widgets/
│ └── feature_widget_test.dart
└── integration/
└── feature_flow_test.dart
// ✅ CORRECT: Use cases depend on repository interfaces
class GetUser {
final UserRepository repository; // Interface from domain
GetUser(this.repository);
Future<Either<Failure, User>> call(String id) {
return repository.getUser(id);
}
}
// ❌ WRONG: Use cases depend on concrete implementations
class GetUser {
final UserRepositoryImpl repository; // Concrete class from data layer
// Violates Clean Architecture dependency rule
}
// ✅ CORRECT: Reactive state with proper initialization
class FeatureController extends GetxController {
final _items = <Item>[].obs;
List<Item> get items => _items.toList();
final _isLoading = false.obs;
bool get isLoading => _isLoading.value;
@override
void onInit() {
super.onInit();
loadItems();
}
@override
void onClose() {
// Clean up resources
super.onClose();
}
}
// ❌ WRONG: Non-reactive state
class FeatureController extends GetxController {
List<Item> items = []; // Not reactive
bool isLoading = false; // Won't trigger UI updates
}
// ✅ CORRECT: Cache-first with network refresh
Future<Either<Failure, List<Item>>> getItems() async {
try {
// Try cache first
final cachedItems = await localDataSource.getItems();
// Return cached data immediately
if (cachedItems.isNotEmpty) {
// Refresh in background
_refreshFromNetwork();
return Right(cachedItems.map((m) => m.toEntity()).toList());
}
// No cache, fetch from network
return await _fetchFromNetwork();
} catch (e) {
return Left(CacheFailure());
}
}
// ✅ CORRECT: Comprehensive error handling
Future<void> loadFeature() async {
_isLoading.value = true;
_error.value = null;
final result = await getFeatureUseCase(id);
result.fold(
(failure) {
_error.value = _mapFailureToMessage(failure);
// Log error for debugging
logger.error('Failed to load feature', failure);
},
(feature) {
_feature.value = feature;
},
);
_isLoading.value = false;
}
String _mapFailureToMessage(Failure failure) {
switch (failure.runtimeType) {
case ServerFailure:
return 'Server error. Please try again.';
case NetworkFailure:
return 'No internet connection.';
case CacheFailure:
return 'Failed to load cached data.';
default:
return 'Unexpected error occurred.';
}
}
When the user invokes /flutter-feature [description]:
/flutter-debug to troubleshoot feature issues/flutter-refactor to improve feature structure/flutter-dev for general development tasks