±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcnblogs£¬±¾ÎÄÖ÷Òª½éÉÜÁËFlutter²¼¾ÖÏà¹ØµÄÄÚÈÝ£¬¶ÔÏà¹ØÖªÊ¶µã½øÐÐÁËÊáÀí£¬²¢´Óʵ¼ÊÀý×Ó´¥·¢£¬½øÒ»²½½²½â¸ÃÈçºÎÈ¥½øÐв¼¾Ö¡£ |
|
1. ¼ò½é
ÔÚ½éÉÜFlutter²¼¾Ö֮ǰ£¬ÎÒÃǵÃÏÈÁ˽âFlutterÖеÄһЩ²¼¾ÖÏà¹ØµÄÌØÐÔ¡£
1.1 ±ß½çÔ¼Êø£¨box constraints£©
box constraintsÓÐÈËÒ²·ÒëΪºÐÔ¼Êø¡¢ÏäÔ¼Êø£¬ÎÒ¸öÈË»¹ÊǾõµÃ±ß½çÔ¼Êø¿ÉÄܸüÖ±¹ÛһЩ¡£
FlutterÖеı߽çÔ¼Êø£¬ÊÇÖ¸widget¿ÉÒÔ°´ÕÕÖ¸¶¨ÏÞ¶¨Ìõ¼þ£¬À´¾ö¶¨×ÔÉíÈçºÎÕ¼Óò¼¾Ö¿Õ¼ä¡£Flutter½è¼øÁ˺ܶàReactÏà¹ØµÄ¶«Î÷£¬°üÀ¨Ò»Ð©²¼¾Ö˼Ï룬µ«ÊÇËü×ÔÉíûÓгéÀë³ö²¼¾ÖÑùʽ£¬¶øÊÇÓò»Í¬µÄwidgetȥʵÏÖ²»Í¬µÄ²¼¾Ö£¬½«ÑùʽǶÈëwidgetÖУ¬Óû§¿ÉÒÔÏñ´î»ýľһÑùд²¼¾Ö£¬Ð´·¨ÉϸúReactºÜÏñ£¬Ö»²»¹ýûÁËÑùʽµÄÉ趨¡£
ÕâÑù×öµÄºÃ´¦£¬ÎÒ¾õµÃ¿ÉÄÜÊÇΪÁËͳһµÄäÖȾ¡£¼ÓÈëÑùʽ£¬»áÈò¼¾Ö¸´ÔÓ²»ÉÙ£¬ÔÚäÖȾ²ãÃæ»á½µµÍºÜ¶àÐÔÄÜ¡£Òò´Ë£¬FlutterÔÚ´óµÄ·½ÏòÉÏ£¬¼ÓÈ벻ͬÀàÐ͵IJ¼¾Öwidget¡£ÔÚСµÄ·½ÏòÉÏ£¬Ö»¸ø³öºÜÉٵ͍֯»¯µÄ¶«Î÷£¬½«²¼¾ÖÏÞ¶¨ÔÚÓÐÏ޵ķ¶Î§ÄÚ£¬ÔÚÍê³É²¼¾ÖµÄͬʱ£¬ÈÃÕû¸öäÖȾÄܹ»Í³Ò»£¬¼Ó¿ìÁ˸üкÍäÖȾ¡£
µ«ÊÇ£¬È±µãÒ²ÊÇͬÑùÃ÷ÏÔ£¬ÉÙÁ˺ܶàÁé»îÐÔ£¬²»Í¬µÄ²¼¾Ö·½Ê½¶¼±»³éÀë³öÁËwidget£¬´ó¼ÒÐèÒªÁ˽âµÄwidget·Ç³£¶à£¬Ôö¼ÓÁËѧϰ³É±¾¡£
1.2 Ô¼ÊøÖÖÀà
ÔÚFlutterÖУ¬widgetÊÇÓÉÆäµ×²ãµÄRenderBoxäÖȾ£¬äÖȾ±ß½çµÄÔ¼Êø£¨Constraints£©Óɸ¸¼¶¸ø³ö£¬widgetÔÚÕâÐ©Ô¼ÊøÏµ÷Õû×ÔÉí³ß´ç¡£Ô¼Êø°üÀ¨×îС×î´ó¿í¸ß£¬³ß´çÔòÊǾßÌåµÄ¿í¸ß¡£
ÔÚAndroidÖУ¬²¼¾ÖµÄ¿í¸ßÏÞ¶¨ÓÐÈýÖÖ£¬match_parent¡¢wrap_contentÒÔ¼°¾ßÌå³ß´ç¡£ÔÚFlutterÖУ¬Ò²ÓÐÕâÈýÖÖÔ¼Êø¡£
¾¡¿ÉÄÜ´óµÄÔ¼Êø£¬ÀýÈçCenter¡¢ListViewµÈ£»
¸úËæÄÚÈÝ´óСµÄÔ¼Êø£¬ÀýÈçTransform¡¢OpacityµÈ£»
Ö¸¶¨³ß´çµÄÔ¼Êø£¬ÀýÈçImage¡¢TextµÈ£»
µ«ÊÇ£¬Flutter²¢Ã»ÓаÑwidget´¦ÀíµÄÕâô¾ø¶Ô£¬ÕâÐ©Ô¼ÊøÌõ¼þ°üº¬ÔÚwidgetÀ²»ÏñAndroid¿ÉÒÔÔÚÍâÃæÈ¥Ö¸¶¨¡£Òò´Ë£¬Ò»Ð©widget£¬ÀýÈçContainer£¬»á¸ù¾Ý²ÎÊýµÄ²»Í¬£¬Ô¼ÊøÌõ¼þÒ²²»Í¬¡£ContainerĬÈÏÊǾ¡¿ÉÄÜ´óµÄ£¬µ«ÊǸø¶¨³ß´çµÄ»°£¬¾Í»áÓÅÏÈʹÓþßÌåÖµ¡£²»Í¬µÄwidget¿ÉÄÜÉèÖÃÌõ¼þ²»Í¬¡¢Æä×Ówidget²»Í¬£¬Ô¼ÊøÌõ¼þÒ²»á²»Ò»Ñù¡£Flutter½«Ã¿ÖÖwidgetÏÞÖÆÔÚ²»Í¬µÄÔ¼Êø·¶Î§Àʵ¼Ê²¼¾ÖµÄʱºò£¬»¹ÐèÒª×ÛºÏÈ¥¿¼ÂÇ¡£
2. ·ÖÀà
°´ÕÕÔ¼ÊøÌõ¼þÀ´·ÖÀ࣬ºÜ¶àwidget²»Ì«ºÃÇø·Ö¿ªÀ´£¬¹Ù·½Ò²ÊǸù¾ÝÆä×ÓÔªËØµÄ¸öÊýÀ´·ÖÀà¡£
µ¥¸ö×ÓÔªËØ£¨child£©µÄ²¼¾Ö£¬°üÀ¨Container¡¢PaddingµÈ18ÖÖ£¨Ä¿Ç°ÊÇ2018Äê5ÔÂ25ÈÕ£¬ºóÐøÎÒÏë¿Ï¶¨»áÔö¼ÓµÄ£¬ÏÂÃæÀàËÆ£©£»
¶à¸ö×ÓÔªËØ£¨children£©µÄ²¼¾Ö£¬°üÀ¨Row¡¢ColumnµÈ11ÖÖ£»
layout helper£¬ÀýÈçListView.Builder£¬ÔÚÔªËØ¶àµÄʱºò£¬ÓÃÕâÖÖ·½Ê½¸ü¼ÓµÄ¸ßЧ£¬ÀàËÆAndroidµÄRecyclerView£¬ÓÐ×Ô¶¯µÄ»ØÊÕ»úÖÆ¡£ÕâÖÖÑϸñÒâÒåÉϲ»ÄÜËãÊÇÒ»¸öÖÖÀ࣬ÎÒ¾õµÃÕâÖÖhelper»áÔ½À´Ô½¶à¡£
2.1 ÓÅȱµã
ÆäÖÐÈÕ³£ÖÐÓõĶàµÄ£¬ÀýÈçContainer¡¢Padding¡¢Center¡¢Align¡¢Row¡¢Column¡¢Stack¡¢ListViewµÈÒ²ÓÐÉÏÊ®ÖÖ¡£
FlutterÌṩ½Ó½ü30¶àÖÖ²»Í¬µÄ²¼¾Öwidget£¬»¹ÊÇÔ´ÓÚÆä¶ÔwidgetµÄ¶¨Î»£¨ÔÚ´Ë´¦²»ÔÙ²ûÊö£¬ÏëÁ˽âµÄ£¬¿ÉÒÔ·¿´±ÊÕß֮ǰÎÄÕµĽéÉÜ£©¡£¶Ô±ÈÆäËûÒÆ¶¯¶ËµÄ¿ª·¢Æ½Ì¨£¬¿ÉÒÔ¿´³öFlutterµÄ²¼¾ÖwidgetÊǾ޶࣬ÕâÒ²ÊÇΪʲôFlutterÏÖÔÚѧϰÇúÏߺܳ¤µÄÒ»¸öÔÒò¡£
ÏÈÀ´ËµÏÂÓŵ㣬ͳһäÖȾ£¬¸üÐÂЧÂʸü¸ß¡£µ«ÊÇ£¬¶ÔÓÚÆÕͨ¿ª·¢Õß¶øÑÔ£¬ÊDz»»áȥ̫ÔÚºõÕâЩµÄ¡£ÐÔÄܸ߱¾À´¾ÍÊÇÆ½Ì¨Ó¦¸ÃÌṩµÄ×î»ù±¾µÄÄÜÁ¦£¬ÄѵÀ²»ÊÇÄãÓ¦¸ÃÌṩµÄÂð£¿
È»ºó˵ÏÂȱµã°É£¬ÕÆÎÕÆðÀ´»¹ÊǷdz£·ÑÊµģ¬²¼¾ÖÆðÀ´Ò²ÊÇͦµ°Ì۵ġ£³£¹æµÄ²¼¾Ö»¹ºÃ£¬Ò»µ½¸´ÔӵIJ¼¾Ö£¬¾õµÃÕâ¸öÒ²ÄÜʵÏÖ£¬ÄǸöÒ²ÄÜʵÏÖ£¬×îºó²»ÖªµÀÄĸö¿ÉÒÔʵÏÖ¡£
2.2 ¸öÈË¿´·¨
Flutter¶ÔÓÚÐÔÄܵÄÓÅ»¯£¬°Ñƽ̨²àµÄһЩ³É±¾×ª½Óµ½¿ª·¢ÕßÉíÉÏ£¬²»¹ýÄØ£¬ÏÖÔÚÒ²ÊÇFlutterµÄ³õÆÚ£¬¿ÉÒÔ¿´³ö£¬ÕûÌåµÄÉè¼ÆË¼Â·»¹ÊǷdz£ºÃµÄ£¬Ò²Ö»ÓйȸèÕâÖÖÂÖ×Ӵ󳧲ŸÒÕâô¸É¡£µ«ÊÇ£¬ºÜÃ÷ÏÔÉÙÁËЩÈËΪ¹Ø»³£¬²»Í¬widget¼äÔ¼ÊøÌõ¼þ´©²å×Å£¬Ò²¿ÉÒÔ˵Flutter²¼¾Ö¿Ø¼þÖÖÀàµÄÔö¼Ó£¬ÊÇÆä²»¶ÏµÄ´ò²¹¶¡µ¼Öµģ¬ºóÐøµÄ¸÷ÖÖhelper£¬Ò²ÊÇΪÁËÌî¿Ó£¬ÕâÒ»¿é¶ùFlutterÏÔȻûÓд¦ÀíµÄºÜºÃ¡£
µ«ÊÇ£¬·²Ê¶¼Óиö¹ý³Ì£¬²»ÄÜ˵FlutterÕâЩµØ·½×öµÄ²»ºÃ£¬Ö»ÊÇĿǰ¿´ÆðÀ´±È½Ï»ìÂÒ£¬ÀíÏëµÄ¼Ü¹¹Éè¼Æ£¬Â䵨ÏÂÀ´£¬¿ÉÄܾͲ»ÊÇÄÇô¼òµ¥£¬¿ª·¢ÕßµÄÐèÇóǧ²îÍò±ð£¬ÓÐÁËÉú̬£¬Ê²Ã´¶¼ºÃ˵£¬µ±È»Õâ¸ö¹ý³Ì£¬Ô¤¼ÆÊÇ»á·Ç³£µÄ»ºÂý¡£
3. widgetÏê½â
ÔÚFlutterÖУ¬ÎÒÃÇÆ½Ê±×Ô¶¨ÒåµÄwidget£¬Ò»°ã¶¼ÊǼ̳Ð×ÔStatefulWidget»òStatelessWidget£¨²¢²»ÊÇÖ»ÓÐÕâÁ½ÖÖ£©£¬ÕâÁ½ÖÖwidgetÒ²ÊÇĿǰ×î³£ÓõÄÁ½ÖÖ¡£Èç¹ûÒ»¸ö¿Ø¼þ×ÔÉí״̬²»»áÈ¥¸Ä±ä£¬´´½¨Á˾ÍÖ±½ÓÏÔʾ£¬²»»áÓÐɫֵ¡¢´óС»òÕ߯äËûÊôÐԵı仯£¬ÕâÖÖwidgetÒ»°ã¶¼ÊǼ̳Ð×ÔStatelessWidget£¬³£¼ûµÄÓÐContainer¡¢ScrollViewµÈ¡£Èç¹ûÒ»¸ö¿Ø¼þÐèÒª¶¯Ì¬µÄÈ¥¸Ä±ä»òÕßÏàӦһЩ״̬£¬ÀýÈçµã»÷̬¡¢É«Öµ¡¢ÄÚÈÝÇøÓòµÈ£¬ÄÇôһ°ã¶¼ÊǼ̳Ð×ÔStatefulWidget£¬³£¼ûµÄÓÐCheckBox¡¢AppBar¡¢TabBarµÈ¡£Æäʵµ¥´¿µÄ´ÓÃû×ÖÒ²¿ÉÒÔ¿´³öÕâÁ½ÖÖwidgetµÄÇø±ð£¬ÕâÁ½ÖÖwidget¶¼ÊǼ̳Ð×ÔWidgetÀà¡£
3.1 WidgetÀà
WidgetÀàÔÚFlutterÖÐÊǷdz£ÖØÒªµÄ£¬¼Ì³Ð×ÔWidgetÀàµÄÓÐPreferredSizeWidget¡¢ProxyWidget¡¢RenderObjectWidget¡¢StatefulWidget¡¢StatelessWidget¡£ÎÒÃÇÈÕ³£Ê¹Óõľø´ó²¿·Öwidget¶¼ÊǼ̳Ð×ÔWidgetÀ࣬
²é¿´WidgetÀàÔ´Â룬ÄÚ²¿ÊµÏַdz£¼òµ¥£¬¹¹Ô캯ÊýÈçÏÂ
const Widget({
this.key });
final Key key; |
Õâ¸ökeyµÄ×÷Óã¬×¢ÊÓÉÏдµÄºÜÇå³þ£¬ÊÇÓÃÀ´¿ØÖÆÔÚwidgetÊ÷ÖÐÌæ»»widgetµÄʱºòʹÓõġ£ÆäÖÐKeyÀàÊÇWidget¡¢ElementÒÔ¼°SemanticsNodeµÄΨһ±êʶ·û£¬¼Ì³Ð×ÔKeyµÄ»¹ÓÐLocalKeyÒÔ¼°GlobalKey¡£
3.2 State
ÔÚ˵µ½StatefulWidget֮ǰ£¬ÏÈ˵ÏÂState¡£StateµÄ×÷ÓÃÓÐÁ½µã£º
ÔÚwidget¹¹½¨µÄʱºò¿ÉÒÔ±»Í¬²½¶ÁÈ¡£»
ÔÚwidgetµÄÉúÃüÖÜÆÚÖпÉÄܻᱻ¸Ä±ä¡£
3.2.1 StateÉúÃüÖÜÆÚ
StateµÄÉúÃüÖÜÆÚÓÐËÄÖÖ״̬£º
created£ºµ±State¶ÔÏó±»´´½¨Ê±ºò£¬State.initState·½·¨»á±»µ÷Óã»
initialized£ºµ±State¶ÔÏó±»´´½¨£¬µ«»¹Ã»ÓÐ×¼±¸¹¹½¨Ê±£¬State.didChangeDependenciesÔÚÕâ¸öʱºò»á±»µ÷Óã»
ready£ºState¶ÔÏóÒѾ׼±¸ºÃÁ˹¹½¨£¬State.disposeûÓб»µ÷ÓõÄʱºò£»
defunct£ºState.dispose±»µ÷Óúó£¬State¶ÔÏó²»Äܹ»±»¹¹½¨¡£

