HasithaAthukorala/flutter-clean-architecture-sample
Flutter 클린 아키텍처와 BLoC 및 테스트 주도 개발의 예제
- Stars
- 244
- Forks
- 61
- 최근 푸시(UTC)
- 2021. 4. 20.
- 프로젝트 상태
- 활성
언어DartShellJavaSwiftObjective-C
사용 중인 의존성
의존성 목록 20 개
- flutter
{"sdk":"flutter"} - cupertino_icons
^0.1.2 - get_it
^2.0.1 - flutter_bloc
^3.2.0 - equatable
^0.4.0 - dartz
^0.8.6 - data_connection_checker
^0.3.4 - http
^0.12.0+2 - shared_preferences
^0.5.3+4 - json_annotation
^3.0.1 - chopper
^3.0.1+1 - splashscreen
1.2.0 - flutter_test개발 의존성
{"sdk":"flutter"} - mockito개발 의존성
^4.1.0 - build_runner개발 의존성
^1.7.3 - json_serializable개발 의존성
^3.2.5 - chopper_generator개발 의존성
^3.0.0 - flutter_driver개발 의존성
{"sdk":"flutter"} - test개발 의존성
any - bloc_test개발 의존성
^4.0.0
순위
원본 README
아래는 영문 원문 스냅샷입니다. 최신 내용은 GitHub에서 확인하세요.
README 펼치기 / 접기
Flutter clean architecture sample
- Clean architecture with SOLID principals
- Developed under test driven development
- Blocs has been used for state management
- Includes unit tests, widget tests, integration tests and CI/CD
File Structure
lib
├── core
│ ├── error
│ │ ├── exceptions.dart
│ │ └── failures.dart
│ ├── network
│ │ ├── network_info.dart
│ │ ├── rest_client_service.chopper.dart
│ │ └── rest_client_service.dart
│ ├── usecases
│ │ ├── fetch_token.dart
│ │ └── usecase.dart
│ ├── utils
│ │ ├── constants.dart
│ │ ├── router.dart
│ │ └── theme.dart
│ └── widgets
│ └── custom_snak_bar.dart
├── injection_container.dart
├── main.dart
└── screens
├── change_password
│ ├── data
│ │ ├── datasources
│ │ │ ├── change_password_local_datasource.dart
│ │ │ └── change_password_remote_datasource.dart
│ │ └── repositories
│ │ └── change_password_repository_impl.dart
│ ├── domain
│ │ ├── repositories
│ │ │ └── change_password_repository.dart
│ │ └── usecases
│ │ └── change_password.dart
│ └── presentation
│ ├── blocs
│ │ └── change_password
│ │ ├── bloc.dart
│ │ ├── change_password_bloc.dart
│ │ ├── change_password_event.dart
│ │ └── change_password_state.dart
│ └── page
│ └── change_password.dart
├── home
│ ├── data
│ │ ├── datasources
│ │ │ ├── home_local_datasource.dart
│ │ │ └── home_remote_datasource.dart
│ │ └── repositories
│ │ └── home_repository_impl.dart
│ ├── domain
│ │ ├── repositories
│ │ │ └── home_repository.dart
│ │ └── usecases
│ │ └── logout_user.dart
│ └── presentation
│ ├── blocs
│ │ └── log_out
│ │ ├── bloc.dart
│ │ ├── log_out_bloc.dart
│ │ ├── log_out_event.dart
│ │ └── log_out_state.dart
│ └── page
│ └── home.dart
└── login
├── data
│ ├── datasources
│ │ ├── login_local_datasource.dart
│ │ └── login_remote_datasource.dart
│ ├── models
│ │ ├── login_model.dart
│ │ └── login_model.g.dart
│ └── repositories
│ └── login_repository_impl.dart
├── domain
│ ├── entities
│ │ └── login.dart
│ ├── repositories
│ │ └── login_repository.dart
│ └── usecases
│ └── login_user.dart
└── presentation
├── blocs
│ └── user_login
│ ├── bloc.dart
│ ├── user_login_bloc.dart
│ ├── user_login_event.dart
│ └── user_login_state.dart
└── page
└── login.dart
File structure for tests
test
├── core
│ ├── network
│ │ └── network_info_test.dart
│ └── usecases
│ └── fetch_token_test.dart
├── fixtures
│ ├── fixture_reader.dart
│ ├── user_login.json
│ └── user_login_null_token.json
└── screens
├── change_password
│ ├── data
│ │ ├── datasources
│ │ │ └── change_password_remote_datasource_test.dart
│ │ └── repositories
│ │ └── change_password_repository_impl_test.dart
│ ├── domain
│ │ └── usecases
│ │ └── change_password_test.dart
│ └── presentation
│ └── blocs
│ └── change_password
│ └── change_password_bloc_test.dart
├── home
│ ├── data
│ │ ├── datasources
│ │ │ ├── home_local_datasource_test.dart
│ │ │ └── home_remote_datasource_test.dart
│ │ └── repositories
│ │ └── home_repository_impl_test.dart
│ ├── domain
│ │ └── usecases
│ │ └── logout_user_test.dart
│ └── presentation
│ └── blocs
│ └── log_out
│ └── log_out_bloc_test.dart
└── login
├── data
│ ├── datasources
│ │ ├── login_local_datasource_test.dart
│ │ └── login_remote_datasource_test.dart
│ ├── models
│ │ └── login_model_test.dart
│ └── repositories
│ └── login_repository_impl_test.dart
├── domain
│ └── usecases
│ └── login_user_test.dart
└── presentation
└── blocs
└── user_login
└── user_login_bloc_test.dart