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.22.x | Flutter Official Docs |
Dart | v3.4.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
- To generate launcher icon based on Flavor
dart run 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
574ae4cc-e3a9-4755-8494-81bfe8763e00.mp4
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