
Yura Luchaninovã®å ±åã®åŸãç§ã¯Flutterãèªåã§è©Šãããšã«ããŸããã è³ã䌞ã°ãããã«ãå°æã§ç·æ§ãšäžç·ã«å·ãããŠããããšããããŸããã ç©äºã¯ãªããªã£ãŠããŸãã ç§ã¯èŠãŠãèªã¿ãæžãå§ããŸããã ãããŠããã¹ãŠãããŸãããããã«èŠããã¢ããªã±ãŒã·ã§ã³ãèµ·åããããããã説æããããšã¯ç解ã§ãããã¹ãŠãç°¡åã§ãã ããããããããããªãã§ã¯ãããŸãã-誰ãã説æããŠããããã§ã¯ãããŸããã ãã©ãããã©ãŒã ãYPãã¢ãããŒããããã«ã¯ãµããžã§ã¯ããšãªã¢ãç§ã«ãšã£ãŠæ°ãããã®ãªã®ã§ããã®çš®ã®è¿·æãªã®ã¯ãããªãããéå§ããªããã§ãã°ãŒã°ã«ã®ããšãç¥ããªãããã§ãïŒDart / Flutter / Window / Screen / Route / WidgetïŒ
ãã¡ãããDartãFlutterãããã³ãã®ãŠã£ãžã§ããã®ãã¹ãŠã®ããã¥ã¡ã³ããèªã¿çŽãããã¯ãããŸããã§ãããæéãããŸããªãã£ãã®ã§ãFlutterã詳ããèŠãŠã¿ããã ãã§ããã Flutterã§è€éãããªãã¢ããªã±ãŒã·ã§ã³ãç解ããŠäœæããããã«ãå¿
èŠãªãã®ãã¹ãŠã説æããå°ããªã¬ã€ããããã°ããã®ã§ãããããã¯ãããããŸããã
ã¬ã€ãã«ã€ããŠ
ãã®ãããã¯ã«é¢ããèšäºã®ã»ãšãã©ã¯ããæžãããŠãããè€éã§ã¯ãããŸããã åé¡ã¯ããããã®ã»ãšãã©ãåºæ¬çãªåºç€ãšã¿ãªãããç¥èãå¿
èŠãšããããšã§ãããåºæ¬ã«ã€ããŠèª¬æããä»ã®èšäºã§ã¯èšåãããŠããŸããã ãã®äžé£ã®èšäºã§ã¯ããã®ç¶æ³ãä¿®æ£ããããšæããŸãã ãŒãããå§ããŸããããåè¿°ã®ãããã泚æããã«æ®ãããšãªãã1ã€ãŸãã¯è€æ°ã®ã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã ãã®ããã»ã¹ã§ã¯ããã¹ãŠã®äž»èŠã³ã³ããŒãã³ãã®äœ¿çšæ¹æ³ã ç¬èªã®ã€ã³ã¿ãŒãã§ã€ã¹ã®äœææ¹æ³ã ãã€ãã£ãã¢ãžã¥ãŒã«ã®æäœæ¹æ³ ããããŠãã¡ããã äž¡æ¹ã®ãã©ãããã©ãŒã åãã«ã¢ããªã±ãŒã·ã§ã³ãã¢ã»ã³ãã«ããæ¹æ³ãåŠã³ãŸã ã
Webéçºè
ã®èŠ³ç¹ããæžããŸãã ããªãã®ã»ãšãã©ã¯ãŠã§ãã¹ã¿ãã¯ã«ç²ŸéããŠããå¯èœæ§ãé«ããããªãã¿ã®ãã©ãããã©ãŒã ãšã®ã¢ãããžãŒã¯ã家ããã®ä»ã®åç©ãç¬ãããŒãããŒãªã©ã®å»ºç¯ç©ãšã®ã¢ãããžãŒãããåªããŠããŸã...
é
延ããªãããã«ãç°¡åã«æŠèŠã説æããŸãã ãããŠãæã奜å¥å¿forçãªäººã®ããã«ãè°è«ãããããã¯ã«é¢ããæçšãªãªã³ã¯ãæ®ããŸãã
Flutterã¯ã ã¢ããªã±ãŒã·ã§ã³ãç«ã¡äžãã倧äŒæ¥ã®æ³šç®ãéããŠãããè¥ããŠéåžžã«ææãªãã©ãããã©ãŒã ã§ã ã ãã®ãã©ãããã©ãŒã ã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®éçºã«å¹æµããã·ã³ãã«ããããã³ãã€ãã£ãã¢ããªã±ãŒã·ã§ã³ãšåçã®äœæ¥é床ã§èå³æ·±ããã®ã§ãã ããã€ãã®ææ³ã«ãããé«ãã¢ããªã±ãŒã·ã§ã³ããã©ãŒãã³ã¹ãšéçºé床ãå®çŸããŸãã
- çŸåšããç¥ãããŠããå€ãã®ã¢ãã€ã«ãã©ãããã©ãŒã ãšã¯ç°ãªããFlutter ã¯JavaScriptããããªã圢åŒã§ã䜿çšããŠããŸãã ã Flutterã®ããã°ã©ãã³ã°èšèªãšããŠãDartãéžæããŸãããããã¯ãã€ããªã³ãŒãã«ã³ã³ãã€ã«ãããObjective-CãSwiftãJavaããŸãã¯Kotlinã«å¹æµããæäœé床ãå®çŸããŸãã
- Flutter 㯠ã ãã€ãã£ãã³ã³ããŒãã³ãã䜿çšããŸãã ãããããã©ã®ãããªåœ¢åŒã§ããéä¿¡ããããã«ã¬ã€ã€ãŒãäœæããå¿
èŠã¯ãããŸããã 代ããã«ãã²ãŒã ãšã³ãžã³ã®ããã«ïŒãããŠã²ãŒã ã«ã¯éåžžã«åçãªUIãããããšãç¥ã£ãŠããŸãïŒãã€ã³ã¿ãŒãã§ã€ã¹å
šäœãç¬èªã«æç»ããŸãã ãã¿ã³ãããã¹ããã¡ãã£ã¢èŠçŽ ãèæ¯-ãããã¯ãã¹ãŠFlutterèªäœã®ã°ã©ãã£ãã¯ãšã³ãžã³å
ã«æç»ãããŸãã äžèšã®åŸãFlutterã®ãHello Worldãã¢ããªã±ãŒã·ã§ã³ãå æããã¹ããŒã¹ã¯ãããããã§ãïŒiOSâ2.5Mbããã³Androidâ4Mbã
- Flutter ã¯ããŠã£ãžã§ããïŒã³ã³ããŒãã³ããšåŒã°ããWebã®äžçïŒã«åºã¥ãReactJS Webãã¬ãŒã ã¯ãŒã¯ã«è§Šçºããã宣èšåã¢ãããŒãã䜿çšã㊠ãUIãæ§ç¯ããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ã®é床ãããã«åäžãããããã«ã ãŠã£ãžã§ããã¯å¿
èŠã«å¿ããŠåæç»ãããŸã - ãŠã£ãžã§ããã«äœããå€æŽãããå Žåã®ã¿ïŒããã³ããšã³ãã®äžçã§Virtual DOMãè¡ãããã«ïŒã
- ããã«å ããŠããã¬ãŒã ã¯ãŒã¯ã«ã¯çµã¿èŸŒã¿ã® Hot-reloadããããŸããããã¯Webã«ãªãã¿ãããããã€ãã£ããã©ãããã©ãŒã ã§ã¯ãŸã å©çšã§ããŸããã§ããã
ãããã®èŠå ã®å®éçãªå©ç¹ã«ã€ããŠã¯ãã¢ããªã±ãŒã·ã§ã³ãJavaããDartã«æžãçŽããå°è±¡ãå
±æããAndroidéçºè
ã«ããèšäºãèªãããšã匷ããå§ãããŸãã ããã§ã¯ã圌ãååãä»ãããã¡ã€ã«/è¡ã®æ°ïŒJavaã§æžãããïŒ-179/12176ãããã³ïŒDartã§æžãããïŒ-1735幎1æ31æ¥ãåãåºããŸãã ããã¥ã¡ã³ãã§ã¯ããã©ãããã©ãŒã ã®æè¡çç¹åŸŽã®è©³çŽ°ãªèª¬æãèŠã€ããããšãã§ããŸãã åäœããã¢ããªã±ãŒã·ã§ã³ã®ä»ã®äŸãã芧ã«ãªãããå Žåã¯ãå¥ã®ãªã³ã¯ãã芧ãã ããã
Dartã«ã€ããŠ
Dartã¯ãFlutterã®äžã§ã¢ããªã±ãŒã·ã§ã³ãäœæããå¿
èŠãããããã°ã©ãã³ã°èšèªã§ãã ããã¯éåžžã«åçŽã§ãããJavaãŸãã¯JavaScriptã®çµéšãããå Žåã¯ãããã«ç¿åŸã§ããŸãã
FlutterãåŠç¿ããããã«å¿
èŠãªæäœéã®ã¿ã説æããããšããŠãDartã«é¢ããã¬ãã¥ãŒèšäºãæžããŸããã ãããããã®èšèªã«ã¯éåžžã«å€ãã®ãã¥ã¢ã³ã¹ãããããã®ãããªèšäºãæžãããã®ããã€ãã®è©Šã¿ã«ãããããããç§ã¯ããããŸã å®å
šãªãã®ã«ããããšã¯ã§ããŸããã§ããã äžæ¹ãã ããŒãèšèªã®ãã¢ãŒãã®èè
ã¯ãããã«ã€ããŠçŽ æŽãããä»äºãããŸããã
ãã¬ãŒãã³ã°ã«ã€ããŠ
ãã®ãããã¯ã¯ãDartãšåæ§ã«ãå
¬åŒã¬ã€ãã§éåžžã«è©³ãã説æãããŠããŸãã ããã§ããã³ããŒã§ããŸããã§ããããã§ããŸããã
äœãåŸ
ã€ããšãªããã€ã³ã¹ããŒã«ã¬ã€ãããŒãžã«ç§»åãããã©ãããã©ãŒã ãéžæããæé ã«åŸã£ãŠã·ã¹ãã ã«ãã©ãããã©ãŒã ãã€ã³ã¹ããŒã«ããŸãã ãšãã£ã¿ãŒã§ããã©ã°ã€ã³ãæ¥ç¶ããŸãã åãã¬ã€ãã«ã¯ã VS CodeãšIntelliJãã»ããã¢ããããããã®æ瀺ããããŸãã ãšãã£ã¿ãŒçšã®Dartããã³Flutterçšã®ãã©ã°ã€ã³ããããŸãïŒéåžžã2ã€ãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãïŒã ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããã®ããã©ãŒãã³ã¹ã確èªããŸã ã
OSXãŠãŒã¶ãŒã®ãã³ãã iOSãšãã¥ã¬ãŒã¿ãŒã®é»è©±ã®ãã€ã³ãããããã¬ãŒã ãå ããã¹ããŒã¹ãæ®å¿µã«æãã®ã§ããããããªãã«ããŠiPhone 8ã«åãæ¿ããŸããïŒããã»ã©é·ãã¯ãããŸããïŒã
Hardware â Device â iOS # â iPhone 8
Window â Show Device Bezels
ãããããŒãããããããã¿ã³ãªãã§çããããšãã§ããŸãïŒ Shift + Cmd + H
ããã¯ããŒã ã Cmd + Right
-ãããŠããã¯é»è©±ãè£è¿ãããšã§ããæ®ãã¯Hardware
ã¡ãã¥ãŒã§èŠã€ããããšãã§ããŸã ãã ããã¹ã¯ãªãŒã³ããŒããŒãããªã³ã«ããããšããå§ãããŸããããã¯ãããŒããŒãã§ç»é¢ã®ååãå®æçã«ãããã¯ãããŠããå Žåã«ã¢ããªã±ãŒã·ã§ã³ã§äœæ¥ã§ãããã©ãããç解ããããšãéèŠã ããã§ãïŒ Cmd + K
ïŒãã©ãŒã«ã¹ãå
¥åãã£ãŒã«ãã«ãããšãã«æ©èœããŸãïŒã
ãã¬ãŒã ä»ãã®iPhone 8ããã³iPhone X