ÍêÕûÉúÃüÖÜÆÚÈçÏ£º
´´½¨Ò»¸öState¶ÔÏóʱ£¬»áµ÷ÓÃStatefulWidget.createState£»
ºÍÒ»¸öBuildContextÏà¹ØÁª£¬¿ÉÒÔÈÏΪ±»¼ÓÔØÁË£¨mounted£©£»
µ÷ÓÃinitState£»
µ÷ÓÃdidChangeDependencies£»
¾¹ýÉÏÊö²½Ö裬State¶ÔÏó±»ÍêÈ«µÄ³õʼ»¯ÁË£¬µ÷ÓÃbuild£»
Èç¹ûÓÐÐèÒª£¬»áµ÷ÓÃdidUpdateWidget£»
Èç¹û´¦ÔÚ¿ª·¢Ä£Ê½£¬ÈȼÓÔØ»áµ÷ÓÃreassemble£»
Èç¹ûËüµÄ×ÓÊ÷£¨subtree£©°üº¬ÐèÒª±»ÒƳýµÄState¶ÔÏ󣬻áµ÷ÓÃdeactivate£»
µ÷ÓÃdispose,State¶ÔÏóÒÔºó¶¼²»»á±»¹¹½¨£»
µ±µ÷ÓÃÁËdispose,State¶ÔÏó´¦ÓÚδ¼ÓÔØ£¨unmounted£©£¬ÒѾ±»disposeµÄState¶ÔÏóûÓа취±»ÖØÐ¼ÓÔØ£¨remount£©¡£
3.2.2 setState
StateÖбȽÏÖØÒªµÄÒ»¸ö·½·¨ÊÇsetState£¬µ±ÐÞ¸Ä״̬ʱ£¬widget»á±»¸üС£±È·½Ëµµã»÷CheckBox£¬»á³öÏÖÑ¡ÖкͷÇÑ¡ÖÐ״̬֮¼äµÄÇл»£¬¾ÍÊÇͨ¹ýÐÞ¸Ä״̬À´´ïµ½µÄ¡£
²é¿´setStateÔ´Â룬ÔÚһЩÒì³£µÄÇé¿öϽ«»áÅ׳öÒì³££º
´«ÈëµÄΪnull£»
´¦ÔÚdefunct½×¶Î£»
created½×¶Î»¹Ã»Óб»¼ÓÔØ£¨mounted£©£»
²ÎÊý·µ»ØÒ»¸öFuture¶ÔÏó¡£
¼ì²éÍêһϵÁÐÒì³£ºó£¬×îºóµ÷ÓôúÂëÈçÏ£º
_element.markNeedsBuild(); |
markNeedsBuildÄÚ²¿£¬ÔòÊÇͨ¹ý±ê¼ÇelementΪdiry£¬ÔÚÏÂÒ»Ö¡µÄʱºòÖØ½¨£¨rebuild£©¡£¿ÉÒÔ¿´³ösetState²¢²»ÊÇÁ¢¼´ÉúЧ£¬ËüÖ»Êǽ«widget½øÐÐÁ˱ê¼Ç£¬ÕæÕýµÄrebuild²Ù×÷£¬ÔòÊǵȵ½ÏÂÒ»Ö¡µÄʱºò²Å»áÈ¥½øÐС£
3.3 StatefulWidgetºÍStatelessWidget
StatefulWidgetºÍStatelessWidgetÈçÏÂËùʾ

