SlideShare une entreprise Scribd logo
1  sur  80
Télécharger pour lire hors ligne
! I O S F L U T T E R
C H O I @ WA N B O K . C O MF B . C O M /
L I N E B I Z P L U S
D I S C L A I M E R
F L U T T E R "
.
# .
•
• iOS
• , ,
• iOS Flutter
• https://flutter.dev/docs/get-started/flutter-for/ios-devs
• https://flutter-ko.dev/docs/get-started/flutter-for/ios-devs
• ‘ Flutter ?’
• iOS / / / / /
• iOS Flutter
• iOS Flutter
http://sli.do
#Flutter
📋 A U T O C L I P
, F L U T T E R ?
📋 A U T O C L I P
📋 A U T O C L I P
📋 A U T O C L I P
📋 A U T O C L I P
📋 A U T O C L I P
📋 A U T O C L I P
📋 A U T O C L I P
💫 R O U T I N E
R O U T I N E
•
•
• , , ,
• Bloc Architecture
! I O S
I O S
IDE
Declarative UI Pattern
Data flow & Architecture
Asynchrony Support Pattern matching
Annotations
Documents
🛠 I D E
I D E
I D E
I D E
:https://stackoverflow.com/questions/43635522/what-is-lldb-rpc-server-when-does-it-crash-in-xcode-why-it-crashes
I D E
I D E
I D E
I D E
• Light
• Configurable
• I know it
I D E
• Strong / Heavy
• Required for android
• Familiar for android developer
🗺 D E C L A R AT I V E U I PAT T E R N
D E C L A R AT I V E P R O G R A M M I N G
•
•
• (Impertive)
• (Declarative)
D E C L A R AT I V E P R O G R A M M I N G
•
• (Impertive)
•
• ? (How it is to be computed)
• (Declarative)
D E C L A R AT I V E P R O G R A M M I N G
•
• (Impertive)
• (Declarative)
• SQL, Apache Ant(partially), HTML
• ? (What is to be computed)
D E C L A R AT I V E U I
• UI ?
• UI ?
// Declarative style
return ViewB(
color: red,
child: ViewC(...),
)
// Imperative style
b.setColor(red)
b.clearChildren()
ViewC c3 = new ViewC(...)
b.add(c3)
P R O S
• UI
•
• UI
•
C O N S ( C O N C E R N )
• Overhead
• Mindset
• Performance
• Too many Elements and Properties
D ATA F L O W & A R C H I T E C T U R E
📊 D ATA F L O W
S O U R C E O F T R U T H
: https://developer.apple.com/videos/play/wwdc2019/226/
D U P L I C AT E D S O U R C E O F T R U T H
: https://developer.apple.com/videos/play/wwdc2019/226/
S I N G L E S O U R C E O F T R U T H
: https://developer.apple.com/videos/play/wwdc2019/226/
S I N G L E S O U R C E O F T R U T H
Scope Source Of Truth State
UI StatefulWidget Ephemeral State
App ? App State
D ATA F L O W
: https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple
S I N G L E S O U R C E O F T R U T H
Scope Source Of Truth State
UI StatefulWidget Ephemeral State
App MyApp? App State
🏛 A R C H I T E C T U R E
F L U X
A R C H I T E C T U R E
B L O C
R E A C T O R K I T
B L O C V S R E A C T O R K I T
Bloc ReactorKit
Presentational Component View
BLoC Reactor
Event Action
States State
Backend Service
📬 A S Y N C H R O N Y S U P P O R T
D A R T
Single Items Multiple Items
Synchronous T getData() List<T> getData()
Asynchronous Future<T> getData() Stream<T> getData()
S W I F T
Single Items Multiple Items
Synchronous T getData() Collection<T> getData()
Asynchronous None
Beta
(Publisher<T> in Combine)
S W I F T W I T H R X
Single Items Multiple Items
Synchronous T getData() Collection<T> getData()
Asynchronous Single<T> getData() Observable<T> getData()
W H Y D O E S R X D A R T E X I S T ?
🤔
🧩 PAT T E R N M AT C H I N G
B L O C E X A M P L E : I N F I N I T Y L I S T
import 'package:equatable/equatable.dart';
abstract class PostEvent extends Equatable {}
class Fetch extends PostEvent {
@override
String toString() => 'Fetch';
}
...
class PostUninitialized extends PostState { ... }
class PostError extends PostState { ... }
class PostLoaded extends PostState {
final List<Post> posts;
final bool hasReachedMax;
PostLoaded({ this.posts, this.hasReachedMax,})
: super([posts, hasReachedMax]);
PostLoaded copyWith({ List<Post> posts, bool hasReachedMax, }) {
return PostLoaded(
posts: posts ?? this.posts,
hasReachedMax: hasReachedMax ?? this.hasReachedMax,
);
}
...
}
class PostBloc extends Bloc<PostEvent, PostState> {
...
@override
Stream<PostState> mapEventToState(PostEvent event) async* {
if (event is Fetch && !_hasReachedMax(currentState)) {
try {
if (currentState is PostUninitialized) {
final posts = await _fetchPosts(0, 20);
yield PostLoaded(posts: posts, hasReachedMax: false);
return;
}
if (currentState is PostLoaded) {
final posts =
await _fetchPosts((currentState as PostLoaded).posts.length, 20);
yield posts.isEmpty
? (currentState as PostLoaded).copyWith(hasReachedMax: true)
: PostLoaded(
posts: (currentState as PostLoaded).posts + posts,
hasReachedMax: false,
);
}
} catch (_) {
yield PostError();
}
}
}
}
R E A C T O R K I T E X A M P L E
import RxSwift
class PostListReactor {
enum Action {
...
case fetch([Post])
}
enum Mutation {
case setIsInitialized(Bool)
case setIsLoaded(Bool)
case setPosts([Post])
case setHasReachedMax(Bool)
case setError(Error?)
}
struct State {
let isInitialized: Bool = false
let isLoaded: Bool = false
let posts: [Post] = []
let hasReachedMax: Bool = false
let error: Error? = nil
}
let initialState: State = .init()
...
func mutate(action: Action) -> Observable<Mutation> {
switch action {
...
case let .fetch(posts):
let posts: Observable<Mutation> = .just(.setPosts(posts))
let hasReachedMax: Observable<Mutation> = .just(.setHasReachedMax(posts.isEmpty))
return .concat(posts, hasReachedMax)
}
}
func reduce(mutation: Mutation, state: State) -> Observable<State> {
var state = state
switch mutation {
case let .setPost(posts) where currentState.isLoaded:
state.posts += posts
case let .setPost(posts) where !currentState.isLoaded:
state.posts = posts
case let .setHasReachedMax(hasReachedMax):
state.hasReachedMax = hasReachedMax
}
return state
}
}
📍 A N N O TAT I O N
A N N O TAT I O N
• Property Wrapper 16 Accepted
• https://github.com/apple/swift-evolution/blob/master/proposals/0258-
property-wrappers.md
📑 D O C U M E N TAT I O N
D O C U M E N TAT I O N
• Flutter
• YouTube
•
• Google I/O
• iOS
•
• WWDC
📚
IDE
IDE
Declarative UI Pattern
IDE
Declarative UI Pattern
Data flow & Architecture
IDE
Declarative UI Pattern
Data flow & Architecture
Asynchrony Support
IDE
Declarative UI Pattern
Data flow & Architecture
Asynchrony Support Pattern matching
IDE
Declarative UI Pattern
Data flow & Architecture
Asynchrony Support Pattern matching
Annotations
IDE
Declarative UI Pattern
Data flow & Architecture
Asynchrony Support Pattern matching
Annotations
Documents
IDE
Declarative UI Pattern
Data flow & Architecture
Asynchrony Support Pattern matching
Annotations
Documents
R E F E R E N C E
• Wikipedia: Declarative Programming
• https://en.wikipedia.org/wiki/Declarative_programming
• Declarative UI and Vaadin Designer
• https://www.youtube.com/watch?v=MwuIDsFizMA
• Practical advantages of declarative programming
• ftp://cliplab.org/pub/papers/PARFORCE/second_review/D.WP3.1.M2.3.ps.Z
• Algorithm = Logic + Control
• https://www.doc.ic.ac.uk/~rak/papers/algorithm%20=%20logic%20+%20control.pdf
• List of programming languages by type
• https://en.wikipedia.org/wiki/List_of_programming_languages_by_type#Declarative_languages
R E F E R E N C E
• Flutter Youtube
• https://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw
• WWDC 2019 Data Flow through SwiftUI
• https://developer.apple.com/videos/play/wwdc2019/226/
• Flux
• https://facebook.github.io/flux/docs/in-depth-overview
• ReactorKit
• https://github.com/ReactorKit/ReactorKit
iOS 개발자의 Flutter 체험기

