Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
How to use provider package
Search
makicamel
July 16, 2019
Programming
1k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
How to use provider package
makicamel
July 16, 2019
More Decks by makicamel
See All by makicamel
dRuby over BLE
makicamel
2
530
Road to RubyKaigi: Play Hard(ware)
makicamel
1
1.4k
First step to PicoRuby
makicamel
2
770
PicoRuby on Rails
makicamel
4
360
Take a small step beyond the api
makicamel
2
250
Road to RubyKaigi: Making Tinny Chiptunes with Ruby
makicamel
4
2k
Road to RubyKaigi
makicamel
4
740
Rails アプリ地図考 Flush Cut
makicamel
1
260
ErdMap: Thinking about a map for Rails applications
makicamel
2
4.3k
Other Decks in Programming
See All in Programming
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
220
Zero-Tap Sign-In対応、結局何をすればいいの?
mitohato14
0
1.2k
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
220
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2.1k
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
2.3k
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
7.1k
最近”作らせてる” ローカルAIアプリの話
akit37
0
530
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
250
Performance Optimization With LLMs
xleitix
0
230
JIS keyboard support in Omarchy
lef237
0
180
社内AIエージェント「Askワンバン」における コストチューニングの取り組み
t0yohei
0
120
AIが生成したコードは読むべきか?抽象化設計とコードの品質保証 / abstraction-design-and-quality
minodriven
14
8.1k
Featured
See All Featured
Visualization
eitanlees
153
17k
The Pragmatic Product Professional
lauravandoore
37
7.5k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.4k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
320
The Mindset for Success: Future Career Progression
greggifford
PRO
0
550
Practical Orchestrator
shlominoach
192
12k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
280
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Transcript
ͰΘ͔Δ ΏΔ;ΘQSPWJEFSೖ 2019.7.16. Flutter Meetup Tokyo #10 @makicamel ͍ํ
ࣗݾհ •@makicamel / ݪສق •גࣜձࣾGaiax •Flutterྺ3ϲ݄͘Β͍ •Ruby ͱϏʔϧɹɹͱ͓ञ͕͖
ࣗݾհ
•ڥքͱͯ͠ࠓਂ0࣌ͷDateTimeΠϯελϯε͕΄͍͠ DateCalc.now().beginningOfDay(); •aͱb͕ಉ͔͡Ͳ͏͔ఆ͍ͨ͠ a.isSameDay(b); •c͕Կϲ݄લͳͷ͔Λऔಘ͍ͨ͠ c.differenceValue(type: DateType.month); •1ޙͷࠓͷΛग़͍ͨ͠ DateCalc.now().addYear(1); date_calc
provider
provider ? •͍··ͰͷStateཧͷཱऀ •scoped model •BLoC •Rx •Stream → ͪΐͬͱΓͳ͍
→ ͪΐͬͱෳࡶ͗͢Δ
provider ? •scoped modelʹۙ͘ɺػೳΛ૿ͨ͠ͷ͕provider Google I/O 2019Ͱprovider͕Googleެࣜਪʹ ͍·ผͷํ๏Λ͍ͬͯΔਓ ແཧʹม͑ͳ͍͍ͯ͘Αʂ
৽࢝͘͠ΊΔͳΒ provider͕அવΦεεϝ✨ 1SBHNBUJD4UBUF.BOBHFNFOUJO'MVUUFS (PPHMF*0 IUUQZPVUVCFE@NDTNSG* ."5546--*7"/
State 4UBSUUIJOLJOHEFDMBSBUJWFMZcqVUUFSEFW IUUQTqVUUFSEFWEPDTEFWFMPQNFOUEBUBBOECBDLFOETUBUFNHNUEFDMBSBUJWF એݴత
•ୡ͖͢త(ग़ྗ)Λࣔ͠ ࣮ݱ͢Δखଓ͖γεςϜʹ ͤΔ •ཉ͍͠σʔλ Λهड़ •ॲཧํ๏Θͳ͍ એݴܕ / ໋ྩܕ •తΛୡ͢ΔͨΊͷํ๏
Λʮखଓ͖ʯͱͯࣔ͢͠ •ॲཧɾऔಘํ๏ Λهड़ •࣮ߦ໋͖͢ྩྻͰ ߏ͞ΕΔ IUUQTKBXJLJQFEJBPSHXJLJએݴܕϓϩάϥϛϯά IUUQTKBXJLJQFEJBPSHXJLJ໋ྩܕϓϩάϥϛϯά ͪͳΈʹ3VCZ ΦϒδΣΫτࢦΛಋೖ໋ͨ͠ྩܕݴޠ How What
class SomeWidget extends StatefulWidget { SomeWidgetState state; SomeItem value; @override
createState() => state = SomeWidgetState(); void updateWidget() => state.updateState(); } class SomeWidgetState extends State<SomeWidget> { void updateState() { setState(() {}); } @override Widget build(BuildContext context) { return SomeAwesomeWidget(...); } } એݴܕ / ໋ྩܕ
class AnotherWidget extends StatelessWidget { @override Widget build(BuildContext context) {
return FlatButton( child: Text('PUSH'), onPressed: () { var widget = SomeWidget() ..value = someItem ..updateWidget(); }, ); } } એݴܕ / ໋ྩܕ
4JNQMFBQQTUBUFNBOBHFNFOUcqVUUFSEFW IUUQTqVUUFSEFWEPDTEFWFMPQNFOUEBUBBOECBDLFOETUBUFNHNUTJNQMF એݴܕ / ໋ྩܕ 1SBHNBUJD4UBUF.BOBHFNFOUJO'MVUUFS (PPHMF*0 IUUQZPVUVCFE@NDTNSG* •AnotherWidget͕SomeWidgetΛΓ͍͗ͯ͢Δ
ΞϓϦ͕େ͖͘ͳΔͱΩπ͍ •Ͳ͜ͰState͕มߋ͞ΕΔ͔Θ͔Βͳ͍ ΞϓϦΛcrashͤ͞ΔՄೳੑ͕͋Δ
એݴܕ / ໋ྩܕ 4JNQMFBQQTUBUFNBOBHFNFOUcqVUUFSEFW IUUQTqVUUFSEFWEPDTEFWFMPQNFOUEBUBBOECBDLFOETUBUFNHNUTJNQMF UIΞϓϦέʔγϣϯͷঢ়ଶ(state)Λ Ϗϧυܾͯ͠·Δͷ
void someHandler() { final items = somehowGetMyItems(); items.add(myAwesomeItem); } class
SomeWidget extends StatelessWidget { @override Widget build(BuildContext context) { var items = somehowGetMyItems(context); return SomeAwesomeWidget(...); } } એݴܕ / ໋ྩܕ providerͷग़൪ UIͱ stateͷ
࣮ͯ͠ΈΑ͏
•Model •ChangeNotifier •ChangeNotifierProvider •MultiProvider •Consumer ొਓ
ϨετϥϯͷਥͰΦʔμʔ͕ฒͿ͜Μͳ൘ Πϝʔδਤ ΦϜϨπ ×1 εʔϓ ×1 A ΤϏϑϥΠ ×2 ϥΠε
×2 B ϋϜΧπ ×1 ΤϏϑϥΠ ×2 C
•Model •ChangeNotifier •ChangeNotifierProvider •MultiProvider •Consumer ొਓ
Model •OrderΫϥε Item(ྉཧ) ςʔϒϧ൪߸Λϝϯόʹ࣋ͭ •OrderPoolΫϥε Φʔμʔ͕ೖΔͱ૿͑ɺ Φʔμʔ͕ఏڙ͞ΕΔͱݮΔ ΦϜϨπ ×1 εʔϓ
×1 A ΦϜϨπ ×1 εʔϓ ×1 A ΤϏϑϥΠ ×2 ϥΠε ×2 B ϋϜΧπ ×1 ΤϏϑϥΠ ×2 C
class Order { int id; Table tableNum; List<Item> items; Order(this.id,
this.tableNum, this.items); } Model ΦϜϨπ ×1 εʔϓ ×1 A
class OrderPool { int _max = 0; List<Order> _orders =
[]; List<Order> get orders => _orders; void add(Table tableNum, List names) { var items = names.map( (name) => Item(name)).toList(); _orders.add(Order(_max, tableNum, items)); _max += 1; } void remove(...) {...} } Model ΦϜϨπ ×1 εʔϓ ×1 A ΤϏϑϥΠ ×2 ϥΠε ×2 B ϋϜΧπ ×1 ΤϏϑϥΠ ×2 C
•Model •ChangeNotifier •ChangeNotifierProvider •MultiProvider •Consumer ొਓ
ChangeNotifier •͍ͬͯ͏͚ͩͷਓ •Modelʹมߋ͕͋ͬͨ࣌ʹ มߋͨ͠Αͬͯ௨͢Δ •ModelͰextends͞ΕΔ Φʔμʔ͍Γ·ͨ͠ʔʂ ˞ͳ͓ɺMJTUFOFSͷొʙݸ·Ͱ͕ਪ 'MVUUFS4UBUF.BOBHFNFOUXJUI1SPWJEFSc,BSUIJL1POOBNJO'MVUUFS$PNNVOJUZ.FEJVN IUUQTNFEJVNDPNqVUUFSDPNNVOJUZqVUUFSTUBUFNBOBHFNFOUXJUIQSPWJEFSFFCCDBD
class OrderPool extends ChangeNotifier { int _max = 0; List<Order>
_orders = []; List<Order> get orders => _orders; void add(Table tableNum, List names) { var items = names.map( (name) => Item(name)).toList(); _orders.add(Order(_max, tableNum, items)); _max += 1; notifyListeners(); } void remove(...) {...} } ChangeNotifier มߋͨ͠Αͬͯ௨
•Model •ChangeNotifier •ChangeNotifierProvider •MultiProvider •Consumer ొਓ
ChangeNotifierProvider •௨Λಧ͚ͯ൘Λߋ৽͢Δਓ •ModelΛ͏ΫϥεΛwrap͢ΔܗͰઃஔ (৭ΜͳΫϥε͔Βࢀর͞ΕΔ࣌ main.dartͷΑ͏ͳτοϓϨϕϧ) ɹɹ˞ ຊʹඞཁͱͳΔ࣌·ͰϦϏϧυ͠ͳ͍ Φʔμʔ͖ͨΑɺஔ͍ͱ͘Ͷ
class OrderApp extends StatelessWidget { @override Widget build(BuildContext context) {
return ChangeNotifierProvider( builder: (context) => OrderPool(), child: MaterialApp( title: 'OrderManagement', home: OrderBoard(), )); } } ChangeNotifierProvider ͏Ϋϥε(OrderBoard)ͷ্ҐͰએݴ ChangeNotifier͋ Λܧঝͨ͠ ModelΛࢦఆ
MultiProvider •ͨ͘͞Μ͍Δ ChangeNotifierProvider Φʔμʔ͖ͨΑ ͓٬༷͕͖·ͨ͠
•Model •ChangeNotifier •ChangeNotifierProvider •MultiProvider •Consumer ొਓ
•Φʔμʔ൘ •Provider͔Β Λड͚औͬͯදࣔ •ModelΛࢦఆͯ͠͏ Consumer ΦϜϨπ ×1 εʔϓ ×1 A
ΤϏϑϥΠ ×2 ϥΠε ×2 B ϋϜΧπ ×1 ΤϏϑϥΠ ×2 C
class OrderBoard extends StatelessWidget { @override Widget build(BuildContext context) {
return Scaffold( appBar: AppBar(title: Text('OrderBoard')), body: Consumer<OrderPool>(builder: (context, orderList, _) { return ListView(children: [ for (Order order in orderList.orders) ... [OrderCard(order: order)] ]); }), ); } } Consumer ΦϜϨπ ×1 εʔϓ ×1 A ΤϏϑϥΠ ×2 ϥΠε ×2 B ϋϜΧπ ×1 ΤϏϑϥΠ ×2 C
•Model •ChangeNotifier •ChangeNotifierProvider •MultiProvider •Consumer ొਓ → ModelͰmixin → ͏Widget(Ϋϥε)Λwrap
→ දࣔWidget(෦)Λwrap
•Easy & Simple •WidgetπϦʔ͔Βͳ͘ͳΔͱσϑΥϧτͰdispose •ඞཁͳՕॴͷΈϦϏϧυ •Stream͑Δ providerͷ͍͍ͱ͜Ζ
•Ί͚ͩͲͨͿΜΘ͔Γ͍͢BLoCύλʔϯͷղઆ | @kabochapo - Qiita https://qiita.com/kabochapo/items/8738223894fb74f952d3 •FlutterͷBLoC(Business Logic Component)ͷϥΠϑαΠΫϧΛ ਖ਼֬ʹཧͯ͠ఏڙ͢Δbloc_providerύοέʔδͷղઆ
| mono in Flutter ' - Medium https://medium.com/flutter-jp/bloc-provider-70e869b11b2f •[Flutter] package:provider ͷ֤ϓϩόΠμͷৄࡉ | @kabochapo - Qiita https://qiita.com/kabochapo/items/a90d8438243c27e2f6d9 •provider | rrousselGit/provider - GitHub https://github.com/rrousselGit/provider •provider_shopper | filiph/samples - GitHub https://github.com/filiph/samples/tree/provider-shopper/provider_shopper •Pragmatic State Management in Flutter (Google I/O'19) http://youtu.be/d_m5csmrf7I ࢀߟ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