Ò»¸öStatelessWidget¿ÉÒÔÓöà¸ö²»Í¬µÄBuildContext¹¹½¨£¬¶øÒ»¸öStatefulWidget»áΪÿ¸öBuildContext´´½¨Ò»¸öState¶ÔÏó¡£
3.3.1 StatelessWidget
¶ÔÓÚStatelessWidget£¬build·½·¨»áÔÚÈçÏÂÈýÖÖÇé¿öϵ÷Óã¬
widgetµÚÒ»´Î±»²åÈëµ½Ê÷ÖУ»
widgetµÄ¸¸½Úµã¸ü¸ÄÁËÅäÖã¨configuration£©£»
widgetÒÀÀµµÄInheritedWidget¸Ä±äÁË¡£
class GreenFrog
extends StatelessWidget {
const GreenFrog({ Key key }) : super(key: key);
@override
Widget build(BuildContext context) {
return new Container(color: const Color(0xFF2DBD3A));
}
} |
3.3.2 StatefulWidget
StatefulWidgetµÄÁ½¸öÖ÷ÒªÀà±ð£º
ÔÚinitStateÖд´½¨×ÊÔ´£¬ÔÚdisposeÖÐÏú»Ù£¬µ«ÊDz»ÒÀÀµÓÚInheritedWidget»òÕßµ÷ÓÃsetState·½·¨£¬ÕâÀàwidget»ù±¾ÉÏÓÃÔÚÒ»¸öÓ¦ÓûòÕßÒ³ÃæµÄroot£»
ʹÓÃsetState»òÕßÒÀÀµÓÚInheritedWidget£¬ÕâÖÖÔÚÓªÒµÉúÃüÖÜÆÚÖÐ»á±»ÖØ½¨£¨rebuild£©ºÜ¶à´Î¡£
class YellowBird
extends StatefulWidget {
const YellowBird({ Key key }) : super(key: key);
@override
_YellowBirdState createState() => new _YellowBirdState();
}
class _YellowBirdState extends State<YellowBird>
{
@override
Widget build(BuildContext context) {
return new Container(color: const Color(0xFFFFE306));
}
} |
4. ÈçºÎ²¼¾Ö
ÿ¸öÒ³ÃæÉè¼Æ¶¼²»Ò»Ñù£¬ÏàÍ¬Ò³Ãæ¿ÉÑ¡ÔñµÄ²¼¾Ö·½Ê½Ò²²»Ò»Ñù£¬Èç¹ûµ¥´¿µÄ˵Ӧ¸ÃÈçºÎÈ¥²¼¾Ö£¬ÎÒ¾õµÃ²»ÏÖʵ£¬´ó¼Ò¿ÉÒԲο¼ÏÂFlutter¹Ù·½µÄ²¼¾Ö½Ì³Ì¡£½ÓÏÂÀ´£¬±ÊÕߣ¬Í¨¹ýÒ»¸ö¼òµ¥µÄÒ³Ãæ£¬À´Ò»²½Ò»²½µÄ²ð½â²¼¾ÖµÄÁ÷³Ì¡£Õû¸ö¹ý³Ì£¬»ù±¾Éϰ´ÕÕ²ð½â¡¢×é¼þ·â×°¡¢¾ßÌå²¼¾ÖÕâÈý²½À´µÄ¡£
4.1 ²ð½â