Contenu connexe

Similaire à iOS 개발자의 Flutter 체험기

Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best PracticesYekmer Simsek
 
API Pain Points (PHPNE)
API Pain Points (PHPNE)API Pain Points (PHPNE)
API Pain Points (PHPNE)Phil Sturgeon
 
Html and i_phone_mobile-2
Html and i_phone_mobile-2Html and i_phone_mobile-2
Html and i_phone_mobile-2tonvanbart
 
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys PROIDEA
 
From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)Jose Manuel Pereira Garcia
 
course slides -- powerpoint
course slides -- powerpointcourse slides -- powerpoint
course slides -- powerpointwebhostingguy
 
Designing and developing mobile web applications with Mockup, Sencha Touch an...
Designing and developing mobile web applications with Mockup, Sencha Touch an...Designing and developing mobile web applications with Mockup, Sencha Touch an...
Designing and developing mobile web applications with Mockup, Sencha Touch an...Matteo Collina
 
GoCracow #5 Bartlomiej klimczak - GoBDD
GoCracow #5 Bartlomiej klimczak - GoBDDGoCracow #5 Bartlomiej klimczak - GoBDD
GoCracow #5 Bartlomiej klimczak - GoBDDBartłomiej Kiełbasa
 
Introduction to Compiler Development
Introduction to Compiler DevelopmentIntroduction to Compiler Development
Introduction to Compiler DevelopmentLogan Chien
 
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)Michael Wales
 
