This project follows a clean architecture pattern with proper separation of concerns.
lib/
├── app/ # App-level configurations
│ ├── constants/ # App constants, colors, text styles
│ └── routes/ # App routing configuration
│
├── core/ # Core functionality
│ ├── widgets/ # Reusable UI components
│ └── services/ # Core services (API, storage, etc.)
│
├── controllers/ # GetX Controllers (Business Logic)
│ ├── auth/ # Authentication controllers
│ │ └── signup_controller.dart
│ └── onboarding/ # Onboarding controllers
│ └── onboarding_controller.dart
│
├── screens/ # UI Screens
│ ├── signup.dart # Sign up screen
│ └── onboarding.dart # Main onboarding screen (first page)
│
└── assets/ # Images, icons, fonts
├── images/
├── icons/
└── fonts/
Controllers are organized by feature and contain business logic:
lib/controllers/auth/- Authentication-related controllerslib/controllers/onboarding/- Onboarding flow controllers
- Separation of Concerns: UI (screens) is separate from business logic (controllers)
- Reusability: Controllers can be used across multiple screens
- Maintainability: Easy to locate and modify specific functionality
- Scalability: Simple to add new features and controllers
- Testing: Controllers can be easily unit tested
- Create a new directory under
lib/controllers/for your feature - Create your controller file (e.g.,
lib/controllers/feature/feature_controller.dart) - Import and use in your screens
// In your screen file
import 'package:cashease/controllers/auth/signup_controller.dart';
class SignUpScreen extends GetView<SignUpController> {
// Your UI code here
}- Ensure you have Flutter installed
- Run
flutter pub getto install dependencies - Run
flutter runto start the app
- User authentication (signup/login)
- Onboarding flow
- Responsive design
- GetX state management
- Clean architecture