A Flutter mobile application that performs full CRUD against the restful-api.dev public API, built with Clean Architecture and Cubit state management.
- Flutter SDK
3.44+(Dart3.12+) - Android SDK or Xcode with a device/emulator connected
- Internet connection (fetches from
api.restful-api.dev)
flutter pub get
flutter run| Screen | Description |
|---|---|
| Objects list | Displays all objects (ID + name). Pull-to-refresh, loading/error/empty states. FAB to create a new object. |
| Object details | Shows all fields and data key-value pairs. Edit and Delete actions in the app bar; delete requires confirmation. |
| Object form | Shared create/edit screen with dynamic key-value data fields and inline loading on submit. |
Clean Architecture with BLoC/Cubit inside a single features/objects/ feature.
features/objects/
├── data/ # RemoteDataSource (Dio), LocalDataSource (cache), RepositoryImpl
├── domain/ # ObjectEntity, ObjectsRepository interface, 5 use cases
└── presentation/ # ObjectsCubit + ObjectsState, 3 pages, shared widgets
Page
└→ Cubit
└→ UseCase
└→ Repository
├→ RemoteDataSource (Dio / REST API)
└→ LocalDataSource (SharedPreferences cache)
On network failure the repository automatically falls back to the local cache.
| Concern | Package |
|---|---|
| HTTP client | dio ^5.9.2 |
| State management | flutter_bloc ^9.1.1 |
| Dependency injection | get_it ^9.2.1 |
| Navigation | go_router ^17.3.0 |
| Local cache | shared_preferences ^2.5.5 |
| Value equality | equatable ^2.0.7 |
| Lint rules | very_good_analysis ^9.0.0 |