Category theory, Monads, and Duality in the world of (BIG) Data
Category theory, Monads, and Duality in the world of (BIG) DataCategory theory, Monads, and Duality in the world of (BIG) Data
Category theory, Monads, and Duality in the world of (BIG) Datagreenwop
 
The Basics Of Page Creation
The Basics Of Page CreationThe Basics Of Page Creation
The Basics Of Page CreationWildan Maulana
 
What's new in Vaadin 8, how do you upgrade, and what's next?
What's new in Vaadin 8, how do you upgrade, and what's next?What's new in Vaadin 8, how do you upgrade, and what's next?
What's new in Vaadin 8, how do you upgrade, and what's next?Marcus Hellberg
 
Introduction to Assembly Language
Introduction to Assembly LanguageIntroduction to Assembly Language
Introduction to Assembly LanguageMotaz Saad
 
Serverless Functions and Vue.js
Serverless Functions and Vue.jsServerless Functions and Vue.js
Serverless Functions and Vue.jsSarah Drasner
 
Evolving a Clean, Pragmatic Architecture - A Craftsman's Guide
Evolving a Clean, Pragmatic Architecture - A Craftsman's GuideEvolving a Clean, Pragmatic Architecture - A Craftsman's Guide
Evolving a Clean, Pragmatic Architecture - A Craftsman's GuideVictor Rentea
 

Similaire à iOS 개발자의 Flutter 체험기 (20)

Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
 
GraphQL, l'avenir du REST ?
GraphQL, l'avenir du REST ?GraphQL, l'avenir du REST ?
GraphQL, l'avenir du REST ?
 
