Threading & asynchronicity
https://flutter.dev/docs/get-started/flutter-for/ios-devs#threading--asynchronicity
How do I write asynchronous code?
Dart 는 Isolates, an event loop, 비동기 프로그램을 지원하는 싱글 스레드 모델이 있다.
Isloate 를 생성하지 않는 한 dart code 는 메인 스레드에서 실행되고 event loop 에 의해 구동된다.
Flutter 의 event loop 은 iOS main loop 와 동일하다.
Dart 의 싱글 스레드 모델은 모든 것을 UI 멈춤을 초래하는 블러킹 연산으로 실행하는 것이 아니다.
그 대신 비동기 작업을 실행하는 async/await 와 같은 Dart 가 제공하는 비동기 기능을 사용한다.
How do you move work to a background thread?
Flutter 는 다일 스레드이고 event loop 를 실행하기 때문에 스레드 관리나 spawning background thread 를 걱정할 필요 없다.
디스크 접근, 네트워크 작업 등의 I/O 작업을 하고 있다면 안전하게 async/await 를 사용하고 끝낼 수 있다.
CPU 를 많이 점유하는 계산이 많은 작업이 필요할 때 event loop blocking 을 피하기 위해서 Isolate 로 옮길 수 있다.
I/O 작업을 위해서는 함수에 async 함수라고 정의해라 그리고 함수 안에 오래 걸리는 작업에 await 해라
많은 데이터를 처리하는 경우 async, await 를 써도 UI 를 멈추는 경우들이 있다.
Flutter 에서는 오랜 시간 작업이나 많은 처리량을 Isolate 를 사용하여 위해 멀티 코어 장점을 취할 수 있다.
Isolate 들은 실행 스레드가 분리되어 있다. main 실행과 heap 메모리를 포함한 어떤 메모리도 공유하지 않는다.
메인 스레드의 변수들에 접근할 수 없고 setState() 를 호출하여 UI 를 업데이트할 수 없다.
Isolate 는 이름처럼 메모리를 공유하지 않는다.
How do I make network requests?
https://flutter.dev/docs/get-started/flutter-for/ios-devs#how-do-i-make-network-requests
인기 많은 http package 를 사용한다면 Flutter 에서 네트워크 콜을 만드는 것은 쉽다.
일반적으로 개발하는 네트워킹의 많은 부분을 네트워크 콜을 쉽게 만들 수 있도록 추상화한 것이다.
How do I show the progress of a long-running task?
일반적으로 iOS 에서는 오래 걸리는 백그라운드 작업을 실행할 때 UIProgressView 를 사용한다.
플루터에서는 ProgressIndicator 위젯을 사용한다.
boolean 값으로 렌더링 되는 시점을 제어하는 방식으로 progress 를 보여줄 수 있다.
큰 작업이 시작하기 전에 상태를 업데이트하도록 지시하고 끝난 후에는 숨기도록 지시하라.
리스트를 만드는 추천, 효과, 효율적인 방법은 ListView.Builder 를 사용하는 것이다.
이것은 많은 양의 리스트, 동적 리스트를 만들때 좋다.
ListView 를 만드는 대신에 목록 초기 길이, ItemBuilder 함수로 ListView.builder 를 만들어라.
ItemBuilder 함수는 위치를 받고 위치에 맞는 cell 을 리턴하는 iOS table/collection view 의 cellForItemAt delegate 메서드와 유사하다.
What is the equivalent of a ScrollView in Flutter?
iOS 에서는 ScrollView 안에 view 들을 넣음으로써 스크롤 가능하게 한다.
Flutter 에서는 ListView 위젯을 사용하는 것이 가장 쉬운 방법이다.
수직으로 위젯을 배치할 수 있어서 iOS TableView, ScrollView 둘의 역할을 한다.
'Programming > Dart & Flutter' 카테고리의 다른 글
Flutter 6일 차 - Flutter for iOS devs (6/8), Form input (0) | 2020.07.31 |
---|---|
Flutter 5일 차 - Flutter for iOS devs (5/8), Gesture detection and touch event handling, Theming and text (0) | 2020.07.30 |
Flutter 3일 차 - Flutter for iOS devs (3/8), Navigation (0) | 2020.07.28 |
Flutter 2일 차 - Flutter for iOS devs (2/8), Views (0) | 2020.07.27 |
Flutter 1일 차 - Flutter for iOS devs (1/8), Views (0) | 2020.07.26 |