This is an App with Auth Functions like Login and Register. All API using reqres.in.
This app also implementing Flutter Clean Architecture with TDD.
light-theme.mp4
dark-theme.mp4
Technology | Recommended Version | Installation Guide |
---|---|---|
Flutter | v3.10.x | Flutter Official Docs |
Dart | v3.0.x | Installed automatically with Flutter |
- Clone this project
- Run
flutter pub get
- Run
flutter gen-l10n
to generate localization files - Run
flutter pub run build_runner build --delete-conflicting-outputs
to generate freezes files - Run
flutter run --flavor stg -t lib/main.dart --dart-define-from-file .env.stg.json
for staging or - Run
flutter run --flavor prd -t lib/main.dart --dart-define-from-file .env.prd.json
for production - Run Test
flutter test -j1
- To generate launcher icon based on Flavor
dart pub run flutter_launcher_icons:main -f flutter_launcher_icons*
- To generate mock class
dart pub run build_runner build
- BLoC State Management
- Clean Architecture with TDD
- Unit Test
- Widget Test
- BLoC test
- Theme Configuration:
System, Light, Dark
- Multi-Language:
English, Bahasa
- Login, Register Example
- Pagination Example
- Autofill Username and Password
- Integration Test
- Implement multi-flavor
- Implement Go Router
Architecture Proposal by Resocoder
lib
βββ config.dart
βββ core
βΒ Β βββ api
βΒ Β βΒ Β βββ api.dart
βΒ Β βΒ Β βββ dio_client.dart
βΒ Β βΒ Β βββ dio_interceptor.dart
βΒ Β βΒ Β βββ isolate_parser.dart
βΒ Β βΒ Β βββ list_api.dart
βΒ Β βββ app_route.dart
βΒ Β βββ core.dart
βΒ Β βββ core_mapper.dart
βΒ Β βββ error
βΒ Β βΒ Β βββ error.dart
βΒ Β βΒ Β βββ exceptions.dart
βΒ Β βΒ Β βββ failure.dart
βΒ Β βββ localization
βΒ Β βΒ Β βββ generated
βΒ Β βΒ Β βΒ Β βββ strings.dart
βΒ Β βΒ Β βΒ Β βββ strings_en.dart
βΒ Β βΒ Β βΒ Β βββ strings_id.dart
βΒ Β βΒ Β βββ intl_en.arb
βΒ Β βΒ Β βββ intl_id.arb
βΒ Β βΒ Β βββ l10n.dart
βΒ Β βΒ Β βββ localization.dart
βΒ Β βββ resources
βΒ Β βΒ Β βββ dimens.dart
βΒ Β βΒ Β βββ images.dart
βΒ Β βΒ Β βββ palette.dart
βΒ Β βΒ Β βββ resources.dart
βΒ Β βΒ Β βββ styles.dart
βΒ Β βββ usecase
βΒ Β βΒ Β βββ usecase.dart
βΒ Β βββ widgets
βΒ Β βββ button.dart
βΒ Β βββ button_notification.dart
βΒ Β βββ button_text.dart
βΒ Β βββ circle_image.dart
βΒ Β βββ color_loaders.dart
βΒ Β βββ drop_down.dart
βΒ Β βββ empty.dart
βΒ Β βββ loading.dart
βΒ Β βββ my_appbar.dart
βΒ Β βββ parent.dart
βΒ Β βββ spacer_h.dart
βΒ Β βββ spacer_v.dart
βΒ Β βββ text_f.dart
βΒ Β βββ toast.dart
βΒ Β βββ widgets.dart
βββ dependencies_injection.dart
βββ features
βΒ Β βββ auth
βΒ Β βΒ Β βββ auth.dart
βΒ Β βΒ Β βββ data
βΒ Β βΒ Β βΒ Β βββ data.dart
βΒ Β βΒ Β βΒ Β βββ datasources
βΒ Β βΒ Β βΒ Β βΒ Β βββ auth_remote_datasources.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ datasources.dart
βΒ Β βΒ Β βΒ Β βββ models
βΒ Β βΒ Β βΒ Β βΒ Β βββ login_response.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ login_response.freezed.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ login_response.g.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ models.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ register_response.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ register_response.freezed.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ register_response.g.dart
βΒ Β βΒ Β βΒ Β βββ repositories
βΒ Β βΒ Β βΒ Β βββ auth_repository_impl.dart
βΒ Β βΒ Β βΒ Β βββ repositories.dart
βΒ Β βΒ Β βββ domain
βΒ Β βΒ Β βΒ Β βββ domain.dart
βΒ Β βΒ Β βΒ Β βββ entities
βΒ Β βΒ Β βΒ Β βΒ Β βββ entities.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ login.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ login.freezed.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ register.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ register.freezed.dart
βΒ Β βΒ Β βΒ Β βββ repositories
βΒ Β βΒ Β βΒ Β βΒ Β βββ auth_repository.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ repositories.dart
βΒ Β βΒ Β βΒ Β βββ usecases
βΒ Β βΒ Β βΒ Β βββ post_login.dart
βΒ Β βΒ Β βΒ Β βββ post_login.freezed.dart
βΒ Β βΒ Β βΒ Β βββ post_login.g.dart
βΒ Β βΒ Β βΒ Β βββ post_register.dart
βΒ Β βΒ Β βΒ Β βββ post_register.freezed.dart
βΒ Β βΒ Β βΒ Β βββ post_register.g.dart
βΒ Β βΒ Β βΒ Β βββ usecases.dart
βΒ Β βΒ Β βββ pages
βΒ Β βΒ Β βββ login
βΒ Β βΒ Β βΒ Β βββ cubit
βΒ Β βΒ Β βΒ Β βΒ Β βββ auth_cubit.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ auth_cubit.freezed.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ auth_state.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ cubit.dart
βΒ Β βΒ Β βΒ Β βββ login.dart
βΒ Β βΒ Β βΒ Β βββ login_page.dart
βΒ Β βΒ Β βββ pages.dart
βΒ Β βΒ Β βββ register
βΒ Β βΒ Β βββ cubit
βΒ Β βΒ Β βΒ Β βββ cubit.dart
βΒ Β βΒ Β βΒ Β βββ register_cubit.dart
βΒ Β βΒ Β βΒ Β βββ register_cubit.freezed.dart
βΒ Β βΒ Β βΒ Β βββ register_state.dart
βΒ Β βΒ Β βββ register.dart
βΒ Β βΒ Β βββ register_page.dart
βΒ Β βββ features.dart
βΒ Β βββ general
βΒ Β βΒ Β βββ general.dart
βΒ Β βΒ Β βββ pages
βΒ Β βΒ Β βββ main
βΒ Β βΒ Β βΒ Β βββ main.dart
βΒ Β βΒ Β βΒ Β βββ main_page.dart
βΒ Β βΒ Β βΒ Β βββ menu_drawer.dart
βΒ Β βΒ Β βββ pages.dart
βΒ Β βΒ Β βββ settings
βΒ Β βΒ Β βΒ Β βββ cubit
βΒ Β βΒ Β βΒ Β βΒ Β βββ cubit.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ settings_cubit.dart
βΒ Β βΒ Β βΒ Β βββ settings.dart
βΒ Β βΒ Β βΒ Β βββ settings_page.dart
βΒ Β βΒ Β βββ splashscreen
βΒ Β βΒ Β βββ splash_screen_page.dart
βΒ Β βΒ Β βββ splashscreen.dart
βΒ Β βββ users
βΒ Β βββ data
βΒ Β βΒ Β βββ data.dart
βΒ Β βΒ Β βββ datasources
βΒ Β βΒ Β βΒ Β βββ datasources.dart
βΒ Β βΒ Β βΒ Β βββ user_remote_datasources.dart
βΒ Β βΒ Β βββ models
βΒ Β βΒ Β βΒ Β βββ models.dart
βΒ Β βΒ Β βΒ Β βββ users_response.dart
βΒ Β βΒ Β βΒ Β βββ users_response.freezed.dart
βΒ Β βΒ Β βΒ Β βββ users_response.g.dart
βΒ Β βΒ Β βββ repositories
βΒ Β βΒ Β βββ repositories.dart
βΒ Β βΒ Β βββ users_repository_impl.dart
βΒ Β βββ domain
βΒ Β βΒ Β βββ domain.dart
βΒ Β βΒ Β βββ entities
βΒ Β βΒ Β βΒ Β βββ entities.dart
βΒ Β βΒ Β βΒ Β βββ users.dart
βΒ Β βΒ Β βΒ Β βββ users.freezed.dart
βΒ Β βΒ Β βββ repositories
βΒ Β βΒ Β βΒ Β βββ repositories.dart
βΒ Β βΒ Β βΒ Β βββ users_repository.dart
βΒ Β βΒ Β βββ usecases
βΒ Β βΒ Β βββ get_users.dart
βΒ Β βΒ Β βββ get_users.freezed.dart
βΒ Β βΒ Β βββ get_users.g.dart
βΒ Β βΒ Β βββ usecases.dart
βΒ Β βββ pages
βΒ Β βΒ Β βββ dashboard
βΒ Β βΒ Β βΒ Β βββ cubit
βΒ Β βΒ Β βΒ Β βΒ Β βββ cubit.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ users_cubit.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ users_cubit.freezed.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ users_state.dart
βΒ Β βΒ Β βΒ Β βββ dashboard.dart
βΒ Β βΒ Β βΒ Β βββ dashboard_page.dart
βΒ Β βΒ Β βββ pages.dart
βΒ Β βββ users.dart
βββ lzyct_app.dart
βββ main_prd.dart
βββ main_stg.dart
βββ utils
βββ ext
βΒ Β βββ context.dart
βΒ Β βββ ext.dart
βΒ Β βββ string.dart
βΒ Β βββ text_theme.dart
βββ helper
βΒ Β βββ common.dart
βΒ Β βββ constant.dart
βΒ Β βββ data_helper.dart
βΒ Β βββ data_helper.freezed.dart
βΒ Β βββ go_router_refresh_stream.dart
βΒ Β βββ helper.dart
βββ services
βΒ Β βββ firebase
βΒ Β βΒ Β βββ firebase.dart
βΒ Β βΒ Β βββ firebase_crashlogger.dart
βΒ Β βΒ Β βββ firebase_services.dart
βΒ Β βββ hive
βΒ Β βΒ Β βββ hive.dart
βΒ Β βΒ Β βββ main_box.dart
βΒ Β βββ services.dart
βββ utils.dart
test
βββ features
βΒ Β βββ auth
βΒ Β βΒ Β βββ data
βΒ Β βΒ Β βΒ Β βββ datasources
βΒ Β βΒ Β βΒ Β βΒ Β βββ models
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ login_response_test.dart
βΒ Β βΒ Β βΒ Β βΒ Β βΒ Β βββ register_response_test.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ repositories
βΒ Β βΒ Β βΒ Β βΒ Β βββ auth_remote_datasources_test.dart
βΒ Β βΒ Β βΒ Β βββ repositories
βΒ Β βΒ Β βΒ Β βββ auth_repository_impl_test.dart
βΒ Β βΒ Β βββ domain
βΒ Β βΒ Β βΒ Β βββ usecases
βΒ Β βΒ Β βΒ Β βββ post_login_test.dart
βΒ Β βΒ Β βΒ Β βββ post_register_test.dart
βΒ Β βΒ Β βββ pages
βΒ Β βΒ Β βββ login
βΒ Β βΒ Β βΒ Β βββ cubit
βΒ Β βΒ Β βΒ Β βΒ Β βββ auth_cubit_test.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ auth_cubit_test.mocks.dart
βΒ Β βΒ Β βΒ Β βΒ Β βββ auth_state_test.dart
βΒ Β βΒ Β βΒ Β βββ login_page_test.dart
βΒ Β βΒ Β βββ register
βΒ Β βΒ Β βββ cubit
βΒ Β βΒ Β βΒ Β βββ register_cubit_test.dart
βΒ Β βΒ Β βΒ Β βββ register_cubit_test.mocks.dart
βΒ Β βΒ Β βΒ Β βββ register_state_test.dart
βΒ Β βΒ Β βββ register_page_test.dart
βΒ Β βββ general
βΒ Β βΒ Β βββ pages
βΒ Β βΒ Β βββ settings
βΒ Β βΒ Β βββ cubit
βΒ Β βΒ Β βΒ Β βββ settings_cubit_test.dart
βΒ Β βΒ Β βββ settings_page_test.dart
βΒ Β βββ users
βΒ Β βββ data
βΒ Β βΒ Β βββ datasources
βΒ Β βΒ Β βΒ Β βββ models
βΒ Β βΒ Β βΒ Β βΒ Β βββ users_response_test.dart
βΒ Β βΒ Β βΒ Β βββ repositories
βΒ Β βΒ Β βΒ Β βββ users_remote_datasources_test.dart
βΒ Β βΒ Β βββ repositories
βΒ Β βΒ Β βββ users_repository_impl_test.dart
βΒ Β βββ domain
βΒ Β βΒ Β βββ usecases
βΒ Β βΒ Β βββ get_users_test.dart
βΒ Β βββ pages
βΒ Β βββ dashboard
βΒ Β βββ cubit
βΒ Β βΒ Β βββ users_cubit_test.dart
βΒ Β βΒ Β βββ users_cubit_test.mocks.dart
βΒ Β βΒ Β βββ users_state_test.dart
βΒ Β βββ dashboard_page_test.dart
βββ helpers
βββ fake_path_provider_platform.dart
βββ json_reader.dart
βββ paths.dart
βββ stubs
βΒ Β βββ list_user_empty_response.json
βΒ Β βββ list_user_response.json
βΒ Β βββ login_success_response.json
βΒ Β βββ login_unsuccessful_response.json
βΒ Β βββ register_success_response.json
βΒ Β βββ register_unsuccessful_response.json
βββ test_mock.dart
βββ test_mock.mocks.dart