Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
BLoC
Search
Shinnosuke Kugimiya
May 31, 2018
Programming
9
1.6k
BLoC
flutter meetup #2の資料です
Shinnosuke Kugimiya
May 31, 2018
Tweet
Share
More Decks by Shinnosuke Kugimiya
See All by Shinnosuke Kugimiya
Claude Code x Androidアプリ 開発
kgmyshin
1
1.6k
AndroidアプリエンジニアもMCPを触ろう
kgmyshin
2
1.2k
15分で分かった気になる dumpsys
kgmyshin
1
300
UIテストはもうMaestroでいいのかもしれない話
kgmyshin
28
13k
新規開発を始めるときにやるべきこと
kgmyshin
19
9.1k
android app error handling
kgmyshin
1
1.5k
solid+cqs+dry
kgmyshin
35
10k
Paging Library ~ アイテムの更新 ~
kgmyshin
2
3.4k
KotlinでReact Native(expo) を使いたい
kgmyshin
2
1.2k
Other Decks in Programming
See All in Programming
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
520
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
140
堅牢なフロントエンドテスト基盤を構築するために行った取り組み
shogo4131
8
2.5k
Developing static sites with Ruby
okuramasafumi
0
320
Go コードベースの構成と AI コンテキスト定義
andpad
0
130
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
390
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
認証・認可の基本を学ぼう後編
kouyuume
0
250
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
3.9k
Rediscover the Console - SymfonyCon Amsterdam 2025
chalasr
2
190
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
290
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
140
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
280
Navigating Team Friction
lara
191
16k
Between Models and Reality
mayunak
0
150
Game over? The fight for quality and originality in the time of robots
wayneb77
1
65
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
180
Applied NLP in the Age of Generative AI
inesmontani
PRO
3
1.9k
Code Reviewing Like a Champion
maltzj
527
40k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
200
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
88
Raft: Consensus for Rubyists
vanstee
141
7.2k
Transcript
© DMM.com !LHNZTIJO 'MVUUFS.FFUVQ5PLZP #-P$
© DMM.com w LHNZTIJOఝٶ ͗͘Έ w "OESPJEΤϯδχΞ w %..DPNϥϘ$50ࣨॴଐ
w ݄͔Β ࣗݾհ
© DMM.com BHFOEB
© DMM.com w #-P$ͱ w #-P$ͷΨΠυϥΠϯ w #-P$ͱ6* w #-P$ͷྫ
w 'MVUUFSͰͷ͍ํ w ·ͱΊ BHFOEB
© DMM.com #-P$ͱ
© DMM.com #-P$ͱ Business Logic Component
© DMM.com #-P$ͱ ͕ࣗͬͨͷ(PPHMF*0ͰͷԼهͷηογϣϯ Build reactive mobile apps with
Flutter IUUQTXXXZPVUVCFDPNXBUDI W34H#&Q0*
© DMM.com #-P$ͱ ࣮ࡍ݄ʹ%BSU$POGͷ ԼهͷηογϣϯͰൃද͞Ε͍ͯΔ Flutter / AngularDart –
Code sharing, better together IUUQTXXXZPVUVCFDPNXBUDI W1-)MOX)H1&
© DMM.com #-P$ͱ ϏδωεϩδοΫΛ UIϓϥοτϑΥʔϜ͔Β ͢ΔͨΊͷ ઃܭύλʔϯͷҰͭ ҰݴͰݴ͏ͱ Ͱ͋Δ
© DMM.com #-P$ͷϞνϕʔγϣϯ 6* .PEFM *OGSB ͜͏͍͏ঢ়ଶΛ .PEFM .PEFM
.PEFM
© DMM.com #-P$ͷϞνϕʔγϣϯ 6* .PEFM *OGSB ͜͏͍ͨ͠ 91MBUGPSN"EBQUFS
© DMM.com #-P$ͷΨΠυϥΠϯ
© DMM.com #-P$ͷΨΠυϥΠϯ JOQVUTBOEPVUQVUTBSFTJNQMF4USFBNT4JOLTPOMZ %FQFOEFODJFTNVTUCFJOKFDUBCMFBOEQMBUGPSN BHOPTUJD
/PQMBUGPSNCSBODIJOHBMMPXFE *NQMFNFOUBUJPODBOCFXIBUFWFSZPVXBOUJGZPV GPMMPXUIFQSFWJPVTSVMFT " #VUNBZ*TVHHFTUSFBDUJWFQSPHSBNNJOH
© DMM.com #-P$ͷΨΠυϥΠϯ JOQVU4JOLɺPVUQVU4USFBNͰ࣮͢Δ ґଘΦϒδΣΫτ֎͔ΒೖՄೳͰɺϓϥοτ ϑΥʔϜʹґଘ͠ͳ͍ͷͰ͋Δ͜ͱ
ϓϥοτϑΥʔϜͷذμϝ dΛकͬͯΕɺ࣮ͳΜͰ͍͍Α ͨͩ͠ɺ3FBDUJWF1SPHSBNNJOHͰΉͷ͕͓͢͢ΊͩΑ
© DMM.com #-P$ͱ6*ͷܨ͗
© DMM.com #-P$ͱ6*ͷܨ͗ &BDIDPNQMFYFOPVHIDPNQPOFOUIBTB DPSSFTQPOEJOH#-P$ $PNQPOFOUTTIPVMETFOEJOQVUTBTJTz
$PNQPOFOUTTIPVMETIPXPVUQVUTBTDMPTFBT QPTTJCMFUPBTJTz "MMCSBODIJOHTIPVMECFCBTFEPOTJNQMF#-P$ CPPMFBOPVUQVUT
© DMM.com #-P$ͷΨΠυϥΠϯ ͦΕͧΕͷzेʹෳࡶͳzίϯϙʔωϯτʹ#-P$ ͕Ұͭ͋Δʢzेʹෳࡶͳzͷ߹͍֤ࣗͰஅʣ JOQVUʹૹΔσʔλBTJTͰ
PVUQVUʹྲྀ͢ετϦʔϜͰ͖Δ͚ͩlBTJTzͰ ͯ͢ͷذ#-P$ʹΑΔ#PPMFBOͳΞτϓοτ ʹج͖ͮ͘Ͱ͋Δ
© DMM.com #-P$ͷྫ
© DMM.com #-P$ͷྫ class CartBLoC { Sink<Product> addition; Stream<int>
itemCount; Stream<String> totalCost; Stream<List<CartItem>> items; }
© DMM.com #-P$ͷྫ class CartBLoC { Sink<Product> addition; Stream<int>
itemCount; Stream<String> totalCost; Stream<List<CartItem>> items; } 1SPEVDU͕Ճ͞ΕΔͱ
© DMM.com #-P$ͷྫ class CartBLoC { Sink<Product> addition; Stream<int>
itemCount; Stream<String> totalCost; Stream<List<CartItem>> items; } ͦΕͧΕͷ4USFBN͔Β݁Ռ͕ྲྀΕΔ
© DMM.com 'MVUUFSͰͷ͍ํ
© DMM.com JOQVUͷܨ͛ํ TextField( onChanged: bloc.sink.add, decoration: InputDecoration( border:
OutlineInputBorder(), ɹɹɹ hintText: “hint"), )
© DMM.com JOQVUͷܨ͛ํ TextField( onChanged: bloc.sink.add, decoration: InputDecoration( border:
OutlineInputBorder(), ɹɹɹ hintText: “hint"), ) ΠϕϯτͱTJOLBEEΛόΠϯυ͢Δ͚ͩ
© DMM.com PVUQVUΛ6*ʹͭͳ͛Δํ๏ StreamBuilder<String>( stream: bloc.stream, builder: (context, snapshot)
=> Container( child: Text(snapshot?.data ?? ""), ), )
© DMM.com PVUQVUΛ6*ʹͭͳ͛Δํ๏ StreamBuilder<String>( stream: bloc.stream, builder: (context, snapshot)
=> Container( child: Text(snapshot?.data ?? ""), ), ) 4USFBN#VJMEFS͏͚ͩ
© DMM.com ·ͱΊ
© DMM.com w #-P$6*ͱ.PEFMͱ*OGSBΛ͚Δ͜ͱͱɺΫϩε ϓϥοτϑΥʔϜͷίʔυγΣΞΛϞνϕʔγϣϯ ʹੜ·Εͨ w कΔ͖ΨΠυϥΠϯ͕͋Δ w
'MVUUFSͰ w JOQVUΛૹΔͱ͜ΖͰTJOLBEEΛόΠϯυ͢Δ w PVUQVUΛTVCTDSJCF͢Δʹ4USFBN#VJMEFSΛ͏ ·ͱΊ