Flutter FAQ ð¯ðµ
ããç®ã«ããFlutterã«é¢ããçåãžã®ç§æ
å ¬åŒããã¥ã¡ã³ãã«ãå å®ããFAQããŒãžããããŸãããæ¬èšäºã§ã¯Flutterã«ã€ããŠããç®ã«ããçåã«ã€ããŠãèªåãªãã®èŠè§£ãè¿°ã¹ãŠãããŸãã
Flutterã®é åã¯ïŒ
åæã§èªãå°œããããŠããŸãããå ¬åŒãµã€ãã®ãããã«ãèŒã£ãŠããŸããã次ã®3ç¹ãç¹ã«é åçãªãã€ã³ãã§ãã
ããã«èªåãªãã«è¡šçŸãããšã次ã®ããã«æã£ãŠããŸãã
- Hot Reload/Restartã«ãã£ãŠãå®è£ ãšç¢ºèªã®ãã£ãŒãããã¯ãµã€ã¯ã«ã極ããŠéã(ãã«ãã§æ°åç§ä»¥äžçšåºŠåŸ ããããããšã®å€ããã€ãã£ãéçºç°å¢ãšæ¯ã¹ãŠ)
- ãã€ãã£ãã¢ããªãšèŠåãã®ä»ããªããããªé«ã¯ãªãªãã£ã»é«ããã©ãŒãã³ã¹ãªã¢ããªã®éçºãå¯èœ
- ãªãããªãã«ã«ã¹ã¿ã UIãçµã¿ããã
ããã«ãGoogle I/O 2019ã§ãã¢ããŒã«ãããŠãããã¹ã¯ãããã»Webãžã®ã¯ãã¹ãã©ãããã©ãŒã ã¢ããªã®éçºãå¯èœã«ãªãã€ã€ãã(ãŸã ãã¬ãã¥ãŒçã§çŸæç¹ã§ã®ãããã¯ã·ã§ã³å©çšã¯å³ãã)ã®ããä»åŸãžã®æåŸ ãã€ã³ãã§ãã
Flutterã®åŠç¿ã³ã¹ãã¯ïŒ
å人çã«ã¯ã以äžçšåºŠã«æã£ãŠããŸãã
- ç°¡åãªãããã¿ã€ãã»ããã·ã³ãã«ãªã¢ããª: ãŸããŸãç°¡å
- ããçšåºŠè€éã»äžèŠæš¡ä»¥äžã®ã¢ããª: ç°¡åã§ã¯ãªã(iOSãã€ãã£ããããå°ãç¿çããããããïŒçšåºŠ)
ç°¡åãªãããã¿ã€ãã»ããã·ã³ãã«ãªã¢ããª
ç°¡åãªãããã¿ã€ããªã©ãçµããçšåºŠã§ããã°ã以äžãã§ããã°OKã§ãã
- è±å¯ã«çšæãããWidget ãé©åœã«çµã¿åãããŠä»»æã®ã¬ã€ã¢ãŠããçµããããš
- ç»é¢æŽæ°ã¿ã€ãã³ã°ã§ setState ãåŒã¶
ãã¡ããåžžã«ãã¹ããªå®è£ ãããããšãããšåçŽãªã¢ããªã§ãããç°¡åã§ããªãã§ããããšããããåãã°OKã¬ãã«ãªãããŸãé£ãããªãã§ãã
äŸãã°ãéãšã³ãžãã¢ã®ãã¶ã€ããŒãé«ç²ŸåºŠãªãããã¿ã€ãã³ã°ããŒã«ã䜿ã代ããã«Flutterã§çµãããšãªã©ããé£æ床çã«å å劥åœãªéžæè¢ã ãšæããŸãã
ããçšåºŠè€éã»äžèŠæš¡ä»¥äžã®ã¢ããª
ããçšåºŠè€éã»é«å質ã»é«ããã©ãŒãã³ã¹ãªã¢ããªãçµãããšãããšãç¹ã«ç¶æ 管çåšãã«ãã£ããåãçµãå¿ èŠãåºãŠããŸãã
åŠç¿ãå§ãã¯ã宣èšçãªUIãã¬ãŒã ã¯ãŒã¯ãªãã§ã¯ã®é£ããã»å¥¥æ·±ããæãããšããã ãšæããŸãã
å ¬åŒããã¥ã¡ã³ãã§ã以äžãªã©ã§ãŸããŸãæåãã«èª¬æãããŠããŸãã
Google I/Oã§ãæ¯å¹Žããã«é¢ããã»ãã·ã§ã³ãããããããããéèŠãªãããã¯ã§ããããšã䌺ããŸãã
以äžã®åœ¹ç®ã»äœ¿ãæ¹ããã¡ããšç解ããŠãäœããã®ãã¿ãŒã³(BLoCãªã©)ã«èœãšã蟌ãã§äœ¿ãããªãããšãèã§ãã
- æŽæ°ãäŒããããã¯ã©ã¹: ValueNotifierã»StreamControllerã»RxDartã®Observable ãªã©
- äŒããããæŽæ°ãUIã«åæ ããWidget: ValueListenableBuilderã»StreamBuilderãªã©
- æŽæ°ãäŒããããã¯ã©ã¹ããããæãããã®ãäžäœããªãŒãžåãæž¡ãWidget: InheritedWidgetãªã©
ã©ã®ãã¿ãŒã³ã«èœãšã蟌ããšããŠããæè¿ã§ã¯ provider ã掻çšããã®ããªã¹ã¹ã¡ã§ãã以äžã®èšäºã®åŸåã§è§ŠããŠããŸãã
ãŸããéåžžã®UIæŽæ°ã®å¿çšçã«ãã¢ãã¡ãŒã·ã§ã³ãèŠãç®ã«é¢ä¿ããç¶æ ã®å€ãListenableããŒã¹ã§é£ç¶çã«äŒããŠãªãã«ãããããšã§ãªãããŠããã ã(ã¢ãã¡ãŒã·ã§ã³ã®çµ¡ãŸãªãéåžžã®ç»é¢æŽæ°ãšå®è³ªäžç·)ãšæãããããšãäžå±€ç解ãæ·±ãŸã£ãŠé©åãªæ±ããã§ããããã«ãªãã¯ãã§ãã
ãã®ããããåããããã«ãªããšãè€éãªç»é¢ããããžãã¯ã»ç¶æ ãšåé¢ãããããã·ã³ãã«ãªççµåãªWidgetã®çµã¿åããã§çµããããã«ãªã£ãŠããŸãã
ç¶æ ã®æŽæ°ãéäžè¶³ãªãå¿ èŠãªãšããã®ã¿ã«äŒæãããããããã«ãªããšã次ã®ãããªè¯ãçµæã«ç¹ãããŸãã
- ãã°ã®äœæž(éã«Flutterã§è€éãªã¢ããªãéã«çµããšç Žç¶»ããŠåæŸã€ããªããªãã¯ã)
- UIæŽæ°ããã©ãŒãã³ã¹åäž(ã¢ãã¡ãŒã·ã§ã³ãæ»ããã«ãªããªã©)
- ããããªãŒæ¶è²»æž
åŠç¿ã³ã¹ãã¯äœãã¯ç¡ãããã£ããã¢ããã¯ãããã
Hot Reload/Restartã§è©Šè¡ãšåŠç¿ã®ãã£ãŒãããã¯ãµã€ã¯ã«ãé«éã«åããã®ã§ãFlutterã®éçºã¹ãã«ã¯å¹çè¯ã身ã«ã€ãããããšæããŠããŸãã
ãŸããå ¬åŒããã¥ã¡ã³ããªã©ãå å®ããŠããŠãã€åããããããšããã®ãããã£ããã¢ããã®ããããã«é¢ä¿ããŸããããã«ã€ããŠã¯ä»¥äžã®èšäºã§è¿°ã¹ãŸããã
ç¹ã«ãFlutter Widget of the Week ãšããWidgetããããã極ããŠåããããã解説ããŠãã1æ¬ãããæ°åã®åç»ãç§éžãªã®ã§ãFlutterã«è§Šããéã¯ã©ããã®ã¿ã€ãã³ã°ã§ãã¹ãŠç®ãéãããšããå§ãããŸãã
ãã€ãã£ãã¢ããªç¥èã¯å¿ èŠïŒ
ã¯ãã¹ãã©ãããã©ãŒã ãã¬ãŒã ã¯ãŒã¯ã§ããã€ãã£ãã¢ããªç¥èã¯å€§äºãšèšãããããšããããããŸãããFlutterã¯UIãç¬èªæç»æ¹åŒãªããšããã£ãŠãã€ãã£ãã¢ããªç¥èã®å¿ èŠæ§ã¯äœãã§ãã
éçºããã¢ããªã®èŠä»¶å®çŸã®ããã«å¿ èŠãªãã®ãæºãããFlutterãã¬ãŒã ã¯ãŒã¯ã®æ©èœããã³ããã±ãŒãžãååšããªã(ãããã¯äœå質)ãªå Žåã¯ããã€ãã£ãããžãã¯ãæžããäžã§ãããFlutterã®Dartã³ãŒãããåŒã³åºããããã«ãã©ãããã©ãŒã ãã£ã³ãã«ã䜿ã£ãŠèªåã§å®è£ ããå¿ èŠããããŸãã
ãã ãGoogleãFlutteréçºã«åãå ¥ããŠãããäžççã«ã©ãã©ãFlutter人æ°ãé«ãŸã£ãŠããããšããã£ãŠã倧æµã®ããã±ãŒãžã¯ãã§ã«ååšããã®ã§ããã®ãããªã·ãŒã³ã¯ããªãéå®çã§ããåã¯ãããŸã§ãã®å¿ èŠæ§ãçããããšã¯ã»ãšãã©ãããŸãã(firebase_storageã«ãã«ãªã¯ãããŠããŒãžãããããšãããããšããããšãããã§ã)ã
ãšããããã§ã次ã®å Žåã«èªäœããå¿ èŠãããããïŒãšããçšåºŠã§ãã
- æ¢åããã±ãŒãžããããããããæ©èœã»å質äžè¶³ã®ãšã
- æ¢åããã±ãŒãžãç¡ããããªããããã€ããŒãªãã€ãã£ãæ©èœã䜿ããããšã
- ææ°iOS/Androidãã€ãã£ãæ©èœããã¡æ©ã䜿ããããšã
ãã ããããžã§ã¯ãèšå®ã»ãã«ãåšãã®ç¥èã¯ãç¹ã«iOSã«ã€ããŠãã£ããå¿ èŠã«ãªã£ãŠããŸãããã®éã¯ã以äžã®èšäºãåç §ããã°èŠããèŠç䌌ã§ãªããšããªããšãæããŸãã
åã¯Androidãã€ãã£ãç¥èãã»ãŒãŒãã§ãããFlutterã«ãããAndroidã®ãããžã§ã¯ãèšå®åšãã¯ç°¡åãªã®ã§ããããŸã§ã¡ãã£ãšèª¿ã¹ãã ãã§ã©ãããã解決ã§ããŠããŸãã
ã¢ãã€ã«ã¢ããªéçºã¹ãã«ã¯ãã£ãæ¹ãè¯ã
iOS/Androidãã€ãã£ãåºæç¥èã¯ãããŸã§å¿ èŠãªãã§ãããã¢ãã€ã«ã¢ããªéçºã«é¢ããè«žã ã®ããŠããŠã¯æŽ»ããŠããå Žé¢ãå€ãã§ãããªã®ã§ãçŸå®çã«ã¯iOSãAndroidãã€ãã£ãéçºè ãFlutterãã£ããã¢ããããã®ãã¹ã ãŒãºãªéçã ãšã¯æããŸãã
ãã ããã¢ãã€ã«ã¢ããªéçºçµéšãç¡ããŠããããªãFlutterã«æãåºãã®ã¯ãããïŒããšèããããããã¯ããã§ããã ãšãæããŸããåŠã¶ã¹ãããšããããããã£ãŠãã£ãã倧å€ããã ãšã¯æããŸã(ãœãããŠã§ã¢éçºã¹ãã«å šè¬äŒŒããããªãã®ã§ãã)ãããŸãiOSãAndroidã®ãã€ãã£ãéçºã¹ãã«ã身ã«ã€ããŠããã«ãã¹ããšã¯ãŸã£ããæããŸãããiOS/Androidãã€ãã£ãéçºçµéšãŒãã§ãFlutterã«èå³ãã£ãããŸãFlutterããå ¥ã£ãŠã倧ããªåé¡ã¯ç¡ãã足ããªãç¥èã¯å¿ èŠã«ãªã£ãã¿ã€ãã³ã°ã§å°ããã€åŠãã§ããã°è¯ããšæããŸãã
Dartã£ãŠã©ããªã®ïŒ
å人çã«ãããŸã§ã§äžçªæ°ã«å ¥ã£ãŠããèšèªã§ãã£ãSwiftãšæ¯ã¹ããšã第äžå°è±¡ãšããŠã¯ãã£ãããã¬ãã£ãã«æãéšåããããŸããããä»ã§ã¯ãã£ããæ°ã«å ¥ã£ãŠããŸããèšèªä»æ§åäœã§ã®è©äŸ¡ãšãããããããŒã¿ã«ã®éçºäœéš(è£å®ã»ãã«ãã®éããæšæºããã±ãŒãžã®å å®åºŠã»äœ¿ããããããªã©)ãšããŠããªãæºè¶³åºŠé«ãã§ãã
ã©ã®èšèªã§äœã£ãŠãåé¡ç¡ãç³»ã®CLIããŒã«ãäœãå Žåã«ã©ã®èšèªã§æžããéžã¶éãä»ãªãDartã§æžããããªãšæããããã®æžãå³ã®è¯ããæããŠããŸãã
ããããnullå®å šã§ãªã(解決ã«åããŠå®è£ äž)
ãšã¯ãããæ°ã«ãªãç¹ãããã€ããã£ãŠããã®1ã€ã¯nullableãã©ãããåã§åºå¥ã§ããªã(Swiftã®Optionalçžåœã®ãã®ããªã)ããšã§ãã
å®éãFlutterã¢ããªãæžããŠããŠããã«é¢ãããã¹ãããããŸãããã¹ã«æ°ã¥ãããHot Reload/Restartã§ããã£ãšçŽããã®ã§éçºã¹ããŒãäœäžèŠå ã«ã¯ããŸããªã£ãŠããªãã§ãããäŸãã°éçºäžã«nullã®å Žåã®èæ ®æãã«æ°ä»ãããã°ãä»èŸŒãã ãŸãŸãªãªãŒã¹ããŠããŸãããšãªã©ãããåŸããŸãããªã®ã§ããã¯ãnullã®å¯èœæ§ãæ瀺ãããŠãã®å Žåã®åŠçã匷å¶ããããããªä»çµã¿ã¯ãããšå¬ããã§ãã
ãããŠãããã«ã€ããŠã¯å®è£ äžã¹ããŒã¿ã¹ãšãªã£ãŠããŠå¯Ÿå¿ãçã ãšé²ãã§ããŸããDartã§ã¯ããã non-null by default(NNBD) ãšåŒãã§ããŸãã
å¿ èŠãªèŠä»¶ãèæ ®äºé ãå€ãããããªãªãŒã¹ãšããããã«ã¯ãããªãã§ãããããããé ããªãå°æ¥ãªãªãŒã¹ããããšæåŸ ããŠåŸ ã£ãŠããŸãã
ãŸããåããèŠæãå€ãçŸåšå®è£ äžã®ãã®ãšããŠãStatic Extension Methods(ããããæ¡åŒµã¡ãœãã)察å¿ããããŸãã
ãã®ä»æ°ã«ãªãç¹
ãŸããããäžæºã®å£°ãããããã®ãšããŠãè¡æ«ã»ãã³ãã³ãå¿ é ãªããšãæããããŸããç¹ã«ãã»ãã³ãã³äžèŠã®Swiftã»Kotlinã§ã®ãã€ãã£ãã¢ããªéçºè ãFlutterã§Dartã«è§Šããæã«ããä»ããã»ãã³ãã³æžãã®é¢åã ãåé·ããªã©ãšæããããããšãå€ãã®ããšæããŸããããã¯ç±å¿ãªè°è«ãããã€ã€ããå€æŽå¯Ÿå¿ã®å°é£ããªã©ããæ®å¿µãªãããã³ãã£ã³ã°ç¶æ ãšãªã£ãŠããŸããå人çã«ã¯ãã»ãã³ãã³æžãããšã¯åäœã§ã¯ãããŸã§å«ã§ã¯ãªããã®ã®ãäžèŠãªèšèªãšäº€äºã«æžããšããªã©ã«ç ©ããããæããã®ã§äžèŠã«ãªããšå¬ããã§ããããããå€å€§ãªåŽåãè²»ãããŠãŸã§äžèŠã«ããŠã»ããããšèšããããšåŸ®åŠãªæ°ãããŠããŸãð€
ãã®ä»ãèšèªä»æ§ã®é¢ããèŠãŠãæ®æ®µSwiftãªã©æžããŠãã人ããæ°ã«ãªããããªç¹ã¯ä»¥äžã§ãããããŸã§æ £ã芪ããã§ããèšèªã§åœããåã«äœ¿ã£ãŠããæ©èœãç¡ããšäžäŸ¿ã«æã£ãããããŸãããåã¯ããããããã ãšçŽåŸããªããDartã«ä»ãåã£ãŠããŸãã
- enumã®è¡šçŸåãäœã
- ã¯ã©ã¹å®çŸ©ã®ãã¹ããã§ããªã
- ãã¿ãŒã³ãããã³ã°ãç¡ã
- åãåæ¹ã«å®£èšãã(Swiftã»TypeScriptãªã©ã¯åŸæ¹)
Dartã®è¯ãç¹
ä»èšèªå©çšè ããèŠãŠæ°ã«ãªããã¡ãªç¹ãå ã«æžããŸããããDartã®è¯ãç¹ããããããããŸããåè¿°ã®éããåã¯ããŒã¿ã«ã§ãšãŠãé«ãè©äŸ¡ããŠããŸãã
- async/await(ããããPromiseãšäŒŒãéåæåã®Futuresã®çµæãåæçã«ååŸã§ããæ§æ)ãèšèªæ©èœã«çµã¿èŸŒãŸããŠãã
- Streams(Rxã®ç°¡æçã¿ãããªãã®ã§è€éãªéåæåŠçã«ã¯å¥érxdartããã±ãŒãžäœµçšãå¿ èŠ)ãæšæºããã±ãŒãžã«å«ãŸããŠããŠãFuturesãšã®çžäºå€æãã¹ã ãŒãºã«ã§ãã
- Cascade notation(
..
)ã«ãã£ãŠãããããæ¢åã¡ãœããã»ããããã£ãªã©ãã¡ãœãããã§ãŒã³çã«æ±ãã dartfmt
ãèšèªãšã»ããã«ãªã£ãŠããŠãæžãæ¹ãç°¡åã«æãããã(analysis_options.yamlã«ãã£ãŠçŽ°ããã«ã¹ã¿ãã€ãºãå¯èœ)- æšæºããã±ãŒãžãå å®ããŠããŠãéè¯ããã±ãŒãžãå¿ èŠãªå Žé¢ãå°ãªã
ãŸããMixinãåãã£ãŠããŠããã£ããæ°ã«å ¥ã£ãŠäœ¿ã£ãŠããŸããSwiftã®Protocol Extensionãªã©ãšäŒŒãŠããŸãããæ©èœçã«ã¯ãã£ãŒã«ã(æ ŒçŽåããããã£)ãæãŠãããšã倧ããªéãã§ãã
Dartã®åŠç¿ã³ã¹ãã¯ïŒ
Swiftã»Kotlinã»C#ã»Javaã»TypeScriptãªã©ãã¡ãžã£ãŒãªéçåä»ãèšèªã®ã©ãã1ã€ã§ãæžããã°ãã»ãšãã©å匷ãããšãåã§èªã¿æžãã§ããã¬ãã«ã ãšæããŸãã
æè¿ãªãã¥ãŒã¢ã«ãããå ¬åŒããã¥ã¡ã³ãããããŸãšãŸã£ãŠããŸãã
ãšãããããã£ãšåŠã³ããå Žåã¯ãã¡ãã®ããŒãžãããããã§ãã
ãè¡åããæžãããå Žåã¯Effective Dartã§ãã
ãŸã解ããªããåŠã¹ãããŒãžããã£ãŠåŠç¿ããããã§ãã
ãããããªãDart?
ãã¡ãã«ãããŸãšãŸã£ãŠããŸãã端çã«èšããšåçŽã«æãçžæ§ãè¯ããçŸåšã®Flutterã®é åã¯Dartã®ããããšãèšããŸãã
ãŸããGoogle I/O 2019ã§ã¯Dartã»ãã·ã§ã³ããããFlutterãšçµ¡ããªããã¢ããŒã«ãããŠããŸãããäžè¿°ã®NNBDãšæ¡åŒµã¡ãœããã«ã€ããŠã®è©±ããããŸããã
ãã¶ã€ã³ã¯ãã£ã±ããããªã¢ã«ãã¶ã€ã³ïŒ
Flutterã§ã¯ãããªã¢ã«ãã¶ã€ã³ã«é¢ããWidgetãã»ãŒç¶²çŸ ãããŠããŠããããªã¢ã«ãã¶ã€ã³ããŒã¹ã§çµããšå¹çãè¯ãã®ã¯ç¢ºãã§ãã質ã»éãšãã«å åãªãã®ãæã£ãŠããŠãæ©èœäžè¶³ããã°ã§æ©ãããšã¯çšãªã¯ãã§ãã
ãã ãiOSçšã®Widgetããã£ããå å®ããŠããŠãiOSã£ãœãã¢ããªãããŸãèŠåŽãªãçµããŸãã
ãŸããåºæ¬çãªWidgetãèªç±ã«çµã¿åãããŠããã«ã«ã¹ã¿ã UIãçµãããšãã§ããŸããããããã¯ç»é¢ã«ãã£ãŠããããè²ã çµã¿åãããã®ããã¡ããèªç±ã§ãã
Flutterã§ã¯ãã©ããããã¶ã€ã³ã«ããã«ããŠããèªç±åºŠé«ãå¹çè¯ãçµããŸãããã ãã¯ãã¹ãã©ãããã©ãŒã ã§ããå¹çè¯ãUIå®è£ ãããã®ã§ããã°ããããªã¢ã«ãã¶ã€ã³ã«å¯ãæ·»ãã®ãåŸçã§ãã
äŸãã°ããAndroidäžã§ã¯ãããªã¢ã«ãã¶ã€ã³ã§ãiOSäžã§ã¯iOSã£ãœããã¶ã€ã³ã«ãããããšããã®ã¯ããããèŠæã ãšæããŸããFlutterã§ã¯ãããæ¯èŒçå¹çè¯ãçµããŸããããšã¯ãããã®éœåºŠå¥ãã¶ã€ã³ãçµãã§UIãåºãåãããŠããã«ãã®ç¢ºèªãç¶ç¶çã«è¡ã£ãŠãããšããã®ã¯ããªãã®ã³ã¹ãå¢ã«ã€ãªãããŸãããªã®ã§ããã©ãããã©ãŒã ããšã«UIãå€ããå Žåã¯ã¡ãªããããã®æ±ºããŠè»œããªãã³ã¹ãå¢ã«èŠåããããã¡ããšæ€èšããŠèŠæãæã£ãäžã§è¡ãã¹ãã§ãã
ãŸããä»®ã«ãã®äœåããã£ããšããŠãäŸãã°ããã«Android 10ã»iOS 13ããå°å ¥ãããããŒã¯ã¢ãŒã察å¿(Flutterã§ã察å¿æžã¿)ãªã©ãããããšãªããšç¢ºèªããªãšãŒã·ã§ã³ãã©ãã©ãå¢ããŠãã£ãŠããŸããŸãããã®ããããã©ãåæšéžæããŠãããã®å€æã倧äºã ãšæããŸãã
ã¡ãªã¿ã«ãGoogle I/O 2019ã®ãããªã¢ã«ãã¶ã€ã³ãiOSã»ãã·ã§ã³ã§ãåæ§ã®è©±é¡ã«è§ŠããããŠããŸããã
ãããªã¢ã«ãã¶ã€ã³ã ãšã¢ããªã®åæ§ãåºãã«ããã®ã§ã¯ïŒ
ãããªã¢ã«ãã¶ã€ã³ã«ã¯ãMaterial Themingãšãã£ãŠè²ã圢ç¶ã®ã¢ã¬ã³ãžãªã©ã«ã¹ã¿ãã€ãºãã€ã³ããè±å¯ã«çšæãããŠããŸããããããã¡ããšæŽ»çšããã°ã¢ããªã®åæ§ã¯ãã£ãããšåºããŸãããŸããã¡ã€ã³ç»é¢ã¯ãã«ã«ã¹ã¿ã UIã«ãããªã©è²ã 工倫ã®äœå°ã¯ãããŸãã
ãšããããã§ããŸãšãããšæ¬¡ã®ããã«ãªããŸãã
- ãããªã¢ã«ãã¶ã€ã³ã«çµ±äžãå¹çè¯ã
- ãã©ãããã©ãŒã ããšã«UIãå€ããå Žåã¯ãã®ã³ã¹ãå¢ã«èŠåãããã£ãããšå€æããŠãã
- Material Theming掻çšãäžéšã ãã§ããã«ã«ã¹ã¿ã UIãšããããšãªã©ã§ã¢ããªã®åæ§ã¯å ååºãã
æ¢åã¢ããªãšã®çµã¿åããã¯ã§ããïŒ
Flutterã¯ãæ¢åãã€ãã£ãã¢ããªã«éšåå°å ¥ããããšãå¯èœã§ãããã ãããã¬ãã¥ãŒçã®æ©èœã§ãã
ãŸãå人çã«ã¯çµã¿åãããéã®ã¡ãªãããããã®ç¹ãåããéšåã®åä»ããšã«ãããã¡ãªããããã€ããã埮åŠã«æã£ãŠããŠããŸã è©Šããããšããªãã§ãã
ãã ãããŸããã£ãŠãããªäºäŸããããã¡ãããšåãçµãã°è¯ãæ段ã®1ã€ãããããŸãããç¹ã«ã倧ããªãã€ãã£ãã³ãŒãããŒã¹ãæã¡ããŒãããã®äœãçŽãã容æã§ãªãå Žåã¯ããçšåºŠã³ã¹ããããŠã§ããã€ããªããæ§æã«ãã䟡å€ãããããã§ãã
ãŸãéã«ããFlutterã¢ããªã¡ã€ã³ã§ãäžéšãã€ãã£ãã®æ¹ãåããŠããèŠä»¶ã«ã€ããŠã¯ãã€ãã£ãç»é¢ã§åŠçãããããšããã®ã¯äœã®åé¡ããªãã§ããŸãã image_picker ãã©ã°ã€ã³ ã§ã¯ãã€ãã£ãã®åçããã«ãŒç»é¢ã衚瀺ããããåæã§åœããåã®ããã«ãªãããŠããããæ¹ã§ãã
Flutterã¢ããªã«ãã€ãã£ãUIãéšåçã«åã蟌ããïŒ
ãã€ãã£ãUIã«ãã«ã¹ã¯ãªãŒã³ã§é·ç§»ãããŠäžéšã®ã¿ã¹ã¯ãä»»ããã®ã¯äžè¿°ã®éãæ®éã«ã§ããŸãããããã«Flutterã¢ããªã«ãã€ãã£ãUIãéšåçã«åã蟌ãããšãå¯èœã§ã(ãã ããŸã ãã¬ãã¥ãŒæ©èœã§ã)ãæšå¹Žæ«ã®Flutter Live ã§ç®çã®ã¢ããããŒãã®1ã€ãšããŠçŽ¹ä»ããããã®ã§ãã
次ã®ããã«Flutter UIã®äžèŠçŽ ãšããŠãã€ãã£ãã®Google MapsãWebãã¥ãŒãåã蟌ãçšéãæå³ãããŠããŸãããããã§ãããšUIäžã®å¶çŽãããªãæžããŸããã
Build your Own Plugin using (PlatformViews) â Flutter
Flutter 1.0 announced PlatformViews
medium.com
ãããå©çšããŠãARKitãARCoreãFlutterã§å©çšããéçºè ãåºãŠããŠããŸã(å ¬åŒå¯Ÿå¿ã®IssueããããŸãã)ã
ãã ããã®æ©èœã¯ãã¬ãã¥ãŒçã§ãã£ãŠãŸã åäœãå®å šã§ã¯ãªããããã«ãã®æ©èœãæå¹åãããšä»ã®éšåã«ãæªåœ±é¿ãåãŒãããšãããã€ãå ±åãããŠããŸã(ãã¡ãã®Issueãªã©)ãããã©ã«ãã¯ç¡å¹ã«ãªã£ãŠããŸããããã¬ãã¥ãŒçã®éã«æå¹åããã¢ããªããªãªãŒã¹ããéã¯ãã®ãããã®ãªã¹ã¯ãå ¥å¿µã«ãã§ãã¯ããæ¹ãè¯ãã§ãã
Firebaseã¯äœ¿ããïŒ
ããããªäœ¿ããŸã ð åãGoogleãéçºããŠããã ããã£ãŠããã€ãã£ãSDKãã©ããããé«å質ãªå ¬åŒãã©ã°ã€ã³ãã»ãŒãã«æ©èœã§æã£ãŠããŸãã
FlutterFire ãšããååã§ãã®ããã«äžèŠ§ãããŠããŸãã
Google I/O â19ã®Firebase ML Kitã®ãã¢ããå®ã¯ã¢ããªã¯Flutterã§çµãŸããŠããŸããð¯
ãã ãå¿ ããããã¹ãŠã®æ©èœã䜿ããããã§ã¯ãªããææ°æ©èœãžã®è¿œåŸã¯ã¯ã³ãã³ãé ããå ŽåããããŸããããã©ãããŠãããã«æªå¯Ÿå¿ã®ææ°æ©èœã䜿ãããå Žåã¯ããã®éšåã ãèªåã§æžããŠãã®ã(ãããã¯ããããããšãããŠããéå ¬åŒãã©ã°ã€ã³ãèŠã€ããŠãã)ãšããããšãã§ããŸãã
ãŸããåé ã§è»œã觊ããfor webããã¹ã¯ãããã¢ããªçšãšããŠã¯ãäžå¿ä»¥äžãå©çšã§ãããã§ãããç€ç³ãªiOSã»Androidãšæ¯ã¹ãŠããå¶éããã£ãããããã§ãããŸããå¥ããã±ãŒãžãšããããšã§å ±éåããã«ã¯çŸç¶ã§ã¯ã¢ããªéçºè èªèº«ã工倫ããå¿ èŠããããŸãã
- AngularDartçšãæ³å®ããŠäœãããŠããfirebaseããã±ãŒãž (æºå ¬åŒãããã®äœçœ®ã¥ãã«èŠãã)
- Firebase iOS SDKã®macOSå¯Ÿå¿ ãããã®ã§ãããã©ãããããã©ã°ã€ã³äœãã°macOSäžã®Flutterã¢ããªã§FirebaseåãããïŒ
FirebaseãFlutteräžã§webã»ãã¹ã¯ãããå«ããã¯ãã¹ãã©ãããã©ãŒã ã§å©çšã§ããããã«ãã察å¿ã«ã€ããŠã¯ãã¡ãã§è°è«ãããŠããŸãã
ã¢ããªå 課éã¯ã§ããïŒ
Google I/O 2019ã§Flutter 1.5ã®ã¢ããŠã³ã¹ããªãããŸãããããã®ç®çã®ã¢ããããŒãã®1ã€ãã¢ããªå 課é察å¿ã®å ¬åŒããã±ãŒãž(in_app_purchase)ã§ããã
the most requested new feature in Flutter 1.5 is the In-App Purchase plugin, which is now available in beta for Android and iOS.
ãããŸã§ãéå ¬åŒã®ã¢ããªå 課éããã±ãŒãžã¯ãããŸãããããã¡ããèªåã§ãã®åŠçãæžãããšã§ã©ããšã§ãã§ããŸããããå ¬åŒããã±ãŒãžãçšæããããšããã®ã¯ãšãŠãå®å¿æãããŸãã
ãšããããã§åçãšããŠã¯ã以åããã§ããã1.5ã§å ¬åŒããã±ãŒãžãæäŸãããã®ã§ããç°¡åãã€å®å¿ããŠå¯Ÿå¿ã§ããããã«ãªã£ãããšããããšã§ããå人çã«ã¯è¿ããã¡ã«ä»éçºäžã®ã¢ããªã§äœ¿ã£ãŠã¿ãäºå®ãªã®ã§ã楜ãã¿ã§ãã
ãªãªãŒã¹æžã¿ã®ã¢ããªã«å¯ŸããŠã®åçãªã¢ããããŒã(Code Push)ã¯ã§ããïŒ
Flutterã¯just in time(JIT)ã³ã³ãã€ã«ã§ãåãã®ã§ãCode Push察å¿ãšã®çžæ§ã¯è¯ãæè¡çã«ã¯å¯èœã§ãããçŸåšæªå¯Ÿå¿ã§ããŸã察å¿äºå®ããã³ãã£ã³ã°ç¶æ ã§ãã
ãŸããä»®ã«å¯Ÿå¿ãããŠããApp Storeäžã®iOSã¢ããªã«å¯ŸããŠå®éã«è¡ããšã¬ã€ãã©ã€ã³éåã«ãªãã®ã§ã¯ãšè°è«ãããŠããŸãããã ãããããAndroidã¢ããªã®Google Playã§ã¯åé¡ãªããããªã®ãšãã¹ãã¢ä»¥å€ã®æ¹æ³ã§é åžããŠããã«å¯ŸããŠã¢ããããŒããããããšããèŠæãæµ·å€ã§ã¯ãã£ãããã£ããããããã§ããã®å¯Ÿå¿ãåæããŠããFlutterãŠãŒã¶ãŒããã£ããããããã§ãã
æ¬ç©ã®ãã€ãã£ãã¢ããªãšæ¯ã¹ãŠå®éã©ãïŒ
Flutterã¯ç¬èªæç»æ¹åŒã§ããã€ãã£ãUIã³ã³ããŒãã³ãã¯äœ¿ã£ãŠããªãããããããš100%äžèŽãã觊ãå¿å°ãæäŸããã®ã¯åççã«ãšãŠãé£ããã§ãã(ç¹ã«iOSã®å Žå)æ¬ç©ã®ãã€ãã£ãã¢ããªãšã¯éããã®ã«ãªã£ãŠããŸãããšã¯åŠããªãã§ãã
ãã ãããã¯ãããŸã§ãã€ãã£ããš100%äžèŽãããã©ãããšãã芳ç¹ã§ãã£ãŠãäžè¬ãŠãŒã¶ãŒãéåæãæã€ãã©ããã¯ãŸãå¥åé¡ã§ããå人çã«ã¯ãFlutterã§äžè¬ãŠãŒã¶ãŒããã€ãã£ãã¢ããªãšåºå¥ä»ããªãçšåºŠã®ã¢ããªãäœãããšã¯ååå¯èœã ãšæã£ãŠããŸããããããFlutterã®çç£æ§ã®é«ãæ ã«ãåãæéã§ãã€ãã£ãã¢ããªä»¥äžã®ãŠãŒã¶ãŒäœéšãæäŸããããšãã§ãããšãæã£ãŠããŸãã
ã(ç¹ã«iOSã®å Žå)ããšæžããã®ã¯ãåãGoogleãAndroidãFlutterãéçºããŠãããããAndroidãã€ãã£ãã¢ããªã®ãã£ãŒã«ãFlutterã§åçŸããããããã§ããå®éãåã¯ãã€ãã£ãAndroidã¢ããªãšFlutterã¢ããªãå€å¥ããããšãã§ããŸãã(iOSã§ã¯ããçšåºŠå€å¥ã§ããŸã)ããã®ãããã以äžã«ã詳ãã觊ããŸããã
ããããã¯ãã¹ãã©ãããã©ãŒã ãã¬ãŒã ã¯ãŒã¯å šè¬ã«è¯ãå°è±¡ãç¡ãã®ã ãã©ïŒ
äžèŠè¯ãããšã°ããã®ããã«èŠããã¯ãã¹ãã©ãããã©ãŒã ãã¬ãŒã ã¯ãŒã¯ã«ç¡éã«é£ã³ã€ããã«çã£ãŠãããã®ã¯è¯ãããšã ãšæããŸãããåããã®ã¹ã¿ã³ã¹ã§ããéã«ãåãéå»ã®äžéšã®äºäŸãå ã«æèåæ¢ããŠå šåŠå®ããã®ãé¿ããã¹ãã ãšèããŠããŸãã
éå»ã®ã¯ãã¹ãã©ãããã©ãŒã ãã¬ãŒã ã¯ãŒã¯å šè¬ãã¹ãŠã倱æããŠããããã§ã¯ãªããååããŸããã£ãŠããã®ããããŸãããåã¯å ¥å¿µãªæ¢æ±ãããäžã§Flutterã¯ãšãŠãçãè¯ããšè©äŸ¡ããŠå®å¿ããŠäœ¿ã£ãŠããŸãã
iOSã®Bitcode察å¿ã¯ã§ããŠããïŒ
å ã Bitcode察å¿ã§ããŠãããããã£ãã倧ããªããã¯ã ãšæã£ãŠããŸããã2019幎å€é ã«å¯Ÿå¿ãããŸããð 2019幎9æã®Stable channelã®ãªãªãŒã¹ã®v1.9.1ã«å«ãŸããŠããŸãã
Flutterã§watchOS/tvOSã¢ããªã¯çŸç¶äœããªãã§ãããBitcodeé察å¿ã ãšFlutterã§iOSã¢ããªãçµãã å Žåã«ãããã«ãã€ãã£ãã®watchOSã¢ããªã足ãããšããã§ããªãã®ã§ã察å¿ãããŠè¯ãã£ãã§ãããã ã2019幎10ææç¹ã§ã¯ãŸã experimentalçãšããæ±ãã«ãªã£ãŠããŸãã
ãã®ä»ãã€ãã£ãã«æ¯ã¹ãŠäžå©ãªç¹æããŠ
以äžãFlutterã®åççã«å³ããããªãã®ãåçŽã«çŸæç¹ã§æªå¯Ÿå¿ããã®å¶çŽã玹ä»ããŠãããŸããIssue詳现㮠ð ã®æ°ãåªå 床ã«å å³ãããã®ã§ãæ©ã解決ããŠã»ãããã®ãããã°ã©ãã©ãæŒããŠãããŸããã ð
UIã®é¢ä¿ãããããªãã€ãã£ãæ©èœã掻çšã§ããªãããšãå€ã
äŸãã°ããã¹ã¯ãŒãèªåè£å®æ©èœã䜿ããŸããããããããUIã®çŽ°ãããšããã«è¿œåŸããã®ã¯ããé£ããã ãšæããŸãã
[2020/06/14 è¿œèš] autofillHints ãè¿œå ãããŸãã(çŸstableææ°ã®v1.17ã«ã¯æªãªãªãŒã¹)
ãã ããäžéšæ©èœã«ãŸã å¶éãããããã§ãã
åæ§ã«ãiOSã®3D Touchã®peek/pop察å¿ãããã€ãã£ãUIãå¯æ¥ã«çµ¡ãã®ã§é£ãããã§ããå§åæ€ç¥ã¯åé¡ãªãã§ããã®ã§ã䌌ãUIãFlutteråŽã§æäŸããããšã«ãªãæ°ãããŸãð€
â [2019/09/12 è¿œèš] ãŸãã«ããããããã±ãŒãžã§ãã peek_and_pop ãç»å ŽããŸããããã ãiOS 13ã®Context Menusã«è¿œåŸãããŠããŸããã
äžæ¹ãåã3D Touchã§ãã¯ã€ãã¯ã¢ã¯ã·ã§ã³ã¯å ¬åŒããã±ãŒãžãæäŸãããŠããŸããããã¯ã¯ã€ãã¯ã¢ã¯ã·ã§ã³ã¯ã¢ããªã®å€ã§ãªãããã¢ããªåŽã¯ã©ã®ã¢ã¯ã·ã§ã³ãéžæããããã®æ å ±ãããšã«é©åãªãã³ããªã³ã°ãããã ãã§æžãããã§ãã
ã¢ããªãµã€ãºãå°ã倧ãããªã
How big is the Flutter engine? ã«2018幎12ææç¹ã§ã®æå°éã®ã¢ããªã®èšæž¬çµæãèŒã£ãŠããŸã(åãã¢ããªããã€ãã£ãã§ã©ããªããã¯äžæã§ã)ã
ã¢ããªãµã€ãºã®ç¢ºèªãšããŠãããŸã«ãã¹ãã¢ã«ã¢ããããŒããããã€ããªãµã€ãºãªã©èŠãŠãµã€ãºãããªã倧ãããšèª€è§£ããŠããäŸãèŠãããŸããããã®ããšã¹ãã¢äžã§é ä¿¡ãããŠãŠãŒã¶ãŒãããŠã³ããŒãã»ã€ã³ã¹ããŒã«ãããŸã§ã®éçšã§å å·¥ãããã®ã§ããã¡ããšã¹ãã¢ã®ã¢ããªãµã€ãºè¡šç€ºãªã©ã§ãã§ãã¯ããå¿ èŠããããŸãã
æ¥æ¬ã¯éä¿¡ç°å¢ãè¯ããäžèŠæš¡ä»¥äžã®ã¢ããªã ãšæ°åMBãçŸMBè¶ ããããåœããåãªã®ã§ãäžã®ãããªã¡ãã£ãšããäžä¹ãããã£ãŠã蚱容ã§ããããšãã»ãšãã©ã ãšæããŸããéä¿¡ç¶æ³ãæªãå°ãã§ãã¢ããªãµã€ãºãäžããããšãã€ã³ã¹ããŒã«å¢ã«ç¹ãããããªåœã§ã¯å€å°ããã¯ã«ãªã£ãŠãããããããŸããã
ããã©ãŒãã³ã¹
倧æµã®ã¢ããªã§ã¯åé¡ã«ãªããªãçšåºŠã«ã¯é«éã«ããžãã¯ã®åŠçããã³ãã«ãã«UIæŽæ°ãã§ããFlutterã§ããããã¯ããã€ãã£ãã«æ¯ã¹ããšå°ãã ãé ãã§ãã
ãªã®ã§ãããã©ãŒãã³ã¹æåªå ã®ã¢ããªã§ã¯äžåãã§ãã
ãã ããçŸå®çã«ã¯ãããŸã§åžžã«æé«ã®ããã©ãŒãã³ã¹ãå¿ èŠãªã¢ããªã¯ãšãŠãçšã§ãããå¿ èŠãªæã«ãã©ãããã©ãŒã ãã£ã³ãã«ã§ãã€ãã£ãã«ä»»ãããããããã¯Isolateã§å¥ã¹ã¬ãã掻çšãããã§æžãããšã倧åã ãšæããŸãã
ããããããã§ã«Flutterã觊ãå§ãããããã®æ¹å¯Ÿè±¡ã®å 容ãšãªããŸããã§ã¯ãåŒãç¶ãã€ãã€ããšæžããŠãããŸã(çŸæç¹ã§2é ç®ã§ããäœãæãã€ããã足ããŸã)ã
Widgetã®ãã¹ããæ·±ããªãã®ãããã¯ã§ã¯ïŒ
Flutterã®Widgetã®ãã¹ããæ·±ããªããã¡åé¡ãããèããŸããããåé¡ããšåŒã¶ã®ã¯å°ãäžé©åãªæ°ãããŠããŸãã
ãŸããFlutterã«ãããŠWidgetã®ãã¹ããæ·±ããªã£ãŠããããã¹ããæ·±ããªã£ãŠããã«å¿ããŠå¯èªæ§ã»ã¡ã³ããã³ã¹æ§ãå°ããã€äžãã£ãŠããã以å€ã®å®å®³ã¯ãŸã£ãããããŸãããXMLã»HTMLãªã©ã§ã¿ã°ã®ãã¹ããæ·±ããªã£ãŠããã®ãšã»ãŒåçã®ç¶æ ã§ãã
次ã®ã¹ã¯ã·ã§ã¯ãiOSã¢ããªã®UIå®çŸ©ãã¡ã€ã«(xibãã¡ã€ã«)ã§ããããã®ããã«ããããUIå®çŸ©ã«ã¯ãã¹ããä»ããŸãšãããšãå€ããFlutterãªãã§ã¯ã®åé¡ã§ã¯ãããŸãã(ããããUIå®çŸ©ãWidgetã®ãã¹ãã§è¡šçŸããŠããã®ã§ãã¹ããæ¯èŒçå¢ããããé¢ããããŸãã)ã
Flutterã®å ŽåãDartã³ãŒãã§ãã¹ãŠèšè¿°ããæ
ã«ãé£ç¶ãã if
æãéåæåŠçã®ã³ãŒã«ããã¯å°çãªã©ã§ãã¹ããæ·±ããªã£ãŠããžãã¯ã®è€éæ§ãå¢ããŠããŸãã®ãšäŒŒããããªæèŠã§æããŠããŸã£ãŠããããã«èŠåããããããšããããŸããããããšã¯å
šãã®å¥ç©ã§ãã
ããã¹ããæ·±ããªã£ãŠããã«å¿ããŠå¯èªæ§ã»ã¡ã³ããã³ã¹æ§ãå°ããã€äžãã£ãŠããã以å€ã®å®å®³ã¯ãŸã£ãããããŸããã
ããçšåºŠãŸã§Widgetã®ãã¹ããéãªãããšã¯åé¡ãããŸãããããšã¯ãããã®æ°ãå€ããªã£ãŠãããšãã¯ãæ±ãã«ãããªã£ãŠãããŸããXMLãªã©ã§UIãå®çŸ©ããå Žåãè€éãªãã¥ãŒã³ã³ããŒãã³ããåãåºããŠåçŽåããŠãããŸãããFluterã§ãåæ§ã®ããšãããã°è¯ãã ãã§ããããã«ãFlutterã¯ã³ãŒãã§UIãè¡šçŸããŠãããæ ã«ãã®åãåºãäœæ¥ããšãŠããããããã§ãããŸããäžè¿°ã®éããããžãã¯çã«è€éæ§ãå¢ããŠããããã§ã¯ãªãã®ã§ãã»ãšãã©æ©æ¢°çã«ãªãã¡ã¯ã¿ãªã³ã°ã§ããããšããã€ã³ãã§ããããžãã¯ãè€éã«çµ¡ã¿åã£ãŠãããããªè€éæ§ã解æ¶ããå Žåã¯å®å šã«ãªãã¡ã¯ã¿ãªã³ã°ããããã«ã¯é«ã察å¿ã³ã¹ããããããŸãããFlutterã®Widgetã®ãã¹ããæ·±ãç¶æ ã¯åºæ¬çã«ãããšã¯éããŸãã
ãã®ããããŸãã¯é©åœã«ãã¿æžãããŠãããšã§é©å®ãªãã¡ã¯ã¿ãªã³ã°ããŠãã¹ããæžãããŠä»åŸåŒããããããããšããã®ãããã§ãåãããããæžãæ¹ãããããšããããããŸãã
ãã¹ã解æ¶ã¯ãå ·äœçã«ã¯æ¬¡ã®ããã«è¡ããŸãã
- (ãã©ã€ããŒã)ã¡ãœããã«åãåºã(
_buildXxx(...)
ãšããåœåããªã¹ã¹ã¡) - å¥Widgetã«åãã
- ããžãã¯ãåãã(ã¡ãœããã«åããã®ãç°¡åã ããããžãã¯åŠçãæ ãã¯ã©ã¹ã«ç§»è²ããã®ããã¿ãŒ)
ãã¹ã解æ¶èŠ³ç¹ã§ã¯ãã¡ãœããã«åãåºããšå¥Widgetã«åããã®ã¯åçã§ããã次ã®ãããªå Žåã¯å¥Widgetã«åãåºãã®ãè¯ãã§ãã
- å ±éçã«äœ¿ãWidget
const
ã®Widgetã«ããããšã§ãªãã«ããæžãããŠããã©ãŒãã³ã¹åäžãã¯ãããã
åŸè ã«ã€ããŠã¯ä»¥äžã®èšäºã«è©³ããæžããã®ã§ã芧ãã ããã
ã¡ãœããåãåºãã®æ¹ãç°¡åã§å°åããå©ããããã®ã§ãããã§æžãå Žåã¯ããã§è¯ããšæããŸãã
Android Studioã§ã¯Flutter Outlineã«ãŠbuildã¡ãœãããªã©ã®æ§é ãææ¡ã§ããŸãããåã¯æ¯èŒçè€éãªç»é¢ã§ã以äžã®äŸçšåºŠã«åãŸãããã«ããŠããŸãã
(äžè¿°ã®éãå®è£
äžã¯ãã¹ãããã£ãšæ·±ããªãããšããããŸãããä»äžãã®äœæ¥åŸã«ãã®çšåºŠãŸã§ãã£ãããããããã«ããŠããŸãã)
Flutterã®channelã¯ã©ãããªã¹ã¹ã¡ïŒ
Flutterã¯éçºè ãä»»æã®channelãéžãã§éçºãé²ããããšãå¯èœã§ãã
以äžã®4çš®é¡ãããŸãã
- master: ææ°ã»äžå®å®
- dev: ãã¹ãæžã¿ã®ææ°ããŒãžã§ã³ãåºæ¥æ¬¡ç¬¬æµããŠãã
- beta: æ¯ædevããæè¯ã®ç¶æ ã®ãã®ãžè¿œåŸ(Bad-Builds ãæµããŠããªãããã«ã±ã¢ãããŠãã)
- stable: ååæããšç®å®ãããã«å®å®çããªãªãŒã¹ããã(èŽåœçãªäžå ·åã«ã€ããŠã¯hotfixãªãªãŒã¹ãè¿œå ã§ãããŸã)
éåžžã¯stableãéžæããã®ãè¯ãã§ãããŸã ãªãªãŒã¹åã®ã¢ããªãªã©ã§ææ°çããªãã¹ãæ©ãã¬ã·ã¬ã·äœ¿ã£ãŠãããããšããå Žå㯠dev
ãªã©ãããã§ãåããããéžã¶ããšãã¡ããã¡ãããããŸãããã ããã°ããã£ãæã«èªåãã¡ã®ãã¹ãªã®ãææ°channelããã®äžå
·åãªã®ãåããã«ãããªããªã©åŒå®³ãããã®ã§ããã¯ãstableãåžžã«ç¡é£ãªéžæè¢ã§ã¯ãããŸãã
å··ã®ããã±ãŒãžããstableã«åŸããããªããªã·ãŒã®ãã®ãå€ããäŸãã°Flutterã«ç Žå£çå€æŽããã£ãŠstableãšdevãªã©ã§åãã³ãŒãã«å·®ãåºãéã¯stableãåªå ãããããšãå€ãã¯ãã§ãããã¡ããšã¡ã³ããã³ã¹ãããŠããããã±ãŒãžã§ããdevã䜿ã£ãŠããå Žåãåãæ¥ãforkããŠèªåã§ããã£ãšå¯Ÿå¿ãããªã©ã®é¢åããšãå¢ãããããŸãã
é·ããªããŸããã以äžã§ããé©å®è¿œèšããŠãã£ãããé·ããªã£ããããã¯ã¯å¥èšäºãšããŠåãåºãããããªããæŽæ°ããŠããããšæã£ãŠããŸãã