4.1.1 ÕûÌå²ð½â
¸ù¾ÝÉè¼ÆÍ¼£¬¿ÉÒÔ¿´³öÕûÌåʱ·ÖÐÐչʾµÄ£¬Òò´Ë×îÍâ²ãÊÇÒ»¸öColumnÔªËØ
µÚÒ»ÐÐΪ±êÌâ£¬Éæ¼°µ½²»¶Ô³ÆµÄ²¼¾Ö£¬¿ÉÒÔÓÃÒ»¸öStack»òÕßRowÀ´½øÐУ¬ÓÃRowµÄ»°£¬ÔòÐèÒªÓÒ±ßÌîÉÏÒ»¸ö¿Õ°×µÄwidgetռλ¡£Ò²¿ÉÄÜ»áʹÓÃAppBar£¬½«µ×²¿ÒõÓ°È¥µôÒ²ÄÜʵÏÖÏàͬЧ¹û£»
µÚ¶þÐпÉÒÔ¿´×÷Ò»¸öRow£¬·ÖÁ½¿é²¼¾Ö¡£Óұ߲¿·Ö£¬Éæ¼°µ½µþ¼Ó£¬»á¿¼ÂÇStack£»
µÚÈýÐбȽϸ´ÔÓ£¬ÕûÌå¿´£¬Ò²ÊÇÒ»ÐÐÒ»ÐнøÐÐչʾµÄ£¬Òò´Ë×îÍâ²ãʱһ¸öColumn¡£ÖмäµÄÎı¾²¿·ÖÐèÒª¸ù¾Ý¸öÊý×Ô¶¯»»ÐУ¬Òò´Ë¿¼ÂÇʹÓÃWrap¡£Ô¤Ï°Õâ¸öµØ·½Éæ¼°µ½µþ¼Ó£¬¿¼ÂÇStackʵÏÖ£»
µÚËÄÐпÉÒÔ¿´×÷Ò»¸öRow£¬·ÖÈý¿é½øÐв¼¾Ö£»
µÚÎåÐпÉÒÔ¿´×÷Ò»¸öRow£¬·ÖÁ½¿é²¼¾Ö¡£
ÿһÐÐÖ®¼äµÄ¼ä¸ô£¬Ôò¿ÉÒÔ¿¼ÂÇÓÃPadding»òÕßContainerÀ´ÉèÖá£
ͨ¹ýÉÏÃæÕâÑùÒ»²½Ò»²½µÄ·ÖÎöºó£¬»ù±¾É϶ԴóÖµIJ¼¾ÖÓÐÁËÒ»¸öÁ˽⣬×îÍâ²ãµÄ¿Ø¼þ´óÖÂÑ¡¶Ô£¨Ö»ÒªÄÜʵÏֵϰ£¬¾ÍÊǸ´ÔÓ¶ÈÒÔ¼°Ð§ÂʵÄÎÊÌ⣩£¬È»ºóÒ»²½Ò»²½µÄ²ð½âÿһÐеÄÔªËØ£¬Èç¹ûÓÐÖØ¸´µÄ»òÕß¾õµÃ¿ÉÒÔ·â×°³öÀ´µÄ²¿·Ö£¬Ôò½øÐÐÏÂÒ»²½¡£
4.1.2 ¾Ö²¿²ð½â
ÿһÐеIJð½â£¬´óÖÂÒ²Êǰ´ÕÕÕâ¸ö˼·À´½øÐУ¬Òò´Ë±ÊÕßÔÚÕâÀï¾Í²»×ö½²½âÁË¡£
4.2 ×é¼þ·â×°
ÀýÈçÉÏÃæ£¬±ÊÕßÏë¶ÔµÚËÄÐеÄÕâÖÖչʾ½øÐзâ×°£¬¾õµÃ½ñºóµÄ²¼¾Ö¿ÉÄÜ»áÓõ½£¬Òò´ËÔÚÕâÒ»²½£¬¿ÉÒÔÏȰÑÕâÒ»¿é¶ù³éÀë³öÒ»¸ö¿Ø¼þ¡£ÀûÓÃRowµÄmainAxisAlignmentÒÔ¼°ExpandedÀ´ÊµÏÖÕâÖÖЧ¹û£¬¾ßÌåµÄʵÏÖ±ÊÕß²»ÔÙÏêϸµÄÃèÊöÁË¡£
¾¹ýÕâÒ»²½£¬ÕûÌåµÄ¹æ»®Éè¼ÆÍ¼ÒѾÓÐÁË£¬¸÷¸ö×é¼þÒ²¶¼ÓÐÁË£¬½ÓÏÂÀ´µÄ¹¤×÷¾ÍÊÇ×é×°ÁË¡£
4.3 ¾ßÌå²¼¾Ö
¾ßÌå²¼¾ÖÉè¼Æµ½Ò»Ð©Ï¸½ÚµÄµØ·½£¬ÀýÈç¼ä¸ô£¨Padding»òÕßContainer£©¡¢¾Ó×ó¾ÓÓÒ¾ÓÖУ¨Align£©¡¢µã»÷ʼþ£¨GestureDetector£©ÒÔ¼°Ô²½Ç£¨ClipRRect£©µÈÒ»Ð©ÌØÊâÇé¿ö£¬»ù±¾ÉϾÍÊÇǶÌ×£¬Ò»²ãÒ»²ãȥʵÏÖ¡£
ÔÚʵ¼Ê²¼¾ÖÖУ¬±ÊÕßʵ¼ÊʹÓõÄÊÇScaffold£¬¶¥²¿µÄAppBar½«ÒõÓ°Ö±½ÓÈ¥µô¼´¿ÉʵÏÖЧ¹û£¬body²¿·ÖÔòʵÏÖ2-5ÐеÄÄÚÈÝ¡£×îÍâ²ãÌ×Ò»¸öColumnÒ²ÄÜʵÏÖ£¬±¾ÖÊÉ϶¼Ã»Ê²Ã´Çø±ð£¬ÔËÐÐЧ¹ûͼÈçÏÂËùʾ¡£

4.4 ´úÂë
ÂëGithubµØÖ·
|