
Google 개발 Crossplatform,
Dart언어 사용
Hot Reload지원,
Widget기반
ios, android, web, windows등이 있고, 코드 작성은 lib폴더 내에서 작성.
lib폴더 내 작성한 코드를 빌드하게되면, 각 플랫폼 이름의 폴더 내에 소스코드가 생성된다.(빌드에 시간이 오래걸림)
앱 실행시에는 AOS/IOS Simulator가 필요.
├── README.md
├── analysis_options.yaml (Linting에 필요한 규칙 정의)
├── android
├── build
├── ios
├── web
├── windows
├── lib
│ ├── main.dart
│ ├── model (MVVM 패턴 중 Model)
│ │ ├── git_user.dart
│ │ ├── git_user_api.dart
│ │ ├── git_user_api_repository.dart
│ │ └── git_user_db_repository.dart
│ ├── view (MVVM 패턴 중 View, ViewModel)
│ │ ├── base_screen.dart
│ │ ├── search
│ │ │ ├── search_screen.dart
│ │ │ ├── search_view_models.dart
│ │ │ └── widgets
│ │ │ ├── search_input.dart
│ │ │ └── search_list.dart
│ │ ├── storage
│ │ │ ├── storage_screen.dart
│ │ │ ├── storage_view_model.dart
│ │ │ └── widgets
│ │ └── temp
│ │ ├── temp_screen.dart
│ │ ├── temp_view_model.dart
│ │ └── widgets
│ └── widgets
├── pubspec.lock
├── pubspec.yaml (종속성 관리)
├── search_git_users.iml
└── test (테스트 관리)

vs

=> 차이는
MVVM : ViewModel의 메서드 노출하여 View에서 이를 사용할 수 있도록
Bloc : 별도의 메서드 노출하지 않고, Sink만 노출하여 이를 통해서만 이벤트 수락 / 데이터 제공
아래와 같이 Widget에 ViewModel을 Provide해준다.

아래와 같이 Widget 내에서는 ViewModel을 연결하고, 해당 변수를 사용한다.

TCP=> 3way handshake
vs
UDP=> 비연결형 데이터그램..
과 비슷한 개념으로 볼 수 있다.
stateful =>
State클래스와 같이 사용되며, State클래스에서 initState(), SetState()와 같이 State를 변경시키는 동작을 수행할 때 마다 UI를 다시 build한다.
위젯이 동작하는 동안 Data 변경이 필요한 경우
화면을 다시 그려서 변경된 부분을 위젯에 반영하는 동적인 위젯으로
이벤트 또는 사용자 상호 작용에 의해 동작한다.
ex) 버튼을 누를 때 UI가 변경되는 로직
stateless =>
화면이 로드될 때 한 번만 그려지는 State가 없는 위젯으로
변경이 필요한 Data가 없는 것을 의미하며
이벤트 또는 사용자 상호 작용에 의해 동작하지 않는다.
ex) 안내 페이지, 메뉴판 페이지