iPhone 8ããã³iPhone XããŒãã¬ã¹

æ§é ã«ã€ããŠ
çæãããã¢ããªã±ãŒã·ã§ã³ã®ãããã©ã«ããŒã«ç§»åããŠãããã«ãããã®ã確èªããŸãã ãã¹ãŠã§ã¯ãªããæ£ãããã®ã§ïŒ
lib/
-pub ïŒDartã®ããã±ãŒãžãããŒãžã£ãŒïŒã®ååã«ããããã¹ãŠã®ã³ãŒãã¯ãã®ãµããã©ã«ããŒã«ãããŸããpubspec.yml
- package.json
ãšåæ§ã«ãå®è¡ããããã«ã€ã³ã¹ããŒã«ããå¿
èŠãããã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ãæžã蟌ãŸããŸããã埮åŠãªéãããããŸããäžèšã®æšæºã®DartãŠãŒãã£ãªãã£ã§ã¯ãªããFlutterã³ãã³ãã䜿çšããŠã€ã³ã¹ããŒã«ããå¿
èŠããããŸãïŒ flutter pub get <package_name>
;test/
-ããã«äœããããç¥ã£ãŠããŸããïŒ flutter test
åŒã³åºãããšã§å®è¡ã§ããŸããios/
ïŒ android/
-åãã©ãããã©ãŒã ã®èšå®ãå«ããã©ã«ããŒãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã«å¿
èŠãªæš©éïŒå Žæãžã®ã¢ã¯ã»ã¹ãBluetoothïŒãã¢ã€ã³ã³ãããã³ãã©ãããã©ãŒã åºæã®ãã¹ãŠã瀺ããŸãã
æ§é ãç解ãã main.dart
ãã¡ã€ã«ãåŸ
æ©ããŠããlib/
ãã©ã«ããŒã«main.dart
ãŸãã ãæ³åã®ãšãããããã¯ãŸãã«ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããªããã°ãªããªããã¡ã€ã«ã§ãã ãããŠã main()
é¢æ°ãåŒã³åºãããšã«ãããCïŒããã³ä»ã®å€ãã®å Žåãšåæ§ïŒã®ããã«éå§ããŸãã
ãŠã£ãžã§ããã«ã€ããŠïŒHello Worldãã¡ãïŒ
Flutterã§ã¯ããã¹ãŠãWidgetã«åºã¥ããŠæ§ç¯ãããŸãããã¥ãŒãããŒãã®ããã¹ã¿ã€ã«ããŠã£ãžã§ããã®ç¶æ
ããããŸãã ãŠã£ãžã§ããã«ã¯äž»ã«2ã€ã®ã¿ã€ãããããŸããç¶æ
ãããšç¶æ
ãªãã§ãããããã«ã€ããŠã¯ãŸã ã§ãã ç°¡åã«ããŸãããã
main.dartãããã¹ãŠãåé€ããŸãã ã³ã¡ã³ãã泚ææ·±ãèªãã§æ¬¡ã®ã³ãŒãã貌ãä»ããŸãã
import 'package:flutter/widgets.dart';
runApp(âŠ)
ã¯åäžã®åŒæ°ãåããŸã-ãããžã§ã¯ãå
šäœã®ã«ãŒããšãªããŠã£ãžã§ããã ãšããã§ãHot-reloadã¯ãããååŸã§ããªããããã¢ããªã±ãŒã·ã§ã³ãåèµ·åããå¿
èŠããããŸãã
Text(âŠ)
-Flutterã¯ç»é¢äžã«æååã衚瀺ããããšã¯ã§ããŸããã ããã¹ãã衚瀺ããã«ã¯ã Text
æå®ããå¿
èŠããããŸãã textDirection
ã ãããŠãããã¯text-align
ãããªããã¹ãé
眮ã§ã¯ãªãããŠã§ããšæ¯èŒããå Žåã direction
é¡äŒŒç©ã§ãã ã¢ããªã±ãŒã·ã§ã³ãåœéåããããã®APIã®äžéšã Text
ã¯æ¹åãããããŸã§æ©èœããŸããããã©ãã§ãæå®ããå¿
èŠã¯ãããŸããã次ã«ãã¢ããªã±ãŒã·ã§ã³å
šäœã®ããã¹ãã®æ¹åã調æŽããæ¹æ³ãåæããŸãã
ãã§ã«ã¢ããªãèµ·åããŸãããïŒ ãããã«ã¡ã¯ãäžçïŒãåºãŠããŸããïŒ ã©ããã...ã¯ãïŒ ããããæããã«äœããããããã£ãã