API Pain Points (PHPNE)
API Pain Points (PHPNE)API Pain Points (PHPNE)
API Pain Points (PHPNE)
 
Html and i_phone_mobile-2
Html and i_phone_mobile-2Html and i_phone_mobile-2
Html and i_phone_mobile-2
 
Django
DjangoDjango
Django
 
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
 
From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)
 
JavaFX, because you're worth it
JavaFX, because you're worth itJavaFX, because you're worth it
JavaFX, because you're worth it
 
course slides -- powerpoint
course slides -- powerpointcourse slides -- powerpoint
course slides -- powerpoint
 
Designing and developing mobile web applications with Mockup, Sencha Touch an...
Designing and developing mobile web applications with Mockup, Sencha Touch an...Designing and developing mobile web applications with Mockup, Sencha Touch an...
Designing and developing mobile web applications with Mockup, Sencha Touch an...
 
GoCracow #5 Bartlomiej klimczak - GoBDD
GoCracow #5 Bartlomiej klimczak - GoBDDGoCracow #5 Bartlomiej klimczak - GoBDD
GoCracow #5 Bartlomiej klimczak - GoBDD
 
Introduction to Compiler Development
Introduction to Compiler DevelopmentIntroduction to Compiler Development
Introduction to Compiler Development
 
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
 
Category theory, Monads, and Duality in the world of (BIG) Data
Category theory, Monads, and Duality in the world of (BIG) DataCategory theory, Monads, and Duality in the world of (BIG) Data
Category theory, Monads, and Duality in the world of (BIG) Data
 
The Basics Of Page Creation
The Basics Of Page CreationThe Basics Of Page Creation
The Basics Of Page Creation
 
What's new in Vaadin 8, how do you upgrade, and what's next?
What's new in Vaadin 8, how do you upgrade, and what's next?What's new in Vaadin 8, how do you upgrade, and what's next?
What's new in Vaadin 8, how do you upgrade, and what's next?
 
Introduction to Assembly Language
Introduction to Assembly LanguageIntroduction to Assembly Language
Introduction to Assembly Language
 
Serverless Functions and Vue.js
Serverless Functions and Vue.jsServerless Functions and Vue.js
Serverless Functions and Vue.js
 
Evolving a Clean, Pragmatic Architecture - A Craftsman's Guide
Evolving a Clean, Pragmatic Architecture - A Craftsman's GuideEvolving a Clean, Pragmatic Architecture - A Craftsman's Guide
Evolving a Clean, Pragmatic Architecture - A Craftsman's Guide
 
Php 2
Php 2Php 2
Php 2
 

Plus de Wanbok Choi

