ãã®ãªãªãŒã¹ã¯ãè¿å¹Žç§ã«ãšã£ãŠæã泚ç®ã«å€ãããªãªãŒã¹ã®1ã€ã§ãã誰ãé©ããªãæ°ãããŠã£ãžã§ããã®ç»å Žã ãã§ãªããæ·±å»ãªã€ã³ãã©ã¹ãã©ã¯ãã£ã®å€æŽãæ°ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®éçšãµããŒãã«ãããç§ãã¡ã¯åé²ããŠããŸããã»ãã®å§ãŸãã§ãïŒ
Flutter1.22ã®æ°ããããŒãžã§ã³ã«ç²Ÿéããããã«é転ããŸããã
iOS14ããã³Android11ãåºç¯å²ã«ãµããŒãããFlutterã®ææ°ãªãªãŒã¹ãçºè¡šã§ããããšãå¬ããæããŸããFlutter1.22ã¯ã以åã®ãªãªãŒã¹ã§ç¢ºç«ãããåºç€ã®äžã«æ§ç¯ãããŠãããéçºè ã¯åäžã®ã³ãŒãããŒã¹ããè€æ°ã®ãã©ãããã©ãŒã çšã®é«éã§çŸãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãäœæã§ããŸããååæããšã«å®å®ãããªãªãŒã¹ã«ã¯ãæ°æ©èœãããã©ãŒãã³ã¹ã®åäžããã°ä¿®æ£ãå«ãŸããŠããŸãã
æè¿ãã¢ãã€ã«OSã®æ°ããããŒãžã§ã³ããªãªãŒã¹ãããŸããããã®FlutterãªãªãŒã¹ã§ã¯ãAndroid11ãšiOS14ã®ããã©ãŒãã³ã¹ãåäžãããããšã«éç¹ã眮ããŠããŸãã
iOS 14ã®ãã©ãã¿ãŒã¢ããããŒãïŒæ°ããXcode 12ã®ãµããŒããæ°ããã¢ã€ã³ã³ãAppClipsã®ãµããŒã-AndroidçšInstantAppsã®ã¢ããã°ã
Android11ã®ãã©ãã¿ãŒã¢ããããŒãïŒãã£ã¹ãã¬ã€ã®ããŸããŸãªã¿ã€ãã®ã匷æãã®ãµããŒããè¿œå ããããœããããŒããŒããåŒã³åºããšãã®ã¢ãã¡ãŒã·ã§ã³ãããã¹ã ãŒãºã«ãªããŸããã
ãã®ãªãªãŒã¹ã¯ãããŒãžã§ã³1.20ã®ãªãªãŒã¹ããããã2ãæåŸã«ãªãªãŒã¹ãããŸããããã®çãæéã§ãã3024ã®åé¡ãã¯ããŒãºãã197ã®å¯çš¿è ããã®1944ã®PRãåçµããŸããã
解説
ã¡ãªã¿ã«ãFlutterã®å¯çš¿è ã«ãªããããšãã£ãšæã£ãŠããããã©ãããå§ããã°ãããããããªãå Žåã¯ãããã«ããã€ãã®ãã³ãããããŸããåªããæåã®è²¢ç®ã¿ã°ã§åé¡ããã£ã«ã¿ãªã³ã°ããŸããæã ãèå³æ·±ãåé¡ãããã«è¡šç€ºããããªãŒãã³ãœãŒã¹ãžã®æ ãå§ããããšãã§ããŸãããŸããæ°ããæ©èœã¿ã°ã§åé¡ããã£ã«ã¿ãªã³ã°ããããšã§ã誰ãã®å€¢ã®æ©èœãå®è£ ã§ããŸããåå¿è ã§ãããºã«ããããŸãããã¬ãŒã ã¯ãŒã¯ã®æŽå²ã®äžã§ããªãã®ååãäžæ» ã«ããããšãã§ããŸã-ãã¡ãããFlutterããŒã ã®éçºè ããã®ãããªæ©èœãå®è£ ããããšã«åæããå Žåã
æ°ããã¢ãã€ã«OSããŒãžã§ã³ã®ãµããŒãã«å ããŠãæããªã¯ãšã¹ãã®å€ãAndroidæ©èœã®1ã€ã®ãã¬ãã¥ãŒãªã©ãä»ã®ãã¥ãŒã¹ããããŸãã
- ç¶æ
ã®å埩ã
- ãã¿ã³ã®æ°ãããå®å®ãçŽ æã
- ããããªããŒããšé£æºããŠãããŒã«ãªãŒãŒã·ã§ã³ãšåœéåããµããŒãããæ°ããã©ã€ãã©ãª
- æ°ããããã²ãŒã¿ãŒã
- ãã©ãããã©ãŒã ãã¥ãŒã®å®å®ããŒãžã§ã³ïŒGoogleãããããã³WebViewãã©ã°ã€ã³ã®ããŒã¹ïŒã
- ã³ãŒãã«è¿œå ããŠãé«é »åºŠãã£ã¹ãã¬ã€ãåããããã€ã¹ã§ã®ã¹ã¯ããŒã«ãæ¹åã§ããã¹ã€ããã
ãŸããã¢ããªã±ãŒã·ã§ã³ã®ãµã€ãºãåæããããã®æ°ããããŒã«ããããŸããããã«ãéçºè ã¯ããã©ã°ã€ã³æ§æã§ã¿ãŒã²ãããã©ãããã©ãŒã ãæ瀺çã«æå®ããããšã«ãããå¿ èŠãªãã©ãããã©ãŒã ã®ã¿ã®ãã©ã°ã€ã³ãäœæã§ããããã«ãªããŸããã
IOS14ã¿ãŒã²ãããã©ãããã©ãŒã
ã¢ãã€ã«OSã®æ°ããããŒãžã§ã³ãçºè¡šããããã³ã«ã培åºçã«ãã¹ãããŸããFlutterãšãã®ããŒã«ã®åäœã«åœ±é¿ãäžããå¯èœæ§ã®ããéäºææ§ãå€æŽãæ¢ããŸãã
iOS 14ã®å ŽåãFlutterã«ããã€ãã®å€æŽãå ããŠãéçºè ãæããšããã«æ©èœããããã«ããŸããã
- Xcode12ã«ã¯iOS9.0以éãå¿
èŠãªãããããã©ã«ãã®ãã³ãã¬ãŒãã§ãã©ãããã©ãŒã 8.0ã§ã¯ãªã9.0ãæå®ãããããã«ãªããŸããã
- Flutter 1.22ã¯ãç¹å®ã®iOS14ã®ã¯ã©ãã·ã¥ãšãã©ã³ãã¬ã³ããªã³ã°ã®åé¡ãä¿®æ£ããŸãã
- ç©çããã€ã¹ãžã®ãããã€ã«é¢ããåé¡ïŒã¢ããªã±ãŒã·ã§ã³ãããã€ã¹äžã§å®è¡ãããªãã£ã-ãšãã¥ã¬ãŒã¿ãŒäžã§ã®ã¿ïŒãFlutter1.20.4ã§ä¿®æ£ãããŸããã
- , , , Flutter Flutter 1.20.4.
- Flutter iOS 14 ( , Flutter-).
ããã ã©ã€ã³ïŒiOSã®14ã¯ããªãã®ãã©ãã¿ã¢ããªã®ããã®ã¿ãŒã²ãããã©ãããã©ãŒã ã§ããã°ãç§ãã¡ã¯åŒ·ããããªãããã©ãã¿ãŒ1.22ã§ãããåæ§ç¯ããããšããå§ãããŸããšiOS 14ãšã®ãããã®ããæé«ã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããã«ãä»ã®App Storeã«ãããã€
ãªã©ã®è©³ããæ å ±Add-to-Appããã£ãŒããªã³ã¯ãããã³éç¥ã«é¢ããããã€ãã®èãã«ã€ããŠã¯ãflutter.devã«ããiOS14ã®ããã¥ã¡ã³ããåç §ããŠãã ããã
ãããšã¯å¥ã«ãæ°ããiOS SF Symbolsãã©ã³ãã®æŽæ°ããããµããŒãã«ã€ããŠèª¬æããããšæããŸããããã«ãããcupertino_iconããã±ãŒãžã®æŽæ°ã«æéãè²»ããããã«ãªããŸããã
CupertinoIcons
äŸåé¢ä¿ãæŽæ°ãããšããã«ãæ¢åã®ãŠãŒã¹ã±ãŒã¹ãæ°ããã¹ã¿ã€ã«ã§èªåçã«è¡šç€ºãããŸãcupertino_icons
æ°ããã¡ãžã£ãŒããŒãžã§ã³1.0ã«ãcupertino_icons
1.0ãFlutter1.22ãšäžç·ã«äœ¿çšããŠããå Žåã¯ãCupertinoIconsAPIãä»ããŠçŽ900åã®æ°ããã¢ã€ã³ã³ã«ã¢ã¯ã»ã¹ã§ããŸãã
ã¢ã€ã³ã³ã®å®å šãªãªã¹ãã«ã€ããŠã¯ãcupertino_iconsãã¬ãã¥ãŒããŒãžããã³flutter.devã®ç§»è¡è©³çŽ°ããŒãžãåç §ããŠãã ããã
iOS 14ã®Flutterã§è©Šãããšãã§ãããã1ã€ã®æ©èœã¯ãã¢ããªã¯ãªããã§ãã AppClipsã¯iOS14ã®æ°æ©èœã§ãããããã¯ãæ倧10MBã®ããã¢ããªã±ãŒã·ã§ã³ã§ãã AppStoreããå®å šãªã¢ããªã±ãŒã·ã§ã³ãããŠã³ããŒãããªããŠãããŠãŒã¶ãŒã¯ç¹å®ã®æ©èœã«ã¢ã¯ã»ã¹ã§ããŸãã FlutterããŒãžã§ã³1.22ã¯ãäºåçãªå®è£ ã§AppClipsã䜿çšã§ããŸãã
ãã©ãã¿ãŒã®ã¢ããªã¯ãªãã
Flutterã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®ã¢ããªã¯ãªãããäœæããæ¹æ³ã®è©³çŽ°ã«ã€ããŠã¯ãflutter.devã®ããã¥ã¡ã³ããåç §ããŠãã ããããµã³ãã«ã®ç°¡åãªãããžã§ã¯ããåç §ããŠãã ããã
ã³ã¡ã³ã
Androidçšã€ã³ã¹ã¿ã³ãã¢ããªãèŠããŠããŸããïŒAppleã¯2017幎ã埩掻ãããããšã決å®ããåæ§ã®ãœãªã¥ãŒã·ã§ã³ã§ããAppClipsãå°å ¥ããããã§ããããã«ããã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã§ã¯ãªããã¯ãã¹ãã©ãããã©ãŒã ã¢ããªã±ãŒã·ã§ã³ãäœæããŠããå Žåã§ããã¢ããªã¯ãªãããå®è£ ã§ããŸãã
å¶éãå¿ããªãã§ãã ãããã¢ã»ã³ããªã®ééã10MBãè¶ ããå ŽåãAppClips圢åŒã§å®è¡ããããšã¯ã§ããŸãããFlutterã¢ããªã±ãŒã·ã§ã³ã®å Žåãããã¯éåžžã«ç·æ¥ã®åé¡ã«ãªãå¯èœæ§ããããŸãããã ããããã«ã€ããŠã¯èšäºã®åŸåã§åŠç¿ããŸããããã§ã䟿å©ãªããŒã«ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®ãã«ããµã€ãºãç£èŠããæ¹æ³ã説æããŸãã
Android 11
Flutterã®ãã®ãªãªãŒã¹ã¯ãAndroid 11ã®ãªãªãŒã¹ãšã»ãŒåæã«ãªãªãŒã¹ãããŸãããFlutterãã¬ãŒã ã¯ãŒã¯ãšãšã³ãžã³ã¯ãAndroidã®ææ°ããŒãžã§ã³ã§å°å ¥ããã2ã€ã®æ°æ©èœããµããŒãããããã«æŽæ°ãããŸããã
ãŸããFlutterã¯ãAndroidé»è©±ç»é¢ã®åŒ·æãšåãæ¬ ãã®äœçœ®ãããã³ç»é¢ã®äžžã¿ã垯ã³ããšããžãèæ ®ã«å ¥ããããã«ãªããŸããã
䜿çšMediaQueryãšSafeArea APIãããããç°¡åã«ã¯ãªãã¯å¯èœãªé åãã«ããã¢ãŠããç»é¢ã®äžžããšããžã«çéžããŠããªãUIãæžãããšã«ãªããŸããã
ã¢ããªã±ãŒã·ã§ã³ã®è¡šç€ºé åã¯ããµã€ãºãæ¥æ¿ã«å€åããããšã¯ãããŸããããã¹ã ãŒãºã«å€åããŸããã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ãã³ãã¯ãç»é¢äžã®ããŒããŒããšåæããŠã¹ã¯ããŒã«ããŸãã
FAB IssueïŒ19279ã«æ³šæããŠ
ãã ãã-ç»é¢äžã®ããŒããŒãã®è¡šç€º/é衚瀺ã¢ãã¡ãŒã·ã§ã³ããã©ãã¿ãŒã€ã³ã»ãããšåæããªããšããé·å¹Žã®åé¡ãããã¯Android11ã§ä¿®æ£ãããŠããŸãã
以åã¯ãFlutterã³ãŒãããã€ãã£ãAndroidã¢ããªã±ãŒã·ã§ã³ã«æ¿å ¥ããããšãã«ãFlutterãã©ã°ã€ã³ãåå ã§åé¡ãçºçããŠããŸãããFlutterãAndroidãšçµ±åããããã®APIãæžãçŽãããããã®æ¬ ç¹ã®ãªãAPIv2ããªãªãŒã¹ããŸãããããŒãžã§ã³1.22以éãå€ãAPIv1ã®ãµããŒãã¯çµäºããŸãã
Android v1 APIãåŒãç¶ã䜿çšããå Žåãããã¯ããªãã«ãšã£ãŠã®æå³ã§ãã
- æ°ãããã©ã°ã€ã³ã¯ãv1APIãµããŒããªãã§äœæãããŸãã
- ãã©ãã¿ãŒããŒã«æ§æãã©ã°ã
âno-enable-android-embedding-v2
åé€ãããŸããããããçŸåšã®ããã©ã«ãã®åäœã§ãã
- API v1ããŸã 䜿çšããŠããå€ãã¢ããªã¯ããã«ãäžã«éæšå¥šã®èŠåã衚瀺ããŸããããã¯ãæ°ããAndroidãã©ã°ã€ã³APIããµããŒãããããã®ããã¥ã¡ã³ããåç
§ããŠããŸãã
ãããŸã§ã®éãAndroidçšã®APIããŒãžã§ã³1ã«åºã¥ãFlutterã¢ããªããŸã ãæã¡ã®å Žåã¯ãåŒãç¶ãæ©èœããŸãããã ããAPIv2ã察象ãšããæ°ãããã©ã°ã€ã³ã衚瀺ãããå ŽåããããŸããAndroid APIv1ã§ã¯äœ¿çšã§ããŸããã詳现ã«ã€ããŠã¯ãé倧ãªå€æŽã«é¢ããããã¥ã¡ã³ããåç §ããŠãã ããã
, Flutter , . 1.22 , â . App Clips, ( ) , . Android, , , â . .
«»
æ¢åã®ãã©ãã¿ãŒãã¿ã³ã¯èŠæ ããè¯ãã§ãããç¹ã«ã«ã¹ã¿ã ããŒããå¿ èŠãªå Žåã¯ã䜿ãã«ããå ŽåããããŸããããã«ããããªã¢ã«ä»æ§ãæ¡åŒµãããæ°ããã¹ã¿ã€ã«ã®æ°ãããã¿ã³ãå«ãŸããããã«ãªããŸããã
ãããªã¢ã«ã¬ã€ãã©ã€ã³ã«å¯Ÿå¿ããããã«ãFlutter1.22ã«ãã¿ã³ã®æ°ããããŠãããŒã¹ããå°å ¥ããŠããŸãã
ãããªã¢ã«ãã¶ã€ã³ãã¿ã³ã®æ°ããããŠãããŒã¹ã
æ°ãããŠã£ãžã§ãããšããŒãã«æ°ããã¯ã©ã¹åãè¿œå ãããŸããããããªã¢ã«ãã¶ã€ã³ã®ä»æ§ã«äžèŽããããã«ãFlutterã®ã¯ã©ã¹ã®ååãå€æŽããŸããã
æ°ããããŒãã¯ãFlutterãæè¿æ°ãããããªã¢ã«ãŠã£ãžã§ããã«æ¡çšãããæ£èŠåãããããã¿ãŒã³ã«åŸããŸããDartPadã®ãã¢ããŒãžã§ã³
ããã¯ãäºææ§ã«åœ±é¿ããå€æŽã¯ãããŸããããæå³è«ãªããªã
FlatButton
ãOutlineButton
ãRaisedButton
ãButtonBar
ãButtonBarTheme
ãããŠButtonTheme
å€æŽãããŸãããå€ããã¿ã³ãæ°ãããã¿ã³ãšçµã¿åãããŠçµã¿åãããããšãã§ããŸãã
åœéåãšããŒã«ãªãŒãŒã·ã§ã³ã®æ°ãããµããŒã
ã¢ããªã±ãŒã·ã§ã³ãåœéåïŒi18nïŒããã³ããŒã«ã©ã€ãºïŒl10nïŒããããã«å¿ èŠãªã³ã¢æ©èœã¯ãæåããFlutterã§å©çšã§ããŸãããã®ãªãªãŒã¹ã§ã¯ãæ°ããl10næ å ±ãè¿œå ããããšãã«ã¢ããªã±ãŒã·ã§ã³ãæŽæ°ããããã«ãããããªããŒãããµããŒãããŸããã
ããŒã«ã©ã€ãºãããã¡ãã»ãŒãžããã©ã¡ãŒã¿ãŒãæ¥ä»ãæ°å€ãé貚ãå«ãã¡ãã»ãŒãžãªã©ãFlutter l10nã®ãµããŒãã«é¢ãã詳现æ å ±ãå¿ èŠãªå Žåã¯ãFlutterInternationalizationãŠãŒã¶ãŒã¬ã€ãããèªã¿ãã ããã
ãŸããi18nãšl10nã«é¢å¿ãããå Žåã¯ãUnicodeãemojiãªã©ã®åçŽãªå€ãASCIIã«é©åããªãæåãå«ãæååã䜿çšããå¿ èŠãããå ŽåããããŸããããŒãããŒã ã¯æè¿ãã£ã©ã¯ã¿ãŒããã±ãŒãžããªãªãŒã¹ããŸããããã¯ãéçºè ãUnicodeïŒæ¡åŒµïŒgraphemeã¯ã©ã¹ã¿ãŒãæäœããã®ã«åœ¹ç«ã¡ãŸãããã®ããã±ãŒãžã¯ããè±èªã®[è±åœã®æã®çµµæå]ããã¹ããã®ãããªæååãæåã®15æåã«é©åã«ççž®ããæ¹æ³ãªã©ã®åé¡ã解決ããã®ã«åœ¹ç«ã¡ãŸããã¯ã©ã¹ã䜿çšãããš
String
ããã®çç¥åœ¢ã¯ã[British flag emoji] text inãã«ãªããŸããããã¯ããŠãŒã¶ãŒãèªã¿åãå¯èœãª12æåã®ã¿ã§ããäžæ¹ãããã±ãŒãžcharacters
ã䜿çšãããšãæ£ããçç¥åœ¢ãA [British flag emoji] textinEngãã衚瀺ãããŸãã
ãã®PRã§ã¯ã Flutterã¯æåããã¯ã䜿çšããŠãããã®è€éãªæåãæ£ããåŠçããŸããããšãã°
TextField
ãå¶éä»ãmaxLength
ã§äœ¿çšãããšãââ [3ã€ã®çµµæåã®ãã¡ããªãŒ]ãªã©ã®æåã1æåãšããŠæ£ããã«ãŠã³ããããããã«ãªããŸããããŸãããã®PRã§ã·ã³ãã«ããã±ãŒãžã¯ãæåã§è¿œå ããªããŠããFlutterãããžã§ã¯ãã§èªåçã«å©çšã§ããŸããããŸãããã°ãããã«ããããã¹ãŠã®ãã±ãŒã«ã®ãã¹ãŠã®ã¿ã€ãã®æååãç°¡åã«æäœã§ããããã«ãªããŸããã·ã³ãã«ããã±ãŒãžã®è©³çŽ°ã«ã€ããŠã¯ãåªããèšäºãããŒãã§ã®é©åãªæååæäœããã芧ãã ããã
GoogleããããšWebViewãã©ã°ã€ã³ã¯æ¬çªã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããŸã
FlutterããŒã ã§ã¯ãèªåã§ãã¹ããããŸã§ãäœãã«ãæ¬çªç°å¢å¯Ÿå¿ãã®ã©ãã«ãä»ããããšãèŠæããããšããããããŸãã以äžã®å Žågoogle_maps_flutterãšwebview_flutterãã©ã°ã€ã³ãé 延ã®äž»ãªçç±ã¯ãåºç€ãšãªãã«ãããã©ãããã©ãŒã ã¯ããã¥ãŒã®å®è£ ããªãããã©ãã¿ã¢ããªã§AndroidãšiOSã®äž¡æ¹ã®ãã€ãã£ãUIã³ã³ããŒãã³ãããã¹ãããããšãã§ããŸãã Flutterã®ãã®ãªãªãŒã¹ã§ã¯ããããã®ãã©ã°ã€ã³ã®äž¡æ¹ã䜿çšã§ããç¶æ ã«å®£èšããã®ã«ååãªã€ã³ãã©ã¹ãã©ã¯ãã£ã匷åããããšããç¥ããããŸãã
flutter.devã衚瀺ããwebview_flutterãã©ã°ã€ã³Flutter1.22
ã§ã¯ãæ¢ç¥ã®ãã¹ãŠãåé€ãã代æ¿ã®ãã©ãããã©ãŒã ãã¥ãŒå®è£ ãè¿œå ããŸããAndroidãã¥ãŒã§ã®ããŒããŒãã®åé¡ãšã¢ã¯ã»ã·ããªãã£ã®åé¡ãããã¯ãAndroid APIã¬ãã«19以éïŒä»¥åã¯å¿ èŠã ã£ãã¬ãã«20ïŒã§æ©èœããŸãããŸãããã©ãããã©ãŒã ãã¥ãŒãããå¹ççã§ä¿¡é Œæ§ã®é«ããã®ã«ããiOSã¹ããªãŒã ã®æ¹åãè¡ããŸããïŒ
io.flutter.embedded_views_preview
iOSã«ãã©ã°ãè¿œå ããå¿
èŠããªããªããŸããInfo.plist
ïŒã
ãã©ã°ã€ã³
webview_flutter
ã¯æ°ããAndroidãã©ãããã©ãŒã ãã¥ãŒã¢ãŒãããµããŒãããŸãããçŸåšã¯æåã§æå¹ã«ããå¿
èŠããããŸããã³ãã¥ããã£ã§åºãæ®åãããšãããã©ã«ãã§æå¹ã«ãªããŸãã
Google Mapsããã³WebViewãã©ã°ã€ã³ã¯ããã©ãããã©ãŒã ãã¥ãŒã®æ¹åãããã§ã«æ©æµãåããŠããŸãã
ãã©ãããã©ãŒã ãã¥ãŒã䜿çšããŠiOSããã³Androidã§ã«ã¹ã¿ã UIèŠçŽ ããã¹ãããå Žåã¯ãFlutterã¢ããªã®ãã€ãã£ãAndroidããã³iOSãã¥ãŒã
解説
éçºè ã®ç掻ã«é©åœçãªå€åããããããªããã1ã€ã®æ¥œããã€ãã³ããç§ãã¡ã¯ãããã®ãã©ã°ã€ã³ã®äž¡æ¹ãæ¬çªç°å¢ã§é·ãé䜿çšããŠãããåé¡ã¯ãããŸããããçç£æºåå®äºã段éã«å ¥ã£ãŠãããã®ç¶æ³ãå€ãããªãããšãé¡ã£ãŠããŸããYandexMapKitãµããŒãçšã®å ¬åŒãã©ã°ã€ã³ãããã°ãã£ãšå¬ããã§ãããããèµ·ãããŸã§ãæ®ã£ãŠããã®ã¯ãµãŒãããŒãã£ã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããããšã ãã§ãã
ããã²ãŒã¿ãŒ2.0
以åã«Flutterã¢ããªã§ããã²ãŒã·ã§ã³ã䜿çšããããšãããå Žåã¯ãã¡ã€ã³ã®ããŒã¿æ§é ã§ãããŠãŒã¶ãŒãããã²ãŒãããããŒãžã®ã¹ã¿ãã¯ãé衚瀺ã«ãªã£ãŠããããšã«æ°ä»ãããããããŸããã代ããã«ã
Navigator.pop()
ãŸãã¯ãåŒã³åºããŠå¶åŸ¡ãNavigator.push()
ãŸãã
ããŒã ããŒãžã«ãŠã£ãžã§ããã®ãªã¹ãã衚瀺ãããŠãŒã¶ãŒããŠã£ãžã§ããã®1ã€ãã¯ãªãã¯ããŠããã®ç¹å®ã®è²ã®è©³çŽ°ããŒãžã«ç§»åã§ããããã«ãããšããŸãã
次ã®ããã«2ã€ã®ç»é¢ãå®è£ ã§ããŸãã
class ColorListScreen extends StatelessWidget {
final List<Color> colors;
final void Function(Color color) onTapped;
ColorListScreen({this.colors, this.onTapped});
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(title: Text('Colors')),
body: Column(
children: [
// you can see and decide on every color in this list
for (final color in colors)
Expanded(
child: GestureDetector(
child: Container(color: color),
onTap: () => onTapped(color),
),
)
],
),
);
}
class ColorScreen extends StatelessWidget {
final Color color;
const ColorScreen({this.color});
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(title: Text('Color')),
body: Container(color: color),
);
}
æãåçŽãªã¹ã¿ã€ã«ã®Navigator1.0ã䜿çšãããšã2ã€ã®ç»é¢éã移åã§ããŸãããšãŠãç°¡åã«èŠããŸãïŒ
class _ColorAppState extends State<ColorApp> {
List<Color> _colors = [Colors.red, Colors.green, Colors.blue];
@override
Widget build(BuildContext context) => MaterialApp(
title: 'Color App',
home: Builder(
builder: (context) => ColorListScreen(
colors: _colors,
// the Navigator manages the list of pages itself; you can only push and pop
onTapped: (color) => Navigator.push(
context,
MaterialPageRoute(builder: (context) => ColorScreen(color: color)),
),
),
),
);
}
Navigator.push()
æåã®ããŒãžã®äžã«å¥ã®ããŒãžãé
眮ããŠã2ããŒãžã®ã¹ã¿ãã¯ãäœæããã«ã¯ã
åŒã³åºãã ãã§æžã¿ãŸãããã ããbuildã¡ãœããColorListScreen
ã§äœæãããã³ã³ããã®ãªã¹ããšã¯ç°ãªãããã®ã¹ã¿ãã¯ã¯é衚瀺ã«ãªã£ãŠããŸãããŸããé衚瀺ã«ãªã£ãŠããããããã€ãã£ãåã蟌ã¿ãã€ã³ã¿ãŒãããããã®URLãAndroidããã®ã€ã³ãã³ããªã©ã«ãã£ãŠæäŸãããåæã«ãŒãã®ãã£ãŒããªã³ã¯ãåŠçãããªã©ãä»ã®ã·ããªãªã§ç®¡çããããšã¯å°é£ã§ãããŸããåãããŒãžã®ç°ãªãæ§é éã®ãã¹ããããã«ãŒãã£ã³ã°ã管çããããšãéåžžã«å°é£ã§ãã
Navigator 2.0ã¯ãããŒãžã¹ã¿ãã¯ã衚瀺ããããšã«ããããããã®åé¡ããã®ä»ã®åé¡ã«å¯ŸåŠããŸããããã¯ãåã
ColorListScreen
ãšColorScreen
ïŒã®éã®é·ç§»ã®æŽæ°ãããäŸã§ãã
class _ColorAppState extends State<ColorApp> {
Color _selectedColor;
List<Color> _colors = [Colors.red, Colors.green, Colors.blue];
@override
Widget build(BuildContext context) => MaterialApp(
title: 'Color App',
home: Navigator(
// you can see and decide on every page in this list
pages: [
MaterialPage(
child: ColorListScreen(
colors: _colors,
onTapped: (color) => setState(() => _selectedColor = color),
),
),
if (_selectedColor != null) MaterialPage(child: ColorScreen(color: _selectedColor)),
],
onPopPage: (route, result) {
if (!route.didPop(result)) return false;
setState(() => _selectedColor = null);
return true;
},
),
);
}
ã¢ããªã±ãŒã·ã§ã³ã¯
Navigator
ãã¹ã¿ãã¯å
šäœãè¡šãããŒãžã®ãªã¹ããæ瀺çã«äœæããŠæäŸããŸãã_selectedColor
è²ããŸã éžæãããŠããªãããšã瀺ãããã«ç©ºãäœæãããããæåã¯è¡šç€ºããŸããColorScreen
ããŠãŒã¶ãŒãè²ãéžæãããšsetState()
ãéåžžã©ããåŒã³åºããŠãã¡ãœãããå床åŒã³åºãããšãFlutterã«éç¥ããŸãbuild()
ãããã«ãããColorScreen
äžçªäžã«ã¹ã¿ãã¯ãäœæãããŸãã
ã³ãŒã«ããã¯ã§ç¶æ ãæŽæ°ããŸã
OnPopPage
ãããšãã°ããŠãŒã¶ãŒãç»é¢ã«æ»ã£ãå ŽåãçŸåšã®è²ããéžæ解é€ãããããã®ããŒãžã衚瀺ããããªãããšãæå³ããŸãã
Navigator 2.0ãFlutterã®ä»ã®éšåã®ããã«èŠããå Žåãããã¯æå³çãªãã®ã§ããå¿ é ã®Navigator 1.0ãšã¯å¯Ÿç §çã«ã宣èšçã§ããã¢ã€ãã¢ã¯ãããã²ãŒã·ã§ã³ã¢ãã«ãšæ®ãã®ãã©ãã¿ãŒãçµã¿åãããŠãå€ãã®ãã°ãä¿®æ£ããåæã«æ©èœãè¿œå ããããšã§ãããå®éããã®å°ããªäŸã¯ãNavigator2.0ã®å 容ã®ã»ãã®äžéšã«ãããŸããã詳现ã«ã€ããŠã¯ãFlutterã§ã®å®£èšçããã²ãŒã·ã§ã³ãšã«ãŒãã£ã³ã°ã«é¢ããèšäºã匷ããå§ãããŸãã
åŒãç¶ãNavigator1.0ã䜿çšã§ããŸãã以åãšåãããã«æ©èœããŸããããã«åé€ããããšã¯ãããŸããããã ããNavigator 2.0ãè©ŠããŠã¿ããšããã£ãšæ°ã«å ¥ããšæããŸãã
. , . , , , , . .
, . â Flutter. Navigator 2.0 . Remi Rousselet Twitter, . , . â Surf. , , GitHub: , , , .
: Android
ãã®ãªãªãŒã¹ã§è©Šãããšãã§ããæ°æ©èœã¯ãAndroidã§ã®ç¶æ 埩å ã®ãµããŒãã§ããããã¯ã217件ã®ã¬ãã¥ãŒã§æãåæãããŠããæ©èœã®1ã€ã§ãã
ç¶æ ã埩å ããå¿ èŠæ§ã«æ £ããŠããªãå Žåãã¢ãã€ã«ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ãããã¯ã°ã©ãŠã³ãã«ããã¢ããªã±ãŒã·ã§ã³ãã匷å¶çµäºãããŠãåªå ã¢ããªã±ãŒã·ã§ã³çšã«ãªãœãŒã¹ã解æŸã§ããŸãããããçºçãããšãOSã¯ã¢ããªã±ãŒã·ã§ã³ã«ã匷å¶çµäºãããããšããŠããããšãéç¥ããŸããã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®ç¶æ ããã°ããä¿åããŠããŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ã«æ»ã£ããšãã«åŸ©å ããŸãã
æ£ããå®è£ ããããšããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã¯ã·ãŒã ã¬ã¹ã«ãªããããã€ã¹ã®ãªãœãŒã¹ãããå¹ççã«äœ¿çšãããŸãããããŸã§ãFlutterã¯ç¶æ å埩ããµããŒãããŠããŸããã§ããããã¬ãŒã ã¯ãŒã¯ã®ãµããŒãããªããã°ããããæ£ããè¡ãããšã¯éåžžã«å°é£ã§ããããããã£ãŠãAndroidåãã®ãã®æ©èœã®åºæ¬çãªå®è£ ãæäŸã§ããããšãéåžžã«å¬ããæããŸããããã©ã«ãã®ãã©ãã¿ãŒã«ãŠã³ã¿ãŒã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã埩å
ããéåžžã«ç°¡åãªäŸã次ã«ç€ºããŸãã
class CounterState extends State<RestorableCounter> with RestorationMixin {
@override
String get restorationId => widget.restorationId;
RestorableInt _counter = RestorableInt(0);
@override
void restoreState(RestorationBucket oldBucket) => registerForRestoration(_counter, 'count');
void _incrementCounter() => setState(() => _counter.value++);
@override
Widget build(BuildContext context) => Scaffold(
body: Center(child: Text('${_counter.value}')),
floatingActionButton: FloatingActionButton(onPressed: _incrementCounter),
);
}
ã€ãŸããåãŠã£ãžã§ããã¯ãäžæã®èå¥åã䜿çšããŠRestorationMixinã«ç»é²ãããŠããã¹ãã¬ãŒãžã»ã°ã¡ã³ããååŸããŸããRestorablePropertyïŒ
RestorableInt
ããã«ãããããªïŒã䜿çšããŠUIåºæã®ããŒã¿ãä¿åãããã®ããŒã¿ãç¶æ
埩å
æ©èœã«ç»é²ããããšã«ãããAndroidãã¢ããªã±ãŒã·ã§ã³ãçµäºããåã«ããŒã¿ãèªåçã«ä¿åãããå
ã®ç¶æ
ã«æ»ã£ããšãã«åŸ©å
ãããŸãããããŠããããã¹ãŠã§ããRestoration*
ããšãã°RestorableInt
ãã¿ã€ãã«ä¿åãããŠãããã¹ãŠã®ããŒã¿ãRestorableString
ããã³RestorableTextEditingController
ïŒããã€ããããŸãïŒã埩å
ãããŸãããŸãã埩å
ããããã¹ãŠã®ã¿ã€ããã«ããŒããŠããªãå Žåã¯ãå±éããŠç¬èªã®ã¿ã€ããäœæã§ããŸãRestorablePropertyã
ç¶æ å埩ãèªåçã«ãã¹ãããããã«ãæ°ããrestartAndRestoreAPIãWidgetTesterã«è¿œå ããŸããããŸããæåãã¹ãã®å Žåãæãç°¡åãªæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
- Androidããã€ã¹ã§ç¶æ
埩å
ãæå¹ã«ããŠFlutterã¢ããªãå®è¡ããŸãã
- Androidéçºè
èšå®ã§[ã¢ã¯ã·ã§ã³ãä¿åããªã]ãªãã·ã§ã³ãæå¹ã«ãã
- Flutterã¢ããªãèµ·åãã
- ããã¯ã°ã©ãŠã³ãã«çœ®ãã
- ããã«æ»ããŸãã
Androidã¯ã¢ããªã±ãŒã·ã§ã³ãã匷å¶çµäºãããŠåŸ©å ãããã¹ãŠãæåŸ ã©ããã«æ©èœãããã©ããã確èªããŸãã
ãã®ããŒãžã§ã³ã®ç¶æ 埩å ã¯æ«å®çãªãã®ã§ãããŸã ããã¹ãããšããããŸããããšãã°ãç¶æ ã®åŸ©å ã¯Androidã®æ©èœã§ããã ãã§ãªããiOSã¢ããªããã®æ©æµãåããããšãã§ããŸãããŸãããªã«ããªäžã«ç¶æ ãç¶æããããã«ãç¬èªã®ãŠã£ãžã§ãããæŽæ°ããã®ã«å¿ããã§ããand ïŒãŠãŒã¶ãŒã®ã¹ã¯ããŒã«äœçœ®ãèšæ¶ããããïŒãïŒå ¥åããããã¹ãã埩å ããããïŒ
Scrollable
ãªã©ã®ã¯ã©ã¹ããµããŒãããŠãããä»ã®ãŠã£ãžã§ããã«ãæ¡åŒµããäºå®ã§ããListView
SingleChildScrollView
TextFields
確ãã«ãéèŠãªæ©èœã§ããããã²ãŒã·ã§ã³ãµããŒãïŒ1.0ãŸãã¯2.0ïŒã¯ãŸã è¿œå ãããŠããŸããããã®ããããã®ããŒãžã§ã³ããæ«å®çããšåŒã³ãŸããã€ãŸããã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒãããå Žæãšåãå Žæã§ã¯éããŸããããã®æ©èœã¯ãããŒã¿çãšFlutterã®æ¬¡ã®å®å®çãªãªãŒã¹ã§éããªãæäŸãããŸãã
â . Flutter- UX. â , (, â -), State . Restorable-, RestorationMixin.
, . : , - , , .
:
FlutterããŒã ã¯ãGoogleã®ç€Ÿå ããŒãããŒãšååããŠãå ¥åã¬ãŒããšè¡šç€ºã¬ãŒããäžèŽããªãå Žåã®ã¹ã¯ããŒã«ããã©ãŒãã³ã¹ãå€§å¹ ã«æ¹åããŸãããããšãã°ãPixel 4ã®å ¥åã¯120Hzã§åäœãããã£ã¹ãã¬ã€ã¯90Hzã§åäœããŸãããã®äžæŽåã«ãããã¹ã¯ããŒã«ããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããŸããæ°ãããã©ã°
resamplingEnabled
ã䜿çšãããšããã®åé¡ã解決ã§ããŸãã
void main() {
GestureBinding.instance.resamplingEnabled = true;
run(MyApp());
}
åé¡ã®åšæ³¢æ°ã®äžäžèŽã«å¿ããŠããã®ãã©ã°ãæå¹ã«ãããšãã¹ã¯ããŒã«ã®åŸ ã¡æéãæ倧97ïŒ ççž®ãããŸããå°æ¥ã®ãã«ãã§ã¯ããã®ãã©ã°ãããã©ã«ãã§æå¹ã«ããäºå®ã§ãã
æ°ããçµ±åDartéçºè ããŒã«
ãã€ãã®ããã«ãFlutterã¢ããããŒãã¯ããšã³ãžã³ãšãã¬ãŒã ã¯ãŒã¯ã ãã§ãªããããŒã«ã«ãé¢ä¿ããŸããFlutter 1.22ã«ã¯ãæ°ããããŒãžã§ã³ã®DartïŒ2.10ïŒãšã
dart
䟿å©ãªæ°ããã³ãã³ãã©ã€ã³ããŒã«ãå«ãŸããŠããŸãã
æŽå²çã«ãDartã«ã¯å€ãã®å°ããªéçºè ããŒã«ïŒ
dartfmt
ãã©ãŒããããdartanalyzer
ã³ãŒãåââæãªã©ïŒããããŸãããDart 2.10ã«ã¯ãããŒã«ãšdart
éåžžã«ãã䌌ãçµ±åéçºããŒã«ããããŸãflutter
ã
Flutter 1.22 SDK以éããã©ã«ããŒ
<flutter-sdk>/bin
ïŒããããã«ããPATH
ïŒã«ã¯flutter
andã³ãã³ããå«ãŸããŠããŸãdart
ã詳现ã«ã€ããŠã¯ãDart2.10ã®ããã°æçš¿ãåç
§ããŠãã ããã
ã¢ããªã±ãŒã·ã§ã³ãµã€ãºåæããŒã«
Flutter 1.22ã®äžéšãšããŠãªãªãŒã¹ãããããŒã«ã«ã¯ãæ°ãããã«ããµã€ãºåæãŠãŒãã£ãªãã£ãå«ãŸããŠããŸãããã®ããŒã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãµã€ãºãæéã®çµéãšãšãã«è¥å€§åããŠãããã©ããã蚺æããã®ã«åœ¹ç«ã¡ãŸãã
ãã®ããŒã«ã䜿çšããŠãåæçšã®ããŒã¿ãåéã§ããŸãã
--analysis-size
次ã®ã³ãã³ãã®ããããã§ãã©ã°ãæž¡ããŸãã
flutter build apk
flutter build appbundle
flutter build ios
flutter build linux
flutter build macos
flutter build windows
åºåã¢ãŒãã£ãã¡ã¯ããæ§ç¯ãããšãã«ãã®ãã©ã°ã䜿çšãããšãã¢ãŒãã£ãã¡ã¯ãã®ãµã€ãºãšæ§æã®æŠèŠã衚瀺ãããŸãããã€ãã£ãã³ãŒãããªãœãŒã¹ãããã«ã¯ã³ã³ãã€ã«ãããDartã³ãŒãã®ããã±ãŒãžã¬ãã«ã®å èš³ãå«ãŸããŠããŸãã
ãµã³ãã«ãªãªãŒã¹APKãã©ãã¿ãŒã®ã£ã©ãªãŒã®å èš³
ãã®èŠçŽã¯ããã«ãã®ãµã€ãºããã°ããåæãããã«ãã倧ããããçç±ãç解ããã®ã«åœ¹ç«ã¡ãŸãããŸããåéãããããŒã¿ã¯ãããªãããããã«ãã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ãã³ãã調ã¹ããµã€ãºã®åé¡ãç¹å®ãã以äžã®ããšã«ããã2ã€ã®ç°ãªãJSONãã¡ã€ã«éã®å€æŽã確èªããããšãã§ããŸãããŒãããããããŒããŒã«ã§è¡šç€ºããããšãã§ããŸãJSONãã¡ã€ã«ãšããŠãå©çšå¯èœã§ããflutter.devã®æ瀺ãã JSONãã¡ã€ã«ãã¢ããããŒããããšãã¢ããªã±ãŒã·ã§ã³ã®ãµã€ãºã®ããªãŒãããã衚瀺ããã€ã³ã¿ãŒãã§ã€ã¹ãäœæãããŸãã
flutter.devã®ã¢ããªã±ãŒã·ã§ã³ãµã€ãºåæããŒã«ã®DartDevToolsããã¥ã¡ã³ãã«ããAPKã®å èš³ã®äŸ
解説
AndroidStudioãé·ãéããèªäœã§å®è¡ã§ããããšããéçºããŒã«ãä»ããŠåæã§ããããã«ãªããŸãããããã¯ããã«æè»æ§ããããŸããããã§ãJsonã®ã¬ããŒããCIã«çŽæ¥å±éããæéã®çµéã«äŒŽãã¢ã»ã³ããªãµã€ãºã®å€æŽãç£èŠã§ããŸãã
ãã¬ãã¥ãŒïŒDevToolsã®ãããã¯ãŒã¯ããŒãžãæŽæ°
ãã®ãªãªãŒã¹ã®DevToolsã®ãã1ã€ã®äºåæ©èœïŒãªã¯ãšã¹ãæ¬æã[ãããã¯ãŒã¯]ã¿ãã«è¡šç€ºãããããã«ãªããŸããã
ãã®æ©èœãæå¹ã«ããã«ã¯ãå¿ ãçµç±ãã©ãã¿Devãã£ã³ãã«ã§ããäœã
flutter channel dev
ãšflutter channel upgrade
ã
ããã«ããããã¯ãŒã¯ãã©ãã£ãã¯ã倧éã®ã¢ããªã±ãŒã·ã§ã³åãã«ãæ€çŽ¢ãšãã£ã«ã¿ãªã³ã°ã®æ©èœãæäŸããŠããŸãã
[ãããã¯ãŒã¯]ã¿ãã®ããã¥ã¡ã³ãã«ã€ããŠã¯ãflutter.devã®ããããã¯ãŒã¯ãã¥ãŒã®äœ¿çšãã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
IntelliJã§ãã¹ããããŠããDevToolsã€ã³ã¹ãã¯ã¿ãŒã¿ã
ããã€ãã®æéã®ããã«ãä»ãç§ãã¡ã¯ç§ãã¡ã®ãã©ãã¿ããŒã«ã®ããã€ãã®2ã€ã®ã³ããŒãç¶æããŠãããäŸãã°ãã€ã³ã¹ãã¯ã¿ããã«ã®IntelliJã§ãšã€ã³ã¹ãã¯ã¿ã¿ãããŒãããããããŒããŒã«ã§ã¯ãããã«ããäœæ¥ãé ããªããŸãã2ã€ã®ã³ãŒãããŒã¹ãç¶æããå¿ èŠããããŸãããŸããäžéšã®æ©èœã¯ãŸã IntelliJãã©ã°ã€ã³ã®äžéšã§ã¯ãããŸããïŒã¬ã€ã¢ãŠããšã¯ã¹ãããŒã©ãŒãªã©ïŒããããã®åé¡ã«å¯ŸåŠããããã«ãDartDevToolsããIntelliJå ã§çŽæ¥[ã€ã³ã¹ãã¯ã¿ãŒ]ã¿ãããã¹ãããæ©èœãæå¹ã«ããŸããã
ãã®ãªãã·ã§ã³ãæå¹ã«ããã«ã¯ãã«è¡ãç°å¢èšå®>èšèªãšãã¬ãŒã ã¯ãŒã¯>ãã©ãã¿ãŒ>çµã¿èŸŒã¿ããããããŒããŒã«ã€ã³ã¹ãã¯ã¿ãæå¹ã«ããŸãã
, . Flutter Dev Podcast Android Studio VS Code.
, ⊠. , IDE. . , Android Studio. .
Visual Studio Code
ãã¹ãŠã®Flutteréçºè ãçŽé¢ããäžè¬çãªã¢ã¯ã·ã§ã³ã¯ãã¿ãŒããã«ã®ãšã©ãŒã®ã¹ã¿ãã¯ãã¬ãŒã¹ããããšã©ãŒãçºçãããœãŒã¹ã³ãŒãå ã®å Žæã«ç§»åããããšã§ããVisual Studio Codeã®Flutteræ¡åŒµæ©èœã®ææ°ãªãªãŒã¹ã§ã¯ããããã®ãªã³ã¯ãæ£ãã解æãããããã«ãªããŸããããªã³ã¯ãã¯ãªãã¯ããŠãã¯ã©ãã·ã¥ãçºçããã³ãŒãå ã®ç®çã®å Žæã«ç§»åã§ããŸãã
å°ããªããšã®ããã«èãããŸããããã®æ©èœã«é¢ããæåã®ãã£ãŒãããã¯ã¯ãã§ã«éåžžã«è¯å®çã§ãã
ãã€ãã®ããã«ãããã«ã¯ããŒã«ã®å€æŽãã°ãå€ãããŸããã次ã®çºè¡šã確èªããããšããå§ãããŸãã
- Dart DevTools-0.9.0
- Dart DevTools-0.9.1
- Dart DevTools-0.9.3
- Flutter IntelliJM48.1ãã©ã°ã€ã³ãªãªãŒã¹
- Flutter IntelliJM49ãã©ã°ã€ã³ãªãªãŒã¹
- Flutter IntelliJM50ãã©ã°ã€ã³ãªãªãŒã¹
- VSã³ãŒãæ¡åŒµv3.14.0
- VSã³ãŒãæ¡åŒµv3.15.0
顧客éèŠïŒEasyA
EasyAã¯ãµãã¹ã¯ãªãã·ã§ã³ããŒã¹ã®ã¢ããªã§ãåŠçã¯ã€ã³ã¹ã¿ã³ãã¡ãã»ãŒãžã³ã°ãä»ããŠåªç§ãªè¬åž«ãšäº€æµããŸããã¢ããªã±ãŒã·ã§ã³ã¯Flutterã§æžãããŠããŸããAppleã¯æè¿ããããApp of theDayãšããŠãã©ã°ãç«ãŠãŸããã
ãä»å¹Žã®åãã«åŠæ ¡ãé éåŠç¿ã«åãæ¿ãå§ãããšããç§ãã¡ã¯åŠçãå©ããããã«ã¢ããªã±ãŒã·ã§ã³ãè¿ éã«ç«ã¡äžãããšãã課é¡ãæ±ããŠããŸãããFlutterã§ã®é«ééçºã®ãããã§ãiOSãšAndroidã®äž¡æ¹ã®ã¢ããªã±ãŒã·ã§ã³ãäœæããããšãã§ããŸããããããŠã圌ãã¯ãªããšãåºã§ããããå ¬éããããšãã§ããŸãã-ã¡ããã©ããã¯ããŠã³ã®éå§ã«éã«åãããã«ïŒéåžžã®ç¶æ³ã§ã¯ãããã¯äºå®äžäžå¯èœã§ããããããFlutterã䜿çšãããšã3ã€ã®ãã©ãããã©ãŒã ãã¹ãŠãåæã«æäœã§ãããããã³ãŒããå¹æçã«åå©çšããããšãã§ããŸãããç§ãã¡ã®å°ããªéçºããŒã ã¯äžçæžåœåããŸãããã
EasyAã®å ±ååµèšè ã§ããPhilKwok
é倧ãªå€æŽ
ãã€ãã®ããã«ãç§ãã¡ã¯é倧ãªå€æŽã®æ°ãæå°éã«æããããã«åªããŠããŸããFlutter1.22ã®ãªã¹ãã¯æ¬¡ã®ãšããã§ãã
- 56413æå®ãããRectããã§ã«è¡šç€ºãããŠããå Žåãviewport.showOnScreenããã¥ãŒããŒããã¹ã¯ããŒã«ããªãããã«ããŸãã
- 62395 [gen_l10n]ããã©ã«ãã®åæãã±ããçæã
- 62588ã«ãŒããããã«å°ãªãæ§ç¯ããŸãã
Flutter 1.22ã®å®å®çã¯ã1.20ã®ãªãªãŒã¹åŸããã«ãªãªãŒã¹ãããå¯èœæ§ããããŸãããéåžžã«åªããŠãããããããã§ãã¹ãŠã説æããããšã¯ã§ããŸããããã®ãªãªãŒã¹ãçŽ æŽãããiOSããã³Androidã¢ããªã®äœæã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãããŸããã¹ãã¢ã«äœãæ¥ãã®ã楜ãã¿ã§ããããªãã®ãµããŒãã«æè¬ããŸãïŒç§ãã¡ã¯ããªãã®ããã«Flutterãæ§ç¯ããŠããŸãã