Mobile client for the moveUP fitness platform.
- π Highlights
- π¦ Tech Stack
- ποΈ Architecture
- π Project Structure
- π οΈ Getting Started
- π§ͺ Testing
- π Documentation
- π Docker Build
- π Changelog
- ποΈ Clean Architecture (Data β Domain β Presentation)
- π Dependency Injection (GetIt + Provider)
β οΈ Error Handling (Result pattern + Failure hierarchy)- π Logging with
AppLoggerabstraction and Mixin for Bloc/Cubit - π§ Navigation with GoRouter
- π Connectivity Tracking with connectivity_plus
- π¦ Modular Structure for scalable feature development
| Category | Technology |
|---|---|
| Framework | Flutter 3.41.0+ |
| State Management | flutter_bloc |
| Dependency Injection | get_it, provider |
| Navigation | go_router |
| Connectivity Tracking | connectivity_plus |
| HTTP Client | dio + retrofit |
| Code Generation | freezed, json_serializable, build_runner |
| Logging | logger |
| Testing | mockito, bloc_test, flutter_test |
| UI Components | flutter_svg, cached_network_image |
This app follows Clean Architecture principles:
βββββββββββββββββββββββββββββββββββββββββββ
β Presentation Layer β
β (Pages, Widgets, BLoC/Cubit) β
βββββββββββββββββββββ¬ββββββββββββββββββββββ
β
β uses
βββββββββββββββββββββΌββββββββββββββββββββββ
β Domain Layer β
β (Entities, UseCases, Repositories*) β * interfaces only
βββββββββββββββββββββ²ββββββββββββββββββββββ
β
β implements
βββββββββββββββββββββ΄ββββββββββββββββββββββ
β Data Layer β
β (DTOs, DataSources, Repositories Impl) β
βββββββββββββββββββββββββββββββββββββββββββ
lib/
βββ core/ # Shared infrastructure
β βββ di/ # Dependency injection
β βββ failures/ # Error handling (Failure)
β βββ result/ # Result-pattern
β βββ router/ # Navigation (GoRouter)
β βββ services/ # Services (Network, etc.)
β βββ utils/ # Utilities (Logger, Analytics)
βββ features/ # Feature modules (Clean Architecture)
β βββ [feature_name]/
β βββ data/ # DTOs, DataSources, Repository Impl
β βββ domain/ # Entities, UseCases, Repository Interfaces
β βββ presentation/ # Pages, Widgets, BLoC/Cubit
βββ uikit/ # Shared UI components
βββ main.dart # App entry point
- Flutter SDK:
>=3.41.0 - Dart SDK:
>=3.11.0
-
Install dependencies:
flutter pub get
-
Run code generation:
flutter pub run build_runner build --delete-conflicting-outputs
-
Run the app:
flutter run
Run tests:
# Unit tests
flutter test
# Widget tests
flutter test test/features/*/presentation/
# Coverage (requires lcov)
flutter test --coverage
genhtml coverage/lcov.info -o coverage/htmlGenerate API docs from Dart doc-comments:
dart doc --output doc/apiServe docs locally:
dart pub global activate dhttpd
dart pub global run dhttpd --path doc/apiThen open:
http://localhost:8080
Build Android APK using Docker:
docker build \
--build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \
--build-arg VCS_REF=$(git rev-parse --short HEAD) \
--progress=plain \
--no-cache \
-t moveUP-app-android:latest .Extract APK files:
docker create --name temp-flutter moveUP-app-android:latest
docker cp temp-flutter:/artifacts/. ./apk-output/
docker rm temp-flutterAll notable changes to this project are documented in CHANGELOG.md.