Flutter Today I Learned - 2019-04-22
배울 문서 : https://drive.google.com/file/d/1d19SQry7jXwGd-wy3MeXJ35uCoy4veib/view 예제 소스코드 : https://github.com/markclow/flutter_book_examples
Flutter 빅픽쳐
- 구글과 애플이 제공한 United API는 서로를 100% 커버하지 못함. Xamarin, Appcelerator, Nativescript
- WebView를 사용한 방법은 앱 속도가 느림. Cordova, PhoneGap
- ReactNative는 bridge를 사용해 WebView보다 빠르지만 여전히 네이티브 코드보다 느림.
- Flutter는 자체 렌더링 엔진을 사용하기 때문에 네이티브 만큼 빠르고 플랫폼에 독립적. 여기에 더해서 핫리로딩 & 가상돔을 제공.
Dart 소개
- Java, C# like 언어
- SDK
- dart - 코어 라이브러리
- dart2js - 소스코드 dart to js
- dartdevc - dart to js. 개발용으로 변환해주기 때문에 dart2js의 기능에서 최적화만 빠짐.
- dartanalyzer - 소스코드의 error와 warning을 잡아줌.
- dartdoc - 소스코드 문서화 도구
- dartfmt - 소스코드에 표준 포매팅을 적용해주는 도구
- pub: 패키지 매니저
- 라이브러리
- dart:core - built-in type, collection 등
- dart:async - 비동기 지원. Future와 Stream 클래스를 제공
- dart:math - 수학 관련 라이브러리
- dart:convert - JSON, UTF-8 인코더, 디코더
Dart Typing
- 정적 언어 - AOT 컴파일러를 사용해 컴파일. 정적 분석을 통해 에러를 잡아내기 쉬워서 복잡한 시나리오에 유리
- 동적 언어 - 타입을 기술하지 않아도 돼서 개발속도는 빠르지만 에러를 잡아내기 어려워서 단순한 시나리오에 유리
- Dart Typing - AOT에 타입 체킹, runtime에도 타입 체킹 둘 다 가능
- 정적 타입
- int
- double
- bool
- String - immutable string
- StringBuffer - mutable string
- RegExp
- List, Map, Set
- DateTime
- Duration
- Uri
- Error
- 동적 타입
- var - 변수의 자료형이 동적으로 선택되게 함. (= 컴파일 타임에 타입추론)
- dynamic - 어떤 자료형도 담을 수 있음. (= Object타입)
- is 키워드
- runtimeType 속성
Dart String
- interpolation -
'name is ${p.firstName}'
- raw string -
r'this\nstring'
- runes -
var clapping = '\u{1f44f}';
Dart 클래스
- 싱글 파일에 멀티 클래스 가능
- 생성자 syntactic sugar -
Name(this.firstName, this.lastName);
- new 키워드 필요 없음.
- named 생성자
- optional 생성자 파라메터 -
Person({this.name, this.age});
- required 생성자 파라메터 -
Person({@required this.name, this.age});
- positional optional -
Car(this.make, [this.model])
- factory 생성자 -
factory Printer(){ ... }
- private 변수 -
_name;
- default value -
null
- method cascade
Logger() ..log('program started') ..log('going something') ..log('program finished'); }