Version: 1.0.2+1
DocDoc is a Flutter application designed to help users manage and schedule medical appointments easily, providing a new and streamlined experience.
The project follows a feature-first architecture, with a clear separation of concerns between core functionalities and feature-specific modules.
lib/
βββ core/ # Core modules and shared utilities
β βββ di/ # Dependency injection configuration (get_it)
β βββ helpers/ # Common utility classes and functions (constants, extensions, regex, shared_pref_helper, spacing)
β βββ networking/ # HTTP client setup (Dio + Retrofit)
β βββ routing/ # Navigation and route management
β βββ theming/ # App-wide theme and style definitions (colors, font_weight_helper, styles)
β βββ widgets/ # Shared reusable widgets (app_text_button, app_text_form_field)
β
βββ features/ # Feature-specific modules
β βββ feature_name/ # Individual feature module (e.g., login, sign_up, home)
β βββ data/ # Data layer for handling business logic
β β βββ models/ # Data models specific to the feature
β β βββ repo/ # Repositories for data operations
β β
β βββ logic/ # Business logic and state management
β β βββ cubit/ # Cubit for state management
β β βββ states/ # State definitions for the cubit
β β
β βββ ui/ # Presentation layer
β βββ widgets/ # Feature-specific reusable widgets
β βββ screens/ # Screen implementations for the feature
β
βββ main_development.dart # Main entry point for development environment
βββ main_production.dart # Main entry point for production environment
βββ doc_app.dart # Root application widget
- Onboarding: Smooth introduction for new users.
- Authentication: Secure login and sign-up functionalities.
- Home Screen:
- Display doctor specializations.
- List doctors based on selected specialization.
- User-friendly interface to find and book appointments.
- Firebase Integration: Utilizes Firebase for services like App Distribution.
- Flutter SDK: Version 3.24.4 or higher (stable channel)
- Java JDK: Version 17.0.12
- Ruby: Version 3.4.2
- Bundler
-
Clone the repository:
git clone [https://github.com/mu7ammad-3issa/docdoc.git](https://github.com/mu7ammad-3issa/docdoc.git) cd docdoc -
Install Flutter dependencies:
flutter pub get
-
Setup Ruby for Android (Fastlane):
cd android bundle install cd ..
-
Configure Firebase:
- Place your
google-services.jsonfile inandroid/app/. - Configure iOS Firebase setup as per
lib/firebase_options.dart.
- Place your
- Development:
Or use the VSCode launch configuration "DocDoc Development".
flutter run lib/main_development.dart --flavor Development
- Production:
Or use the VSCode launch configuration "DocDoc Production".
flutter run lib/main_production.dart --flavor Production
- Flutter - UI toolkit for building natively compiled applications for mobile, web, and desktop from a single codebase.
- Dart - Programming language used by Flutter.
- Bloc/Cubit - State management solution.
- GetIt - Service locator for dependency injection.
- Dio - HTTP client for Dart.
- Retrofit - Type-safe HTTP client generator for Dio.
- Freezed - Code generator for immutable classes and unions.
- json_serializable - For automatic JSON serialization/deserialization.
- Flutter Secure Storage - For secure data storage.
- Shared Preferences - For simple key-value data storage.
- Flutter ScreenUtil - For adapting screen and font size.
- Cached Network Image - To load and cache network images.
- Shimmer - For loading animations.
- Firebase Core - For Firebase initialization.
- Flutter Native Splash - For customizing the native splash screen.
- Core: Contains shared modules for:
- Dependency Injection (
get_it) - Networking (Dio, Retrofit, API constants, error handling)
- Routing (
AppRouter, named routes) - Helpers (App Regex, Constants, Extensions, Shared Preferences)
- Theming (Colors, Fonts, Styles)
- Shared Widgets
- Dependency Injection (
- Features: Each feature (e.g., Login, SignUp, Home) is modularized with its own data, logic (Cubit), and UI layers.
- Firebase Configuration:
firebase.json: Defines Firebase project IDs and app IDs for different platforms.android/app/google-services.json: Android Firebase configuration.lib/firebase_options.dart: Dart Firebase configuration options for different platforms.
- Splash Screen: Configured via
flutter_native_splash.yaml.
The project uses flutter_lints for static analysis to encourage good coding practices. Custom lint rules can be configured in analysis_options.yaml.
A GitHub Actions workflow is set up to build and distribute the Android app to Firebase App Distribution on pushes to the master branch.
The workflow (.github/workflows/android_fastlane_firebase_app_distribution_workflow.yml) involves:
- Checking out the repository code.
- Setting up JDK 17.
- Installing Flutter (version 3.24.4, stable channel).
- Setting up Ruby (version 3.4.2) and caching gems.
- Building and distributing the app using Fastlane (
firebase_distributionlane).
The Android Fastlane setup includes a firebase_distribution lane for building and distributing the app.
The Fastfile for Android executes the following steps:
flutter cleanflutter build apk --release --flavor production --target lib/main_production.dart --no-tree-shake-iconsfirebase_app_distribution(distributes the built APK)
- Package Name:
com.example.flutter_complete_project - MainActivity:
com.example.flutter_complete_project.MainActivity(Kotlin) - Permissions:
android.permission.INTERNETis used for development (hot reload, etc.) and profile builds. - Launch Background & Styles: Customized launch backgrounds and themes are defined in
res/drawable*andres/values*directories. - Gradle: Uses Gradle version 8.3. JVM arguments for Gradle are configured in
gradle.properties.
- Bundle ID:
com.example.flutterCompleteProject - AppDelegate: Standard Flutter
AppDelegate.swift. - Assets: App icons and launch images are managed in
Assets.xcassets.
Standard Flutter project structure for these platforms is included.
A basic widget test example is provided in test/widget_test.dart.
Contributions are welcome! Please follow the existing code style and structure.