ããã¹ãã¯ã·ã¹ãã æ
å ±ã«ãã£ãŠãããã¯ãããŸãã ãã¹ãŠã®ç»é¢ã¹ããŒã¹ãèªç±ã«äœ¿çšã§ããæåãããŠã£ãžã§ãããåãåºããŸãããããã«ã¯ããšãããã·ã¹ãã æ
å ±ã衚瀺ãããŸãã ããã¹ããã©ããã«ç§»åããŠã¿ãŸãããã
import 'package:flutter/widgets.dart'; main() => runApp( Center(
Center(âŠ)
ã¯ã child
åŒæ°ã§æž¡ãããå¥ã®ãŠã£ãžã§ãããæ°Žå¹³ããã³åçŽæ¹åã®äžå€®ã«é
眮ã§ãããŠã£ãžã§ããã§ãã ã»ãšãã©ãã¹ãŠã®ãŠã£ãžã§ããããããã®ååã䜿çšããŠãåŒã³åºããããŠã£ãžã§ããå
ã«æç»ããå¿
èŠããããŠã£ãžã§ãããäŒéãããããFlutterã¢ããªã±ãŒã·ã§ã³ã§child
ãšchild
ããã衚瀺ãããŸãã
ãŠã£ãžã§ããã³ã³ããžã·ã§ã³ã¯ãFlutterã§UIã®ã¬ã³ããªã³ã°ãå€èŠ³ã®å€æŽãããã«ã¯ããŒã¿ã®è»¢éã«äœ¿çšãããŸãã ããšãã°ã Directionality(âŠ)
ãŠã£ãžã§ããDirectionality(âŠ)
ã¯ããã¹ãŠã®åãŠã£ãžã§ããã®ããã¹ãã®æ¹åãèšå®ããŸãã
import 'package:flutter/widgets.dart'; main() => runApp( Directionality( textDirection: TextDirection.ltr, child: Center( child: Text('Hello, World!'), ), ), );
å¥ã®éåžžã«éèŠãªãŠã£ãžã§ãããèŠãŠãåæã«ã¢ããªã±ãŒã·ã§ã³ã®å€èŠ³ãå€ããŸãããã
import 'package:flutter/widgets.dart'; main() => runApp( Directionality( textDirection: TextDirection.ltr, child: Container(

Color(âŠ)
-è²ã ããã¥ã¡ã³ãã¯ãããèšå®ããããŸããŸãªæ¹æ³ã瀺ããŠããŸãããäž»ãªããšã¯åã«ã¯ã©ã¹ã³ã³ã¹ãã©ã¯ã¿ãŒã«çªå·ãæž¡ãããšã§ãã äžèšã®äŸã§ã¯ã16é²åœ¢åŒã§èšè¿°ãããæ°å€ãã³ã³ã¹ãã©ã¯ã¿ãŒã«æž¡ããŸããããã¯ãHEXã«éåžžã«äŒŒãŠããŸãããæåã«ãè²ã®éæ床ã瀺ã2ã€ã®æåãè¿œå ããŸããïŒ0x00ã¯å®å
šã«éæã§ã0xFFã¯ãŸã£ããéæã§ã¯ãããŸããïŒã
TextStyle(âŠ)
-ããã«èå³æ·±ããŠã£ãžã§ãããè²ããµã€ãºã倪ããè¡éãèšå®ããããäžç·ãè¿œå ãããã§ããŸãã
Flutterã¢ããªã±ãŒã·ã§ã³ã®äœæãå®äºïŒ ããã¯ã§ã¯ã Androidããã³iOSçšã«ã¢ã»ã³ãã«ããæ¹æ³ãèªãããšãã§ããŸããåãå Žæã«ãç®çã®ã¹ãã¢ã«éä¿¡ããæ¹æ³ãç¥ããããªã³ã¯ããããŸãã ããã ãã§ã¯äžååãªäººã®ããã«ãFlutterã«ã€ããŠããã«2ã3è¡è¿œå ããŸããã
ããã¹ããŒãã¬ã¹ãŠã£ãžã§ãã
ãŠã£ãžã§ããã®äœ¿çšæ¹æ³-ããã£ãã®ã§ãä»åºŠã¯ãŠã£ãžã§ããã®äœææ¹æ³ãç解ããŸãããã ç¶æ
ãæã£ãŠãããŠã£ãžã§ãããšæã£ãŠããªããŠã£ãžã§ãããããããšã¯æ¢ã«äžã§è¿°ã¹ãŸããã ãããŸã§ãã¹ããŒãã¬ã¹ãŠã£ãžã§ããã®ã¿ã䜿çšããŠããŸããã ããã¯ããŠã£ãžã§ãããåãªãã¯ã©ã¹ã§ãããããããã£ãå€æŽã§ããããããŸã£ããæã£ãŠããªããšããæå³ã§ã¯ãããŸããã ãŠã£ãžã§ãããã¬ã³ããªã³ã°ãããçŽåŸã«ããã®ç¶æ
ãå€æŽããŠããUIã§ãã®ãŠã£ãžã§ãããæŽæ°ãããããšã¯ãããŸããã ããšãã°ãç»é¢äžã®ããã¹ããå€æŽããå¿
èŠãããå Žåãå¥ã®Text
ãŠã£ãžã§ãããçæãã衚瀺ããæ°ããã³ã³ãã³ããæå®ããå¿
èŠããããŸãã ãã®ãããªãŠã£ãžã§ããã¯ãç§ãäœãæå³ãããç¥ã£ãŠããã°ãå®æ°ãšåŒã¶ããšãã§ããŸãã ãããŠããããã¯ã·ã³ãã«ãªã®ã§ããããããå§ããŸãããã
ã¹ããŒãã¬ã¹ãŠã£ãžã§ãããäœæããã«ã¯ã次ã®ãã®ãå¿
èŠã§ãã
- æ°ããã¯ã©ã¹ã«çŸããååãä»ããŸãã
StatelessWidget
ããã¯ã©ã¹ãç¶æ¿ããŸããBuildContext
ãåŒæ°ãšããŠåãåããããçš®ã®Widget
ãè¿ãbuild()
ã¡ãœãããå®è£
ããŸãã
import 'package:flutter/widgets.dart'; main() => runApp( Directionality( textDirection: TextDirection.ltr, child: Center( child: MyStatelessWidget() ), ), ); class MyStatelessWidget extends StatelessWidget {
åŒæ°ã1ã€ã®ãŠã£ãžã§ããã®äŸïŒ
ã¹ããŒãã¬ã¹ãšè¿œå ãããã®ã«ã€ããŠ...
ããããªããŒãã«ã€ããŠ
ãŠã£ãžã§ããã®ã³ã³ãã³ããå€æŽãããšãã¢ããªã±ãŒã·ã§ã³ãèªåçã«åæç»ãããããšã«æ³šæããŠãã ããã main()
é¢æ°ãããŠã£ãžã§ãããåé€ããåŸãHot-reloadã圹ç«ã¡ãŸããã
ãŸãããããã¹ã¯ããçšã«èµ·åãããã¢ãžã¥ãŒã«ã«ãããã¢ããªã±ãŒã·ã§ã³ã®å®è¡é床ã1æ¡é
ããªãããšãç解ããããšãéèŠã§ãã
GestureDetectorã«ã€ããŠ

次ã®ã»ã¯ã·ã§ã³ã§ã¯ã StatefulWidget
ïŒç¶æ
ãå€åãããšå€åãããŠã£ãžã§ããïŒãæ±ããŸãã ãããé¢çœãããããã«ããã®ç¶æ
ãäœããã®åœ¢ã§å€æŽããå¿
èŠããããŸããåæããŸããïŒ ç»é¢äžã®ã¿ããã«å¿ããŠããŠã£ãžã§ããã®ç¶æ
ãå€æŽããŸãã ãããè¡ãã«ã¯ã GestureDetector(âŠ)
ã䜿çšãGestureDetector(âŠ)
ãŠã£ãžã§ããã¯äœãã¬ã³ããªã³ã°ããŸããããã¹ããŒããã©ã³ã®ç»é¢äžã®ã¿ãããç£èŠãã転éãããæ©èœãåŒã³åºãããšã«ã€ããŠå ±åããŸãã
ç»é¢ã®äžå€®ã«ãã¿ã³ãäœæããŸããã¯ãªãã¯ãããšãã³ã³ãœãŒã«ã«ã¡ãã»ãŒãžã衚瀺ãããŸãã
import 'package:flutter/widgets.dart'; main() => runApp( Directionality( textDirection: TextDirection.ltr, child: Container( color: Color(0xFFFFFFFF), child: App(), ), ), ); class App extends StatelessWidget { @override Widget build(BuildContext context) { return Center( child: GestureDetector(
éããã¿ã³ãã¯ãªãã¯ããŠãã³ã³ãœãŒã«ã«ã¡ãã»ãŒãžã衚瀺ããŸãã ããäžåºŠã¯ãªãã¯ãããšãã³ã³ãœãŒã«ã«ã¡ãã»ãŒãžã衚瀺ãããŸãã ããäžåºŠ...倧äžå€«ãåºå·ãåæ¢ããŸãã
ã¹ããŒããã«ãŠã£ãžã§ãã
StatefulWidget
ã·ã³ãã«ã StatelessWidget
ãããããã«ã·ã³ãã«ã ãã ãã埮åŠãªéãããããŸãããããã¯åç¬ã§ã¯ååšããŸãããäœæ¥ã®ããã«ããã®ãŠã£ãžã§ããã®ç¶æ
ãä¿åããå¥ã®ã¯ã©ã¹ãå¿
èŠã§ãã åæã«ããã®èŠèŠéšåïŒãããæ§æãããŠã£ãžã§ããïŒããã®ç¶æ
ã«ãªããŸãã
éå§ããã«ã¯ããŠã£ãžã§ããã¯ã©ã¹ãèŠãŠãã ããã
äžèšã§ã¯ãéåžžã«åçŽãªcreateState()
ã¡ãœãããå®è£
ããã空ã®ããŠã£ãžã§ãããäœæããŸããã ãã®ãã¬ãŒã³ããŒã·ã§ã³ãšç¶æ
ã®åé¢ã«ãããFlutterã¯ã¢ããªã±ãŒã·ã§ã³ã倧å¹
ã«æé©åã§ããŸãã
ç¶æ
ãªããžã§ã¯ãã¯å®å
šã«è€éã§ã¯ãããŸããã ããã«ãäžèšã®StatelessWidget
ãšã»ãŒåãã§ãã äž»ãªéãã¯èŠªã¯ã©ã¹ã§ãã

ã¯ã©ã¹åã¯äžç·ã§å§ãŸãããšã«æ³šæããŠãã ããã Dartã§ã¯ãã¢ã³ããŒã¹ã³ã¢ã§å§ãŸããã¹ãŠã®ååã¯ãã©ã€ããŒãå€ãèå¥ããŸãã ãŸããFlutterã®ãŠã£ãžã§ããã®ç¶æ
ã¯éåžžãã©ã€ããŒãã®ãŸãŸã§ãããããã¯å¿
é ã§ã¯ãããŸããã
ãªããŠçŽ æŽãããã¢ããªã±ãŒã·ã§ã³ã§ãããïŒ ããã¯çŽ æŽãããçµæã§ãã ããããã³ãŒã¹ã®ãã®éšåãå®äºããåã«ãããã«ããã€ãã®èå³æ·±ããŠã£ãžã§ãããèŠãŠã¿ãŸãããã ä»åã ããããèå³æ·±ãã³ãŒãã«ããããã«ãããå€ãã®ã³ãŒããäœæããŸãã ã¢ããªã±ãŒã·ã§ã³ã®å€§éšåã¯ãŠãŒã¶ãŒã«éŠŽæã¿ã®ãããã®ã§ãããæ®ãã¯æ¢ã«ç解ããŠããã¯ãã§ãã
import 'package:flutter/widgets.dart'; main() => runApp(App()); class App extends StatelessWidget { @override Widget build(BuildContext context) { return Directionality( textDirection: TextDirection.ltr, child: Container( padding: EdgeInsets.symmetric( vertical: 60.0, horizontal: 20.0, ), color: Color(0xFFFFFFFF), child: Content(), ), ); } } class Content extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: [ Counter('Manchester United'), Counter('Juventus'), ], ); } } class Counter extends StatefulWidget { final String _name; Counter(this._name); @override State<Counter> createState() => _CounterState(); } class _CounterState extends State<Counter> { int count = 0; @override Widget build(BuildContext context) { return Container( margin: EdgeInsets.only(bottom: 10.0), padding: EdgeInsets.all(4.0), decoration: BoxDecoration( border: Border.all(color: Color(0xFFFD6A02)), borderRadius: BorderRadius.circular(4.0), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [

Column()
ãšRow()
2ã€ã®æ°ãããŠã£ãžã§ããããããŸãã 圌ããäœãããŠããããç解ããŠã¿ãŠãã ããã 次ã®èšäºã§ã¯ãããããããã«è©³ãã調ã¹ãä»ã®ãŠã£ãžã§ãããäžç·ã«æ§æã§ããè€æ°ã®ãŠã£ãžã§ãããèŠãŠããããªã¢ã«ãšåŒã°ããFlutterã©ã€ãã©ãªã䜿çšããŠçŽ æŽãããã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
宿é¡ã«ã€ããŠ
æãªãšãã«ä»ã®äœããèªã¿ããå Žåã¯ãããã«èå³æ·±ããªã³ã¯ã®ãªã¹ãããããŸãïŒ