[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵Wanbok Choi
 
WWDC 2019 Cheatsheet
WWDC 2019 CheatsheetWWDC 2019 Cheatsheet
WWDC 2019 CheatsheetWanbok Choi
 
[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기
[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기
[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기Wanbok Choi
 
RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017Wanbok Choi
 
try! Swift Tokyo 2017 후기
try! Swift Tokyo 2017 후기try! Swift Tokyo 2017 후기
try! Swift Tokyo 2017 후기Wanbok Choi
 
기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017
기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017
기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017Wanbok Choi
 
LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기Wanbok Choi
 
06 멀티뷰 애플리케이션
06 멀티뷰 애플리케이션06 멀티뷰 애플리케이션
06 멀티뷰 애플리케이션Wanbok Choi
 
04 안드로이드 응용프로그램의 구조
04 안드로이드 응용프로그램의 구조04 안드로이드 응용프로그램의 구조
04 안드로이드 응용프로그램의 구조Wanbok Choi
 

Plus de Wanbok Choi (9)

[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
 
WWDC 2019 Cheatsheet
WWDC 2019 CheatsheetWWDC 2019 Cheatsheet
WWDC 2019 Cheatsheet
 
[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기
[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기
[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기
 
RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017
 
try! Swift Tokyo 2017 후기
try! Swift Tokyo 2017 후기try! Swift Tokyo 2017 후기
try! Swift Tokyo 2017 후기
 
기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017
기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017
기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017
 
LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기
 
06 멀티뷰 애플리케이션
06 멀티뷰 애플리케이션06 멀티뷰 애플리케이션
06 멀티뷰 애플리케이션
 
04 안드로이드 응용프로그램의 구조
04 안드로이드 응용프로그램의 구조04 안드로이드 응용프로그램의 구조
04 안드로이드 응용프로그램의 구조
 

Dernier

US Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionUS Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionMebane Rash
 
Past, Present and Future of Generative AI
Past, Present and Future of Generative AIPast, Present and Future of Generative AI
Past, Present and Future of Generative AIabhishek36461
 
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfgUnit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfgsaravananr517913
 
Application of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptxApplication of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptx959SahilShah
 
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfAsst.prof M.Gokilavani
 
IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024Mark Billinghurst
 
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEINFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEroselinkalist12
 
Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...121011101441
 
Call Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call GirlsCall Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call Girlsssuser7cb4ff
 
Electronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdfElectronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdfme23b1001
 
Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxKartikeyaDwivedi3
 
Vishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documentsVishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documentsSachinPawar510423
 
Introduction-To-Agricultural-Surveillance-Rover.pptx
Introduction-To-Agricultural-Surveillance-Rover.pptxIntroduction-To-Agricultural-Surveillance-Rover.pptx
Introduction-To-Agricultural-Surveillance-Rover.pptxk795866
 
Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024hassan khalil
 
Introduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHIntroduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHC Sai Kiran
 
Transport layer issues and challenges - Guide
Transport layer issues and challenges - GuideTransport layer issues and challenges - Guide
Transport layer issues and challenges - GuideGOPINATHS437943
 
Risk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfRisk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfROCENODodongVILLACER
 
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)Dr SOUNDIRARAJ N
 
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionSachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionDr.Costas Sachpazis
 

Dernier (20)

US Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionUS Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of Action
 
Past, Present and Future of Generative AI
Past, Present and Future of Generative AIPast, Present and Future of Generative AI
Past, Present and Future of Generative AI
 
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfgUnit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
 
Application of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptxApplication of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptx
 
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
 
IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024
 
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEINFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
 
Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...
 
Call Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call GirlsCall Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call Girls
 
Electronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdfElectronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdf
 
Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptx
 
Vishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documentsVishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documents
 
Introduction-To-Agricultural-Surveillance-Rover.pptx
Introduction-To-Agricultural-Surveillance-Rover.pptxIntroduction-To-Agricultural-Surveillance-Rover.pptx
Introduction-To-Agricultural-Surveillance-Rover.pptx
 
Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024
 
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
 
Introduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHIntroduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECH
 
Transport layer issues and challenges - Guide
Transport layer issues and challenges - GuideTransport layer issues and challenges - Guide
Transport layer issues and challenges - Guide
 
Risk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfRisk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdf
 
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
 
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionSachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
 

iOS 개발자의 Flutter 체험기

  • 1. ! I O S F L U T T E R
  • 2. C H O I @ WA N B O K . C O MF B . C O M / L I N E B I Z P L U S
  • 3. D I S C L A I M E R F L U T T E R " . # .
  • 5. • iOS Flutter • https://flutter.dev/docs/get-started/flutter-for/ios-devs • https://flutter-ko.dev/docs/get-started/flutter-for/ios-devs • ‘ Flutter ?’
  • 6. • iOS / / / / / • iOS Flutter • iOS Flutter
  • 8. 📋 A U T O C L I P , F L U T T E R ?
  • 9. 📋 A U T O C L I P
  • 10. 📋 A U T O C L I P
  • 11. 📋 A U T O C L I P
  • 12. 📋 A U T O C L I P
  • 13. 📋 A U T O C L I P
  • 14. 📋 A U T O C L I P
  • 15. 📋 A U T O C L I P
  • 16. 💫 R O U T I N E
  • 17. R O U T I N E • • • , , , • Bloc Architecture
  • 18.
  • 19. ! I O S
  • 20. I O S IDE Declarative UI Pattern Data flow & Architecture Asynchrony Support Pattern matching Annotations Documents
  • 21. 🛠 I D E
  • 22. I D E
  • 23.
  • 24. I D E
  • 26. I D E
  • 27. I D E
  • 28. I D E
  • 29. I D E • Light • Configurable • I know it
  • 30. I D E • Strong / Heavy • Required for android • Familiar for android developer
  • 31. 🗺 D E C L A R AT I V E U I PAT T E R N
  • 32. D E C L A R AT I V E P R O G R A M M I N G • • • (Impertive) • (Declarative)
  • 33. D E C L A R AT I V E P R O G R A M M I N G • • (Impertive) • • ? (How it is to be computed) • (Declarative)
  • 34. D E C L A R AT I V E P R O G R A M M I N G • • (Impertive) • (Declarative) • SQL, Apache Ant(partially), HTML • ? (What is to be computed)
  • 35.
  • 36. D E C L A R AT I V E U I • UI ? • UI ? // Declarative style return ViewB( color: red, child: ViewC(...), ) // Imperative style b.setColor(red) b.clearChildren() ViewC c3 = new ViewC(...) b.add(c3)
  • 37. P R O S • UI • • UI •
  • 38. C O N S ( C O N C E R N ) • Overhead • Mindset • Performance • Too many Elements and Properties
  • 39. D ATA F L O W & A R C H I T E C T U R E
  • 40. 📊 D ATA F L O W
  • 41. S O U R C E O F T R U T H : https://developer.apple.com/videos/play/wwdc2019/226/
  • 42. D U P L I C AT E D S O U R C E O F T R U T H : https://developer.apple.com/videos/play/wwdc2019/226/
  • 43. S I N G L E S O U R C E O F T R U T H : https://developer.apple.com/videos/play/wwdc2019/226/
  • 44.
  • 45. S I N G L E S O U R C E O F T R U T H Scope Source Of Truth State UI StatefulWidget Ephemeral State App ? App State
  • 46. D ATA F L O W : https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple
  • 47. S I N G L E S O U R C E O F T R U T H Scope Source Of Truth State UI StatefulWidget Ephemeral State App MyApp? App State
  • 48. 🏛 A R C H I T E C T U R E
  • 49. F L U X
  • 50. A R C H I T E C T U R E
  • 51. B L O C
  • 52. R E A C T O R K I T
  • 53. B L O C V S R E A C T O R K I T Bloc ReactorKit Presentational Component View BLoC Reactor Event Action States State Backend Service
  • 54. 📬 A S Y N C H R O N Y S U P P O R T
  • 55. D A R T Single Items Multiple Items Synchronous T getData() List<T> getData() Asynchronous Future<T> getData() Stream<T> getData()
  • 56. S W I F T Single Items Multiple Items Synchronous T getData() Collection<T> getData() Asynchronous None Beta (Publisher<T> in Combine)
  • 57. S W I F T W I T H R X Single Items Multiple Items Synchronous T getData() Collection<T> getData() Asynchronous Single<T> getData() Observable<T> getData()
  • 58. W H Y D O E S R X D A R T E X I S T ? 🤔
  • 59. 🧩 PAT T E R N M AT C H I N G
  • 60. B L O C E X A M P L E : I N F I N I T Y L I S T import 'package:equatable/equatable.dart'; abstract class PostEvent extends Equatable {} class Fetch extends PostEvent { @override String toString() => 'Fetch'; }
  • 61. ... class PostUninitialized extends PostState { ... } class PostError extends PostState { ... } class PostLoaded extends PostState { final List<Post> posts; final bool hasReachedMax; PostLoaded({ this.posts, this.hasReachedMax,}) : super([posts, hasReachedMax]); PostLoaded copyWith({ List<Post> posts, bool hasReachedMax, }) { return PostLoaded( posts: posts ?? this.posts, hasReachedMax: hasReachedMax ?? this.hasReachedMax, ); } ... }
  • 62. class PostBloc extends Bloc<PostEvent, PostState> { ... @override Stream<PostState> mapEventToState(PostEvent event) async* { if (event is Fetch && !_hasReachedMax(currentState)) { try { if (currentState is PostUninitialized) { final posts = await _fetchPosts(0, 20); yield PostLoaded(posts: posts, hasReachedMax: false); return; } if (currentState is PostLoaded) { final posts = await _fetchPosts((currentState as PostLoaded).posts.length, 20); yield posts.isEmpty ? (currentState as PostLoaded).copyWith(hasReachedMax: true) : PostLoaded( posts: (currentState as PostLoaded).posts + posts, hasReachedMax: false, ); } } catch (_) { yield PostError(); } } } }
  • 63. R E A C T O R K I T E X A M P L E import RxSwift class PostListReactor { enum Action { ... case fetch([Post]) } enum Mutation { case setIsInitialized(Bool) case setIsLoaded(Bool) case setPosts([Post]) case setHasReachedMax(Bool) case setError(Error?) } struct State { let isInitialized: Bool = false let isLoaded: Bool = false let posts: [Post] = [] let hasReachedMax: Bool = false let error: Error? = nil } let initialState: State = .init() ...
  • 64. func mutate(action: Action) -> Observable<Mutation> { switch action { ... case let .fetch(posts): let posts: Observable<Mutation> = .just(.setPosts(posts)) let hasReachedMax: Observable<Mutation> = .just(.setHasReachedMax(posts.isEmpty)) return .concat(posts, hasReachedMax) } } func reduce(mutation: Mutation, state: State) -> Observable<State> { var state = state switch mutation { case let .setPost(posts) where currentState.isLoaded: state.posts += posts case let .setPost(posts) where !currentState.isLoaded: state.posts = posts case let .setHasReachedMax(hasReachedMax): state.hasReachedMax = hasReachedMax } return state } }
  • 65. 📍 A N N O TAT I O N
  • 66. A N N O TAT I O N • Property Wrapper 16 Accepted • https://github.com/apple/swift-evolution/blob/master/proposals/0258- property-wrappers.md
  • 67. 📑 D O C U M E N TAT I O N
  • 68. D O C U M E N TAT I O N • Flutter • YouTube • • Google I/O • iOS • • WWDC
  • 69. 📚
  • 70. IDE
  • 72. IDE Declarative UI Pattern Data flow & Architecture
  • 73. IDE Declarative UI Pattern Data flow & Architecture Asynchrony Support
  • 74. IDE Declarative UI Pattern Data flow & Architecture Asynchrony Support Pattern matching
  • 75. IDE Declarative UI Pattern Data flow & Architecture Asynchrony Support Pattern matching Annotations
  • 76. IDE Declarative UI Pattern Data flow & Architecture Asynchrony Support Pattern matching Annotations Documents
  • 77. IDE Declarative UI Pattern Data flow & Architecture Asynchrony Support Pattern matching Annotations Documents
  • 78. R E F E R E N C E • Wikipedia: Declarative Programming • https://en.wikipedia.org/wiki/Declarative_programming • Declarative UI and Vaadin Designer • https://www.youtube.com/watch?v=MwuIDsFizMA • Practical advantages of declarative programming • ftp://cliplab.org/pub/papers/PARFORCE/second_review/D.WP3.1.M2.3.ps.Z • Algorithm = Logic + Control • https://www.doc.ic.ac.uk/~rak/papers/algorithm%20=%20logic%20+%20control.pdf • List of programming languages by type • https://en.wikipedia.org/wiki/List_of_programming_languages_by_type#Declarative_languages
  • 79. R E F E R E N C E • Flutter Youtube • https://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw • WWDC 2019 Data Flow through SwiftUI • https://developer.apple.com/videos/play/wwdc2019/226/ • Flux • https://facebook.github.io/flux/docs/in-depth-overview • ReactorKit • https://github.com/ReactorKit/ReactorKit