±à¼ÍƼö: |
±¾ÎÄÖØµã½éÉÜÁËFlutter
¼Ü¹¹ºÍʵÏÖÔÀí£¬¿ò¼Ü£¬Flutter ÔÚÂí·äÎÑÉ̼ҶËApp ÖеÄÓ¦ÓÃʵ¼ù¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
Ò»Ö±ÒÔÀ´£¬¿çƽ̨¿ª·¢¶¼ÊÇÀ§ÈÅÒÆ¶¯¿Í»§¶Ë¿ª·¢µÄÄÑÌâ¡£
ÔÚÂí·äÎÑÂÃÓÎ App ºÜ¶àÒµÎñ³¡¾°ÀÎÒÃdz¢ÊÔ¹ýһЩÖ÷Á÷µÄ¿çƽ̨¿ª·¢½â¾ö·½°¸£¬
±ÈÈçWebView ºÍ React Native£¬À´ÌáÉý¿ª·¢Ð§ÂʺÍÓû§ÌåÑé¡£µ«ÕâÁ½ÖÖ·½Ê½Ò²´øÀ´ÁËеÄÎÊÌâ¡£
±ÈÈçʹÓà WebView ¿çƽ̨·½Ê½£¬Óŵãȷʵ·Ç³£Ã÷ÏÔ¡£»ùÓÚ WebView µÄ¿ò¼Ü¼¯³ÉÁ˵±Ï Web
¿ª·¢µÄÖî¶àÓÅÊÆ£º·á¸»µÄ¿Ø¼þ¿â¡¢¶¯Ì¬»¯¡¢Á¼ºÃµÄ¼¼ÊõÉçÇø¡¢²âÊÔ×Ô¶¯»¯µÈµÈ¡£µ«ÊÇȱµãҲͬÑùÃ÷ÏÔ£ºäÖȾЧÂʺÍ
JavaScript µÄÖ´ÐÐÄÜÁ¦¶¼±È½Ï²î£¬Ê¹Ò³ÃæµÄ¼ÓÔØËٶȺÍÓû§ÌåÑé¶¼²»¾¡ÈçÈËÒâ¡£
¶øÊ¹ÓÃÒÔ React Native£¨¼ò³Æ RN£©Îª´ú±íµÄ¿ò¼Üʱ£¬Î¬»¤ÓÖ³ÉÁË´óÄÑÌâ¡£RN ʹÓÃÀà HTML+JS
µÄ UI ´´½¨Âß¼£¬Éú³É¶ÔÓ¦µÄÔÉúÒ³Ãæ£¬½«Ò³ÃæµÄäÖȾ¹¤×÷½»¸øÁËϵͳ£¬ËùÒÔäÖȾЧÂÊÓкܴóµÄÓÅÊÆ¡£µ«ÓÉÓÚ
RN ´úÂëÊÇͨ¹ý JS ÇŽӵķ½Ê½×ª»»ÎªÔÉúµÄ¿Ø¼þ£¬ËùÒÔÊܸ÷¸öϵͳ¼äµÄ²îÒìÓ°Ïì·Ç³£´ó£¬ËäÈ»¿ÉÒÔ¿ª·¢Ò»Ì×´úÂ룬µ«¶Ô¸÷¸öƽ̨µÄÊÊÅäÈ´·Ç³£µÄ·±ËöºÍÂé·³¡£
ΪʲôÊÇ Flutter
2018 Äê 12 Ô³õ£¬Google Õýʽ·¢²¼ÁË¿ªÔ´¿çƽ̨ UI ¿ò¼Ü Flutter 1.0 Release
°æ±¾£¬Âí·äÎѵçÉ̿ͻ§¶ËÍŶӽøÐÐÁ˵÷ÑÐÓëʵ¼ù£¬·¢ÏÖFlutterÄܺܺõİïÖúÎÒÃǽâ¾ö¿ª·¢ÖÐÓöµ½µÄÎÊÌâ¡£
¿çƽ̨¿ª·¢£¬Õë¶Ô Android Óë iOS µÄ·ç¸ñÉè¼ÆÁËÁ½Ì×Éè¼ÆÓïÑԵĿؼþʵÏÖ£¨Material
& Cupertino£©¡£ÕâÑù²»µ«Äܹ»½ÚÔ¼ÈËÁ¦³É±¾£¬¶øÇÒÔÚÓû§ÌåÑéÉϸüºÃµÄÊÊÅä App ÔËÐÐµÄÆ½Ì¨¡£
ÖØÐ´ÁËÒ»Ì×¿çÆ½Ì¨µÄ UI ¿ò¼Ü£¬äÖȾÒýÇæÊÇÒÀ¿¿ Skia ͼÐοâʵÏÖ¡£Flutter ÖеĿؼþÊ÷Ö±½ÓÓÉäÖȾÒýÇæºÍ¸ßÐÔÄܱ¾µØ
ARM ´úÂëÖ±½Ó»æÖÆ£¬²»ÐèҪͨ¹ýÖмä¶ÔÏó£¨Web Ó¦ÓÃÖеÄÐéÄâ DOM ºÍÕæÊµ DOM£¬ÔÉú App
ÖеÄÐéÄâ¿Ø¼þºÍƽ̨¿Ø¼þ£©À´»æÖÆ£¬Ê¹ËüÓнӽüÔÉúÒ³ÃæµÄÐÔÄÜ£¬°ïÖúÎÒÃÇÌṩ¸üºÃµÄÓû§ÌåÑé¡£
ͬʱ֧³Ö JIT ºÍ AOT ±àÒë¡£JIT±àÒ뷽ʽʹÆäÔÚ¿ª·¢½×¶ÎÓиö±¸ÊÜ»¶ÓµÄ¹¦ÄÜ¡ª¡ªÈÈÖØÔØ£¨HotReload£©£¬ÕâÑùÔÚ¿ª·¢Ê±¿ÉÒÔʡȥ¹¹½¨µÄ¹ý³Ì£¬Ìá¸ß¿ª·¢Ð§ÂÊ¡£¶øÔÚ
Release ÔËÐн׶βÉÓà AOT µÄ±àÒ뷽ʽ£¬Ê¹Ö´ÐÐЧÂʷdz£¸ß£¬Èà Release °æ±¾·¢»Ó¸üºÃµÄÐÔÄÜ¡£
ÓÚÊÇ£¬µçÉ̿ͻ§¶ËÍŶӾö¶¨Ì½Ë÷ Flutter ÔÚ¿çÆ½Ì¨¿ª·¢ÖеÄпÉÄÜ£¬²¢ÂÊÏÈÓ¦ÓÃÓÚÉÌ¼Ò¶Ë App
ÖС£ÔÚ±¾ÎÄÖУ¬ÎÒÃǽ«½áºÏ Flutter ÔÚÂí·äÎÑÉÌ¼Ò¶Ë App ÖеÄÓ¦ÓÃʵ¼ù£¬Ì½ÌÖ Flutter
¼Ü¹¹µÄʵÏÖÔÀí£¬ÓкÎÓÅÊÆ£¬ÒÔ¼°ÈçºÎ°ïÖúÎÒÃǽâ¾öÎÊÌâ¡£
Flutter ¼Ü¹¹ºÍʵÏÖÔÀí
Flutter ʹÓà Dart ÓïÑÔ¿ª·¢£¬Ö÷ÒªÓÐÒÔϼ¸µãÔÒò£º
Dart Ò»°ãÇé¿öÏÂÊÇÔËÐÐ DartVM ÉÏ£¬µ«ÊÇÒ²¿ÉÒÔ±àÒëΪ ARM ´úÂëÖ±½ÓÔËÐÐÔÚÓ²¼þÉÏ¡£
Dart ͬʱ֧³Ö AOT ºÍ JIT Á½ÖÖ±àÒ뷽ʽ£¬¿ÉÒÔ¸üºÃµÄÌá¸ß¿ª·¢ÒÔ¼° App µÄÖ´ÐÐЧÂÊ¡£
Dart ¿ÉÒÔÀûÓöÀÌØµÄ¸ôÀëÇø£¨Isolate£©ÊµÏÖ¶àÏ̡߳£¶øÇÒ²»¹²ÏíÄڴ棬¿ÉÒÔʵÏÖÎÞËø¿ìËÙ·ÖÅä¡£
·Ö´úÀ¬»ø»ØÊÕ£¬·Ç³£ÊÊºÏ UI ¿ò¼ÜÖг£¼ûµÄ´óÁ¿ Widgets ¶ÔÏó´´½¨ºÍÏú»ÙµÄÓÅ»¯¡£
ÔÚΪ´´½¨µÄ¶ÔÏó·ÖÅäÄÚ´æÊ±£¬Dart ÊÇÔÚÏÖÓеĶÑÉÏÒÆ¶¯Ö¸Õ룬±£Ö¤ÄÚ´æµÄÔö³¤ÊdzÌÏßÐԵģ¬ÓÚÊǾÍÊ¡Á˲éÕÒ¿ÉÓÃÄÚ´æµÄ¹ý³Ì¡£
Dart Ö÷ÒªÓÉ Google ¸ºÔ𿪷¢ºÍά»¤¡£Ä¿Ç° Dart ×îа汾ÒѾÊÇ 2.2£¬Õë¶Ô App
ºÍ Web ¿ª·¢×öÁ˺ܶàÓÅ»¯¡£²¢ÇÒ¶ÔÓÚ´ó¶àÊýµÄ¿ª·¢Õß¶øÑÔ£¬Dart µÄѧϰ³É±¾·Ç³£µÍ¡£
Flutter ¼Ü¹¹Ò²ÊDzÉÓõķֲãÉè¼Æ¡£´Óϵ½ÉÏÒÀ´ÎΪ£ºEmbedder£¨Ç¶ÈëÆ÷£©¡¢Engine¡¢Framework¡£

Embedder ÊÇǶÈë²ã£¬×öºÃÕâÒ»²ãµÄÊÊÅä Flutter »ù±¾¿ÉÒÔǶÈëµ½ÈÎºÎÆ½Ì¨ÉÏÈ¥£»
Engine ²ãÖ÷Òª°üº¬ Skia¡¢Dart ºÍ Text¡£Skia ÊÇ¿ªÔ´µÄ¶þλͼÐο⣻Dart
²¿·ÖÖ÷Òª°üÀ¨ runtime¡¢Garbage Collection¡¢±àÒëģʽ֧³ÖµÈ£»Text ÊÇÎı¾äÖȾ¡£
Framework ÔÚ×îÉϲ㡣ÎÒÃǵÄÓ¦ÓÃÎ§ÈÆ Framework ²ãÀ´¹¹½¨£¬Òò´ËÒ²ÊDZ¾ÎÄÒª½éÉܵÄÖØµã¡£
Framework
1.¡¾Foundation¡¿ÔÚ×îµ×²ã£¬Ö÷Òª¶¨Òåµ×²ã¹¤¾ßÀàºÍ·½·¨£¬ÒÔÌṩ¸øÆäËû²ãʹÓá£
2.¡¾Animation¡¿ÊǶ¯»Ïà¹ØµÄÀ࣬¿ÉÒÔ»ùÓÚ´Ë´´½¨²¹¼ä¶¯»£¨Tween
Animation£©ºÍÎïÀíÔÀí¶¯»£¨Physics-based Animation£©£¬ÀàËÆ Android
µÄ ValueAnimator ºÍ iOS µÄ Core Animation¡£
3.¡¾Painting¡¿·â×°ÁË Flutter Engine ÌṩµÄ»æÖƽӿڣ¬ÀýÈç»æÖÆËõ·ÅͼÏñ¡¢²åÖµÉú³ÉÒõÓ°¡¢»æÖƺÐÄ£Ðͱ߿òµÈ¡£
4.¡¾Gesture¡¿Ìṩ´¦ÀíÊÖÊÆÊ¶±ðºÍ½»»¥µÄ¹¦ÄÜ¡£
5.¡¾Rendering¡¿ÊÇ¿ò¼ÜÖеÄäÖȾ¿â¡£¿Ø¼þµÄäÖȾÖ÷Òª°üÀ¨Èý¸ö½×¶Î£º²¼¾Ö£¨Layout£©¡¢»æÖÆ£¨Paint£©¡¢ºÏ³É£¨Composite£©¡£
´ÓÏÂͼ¿ÉÒÔ¿´µ½£¬Flutter Á÷Ë®Ïß°üÀ¨ 7 ¸ö²½Öè¡£

Ê×ÏÈÊÇ»ñÈ¡µ½Óû§µÄ²Ù×÷£¬È»ºóÄãµÄÓ¦ÓûáÒò´ËÏÔʾһЩ¶¯»£¬½Ó×Å Flutter ¿ªÊ¼¹¹½¨ Widget
¶ÔÏó¡£
Widget ¶ÔÏó¹¹½¨Íê³Éºó½øÈëäÖȾ½×¶Î£¬Õâ¸ö½×¶ÎÖ÷Òª°üÀ¨Èý²½£º
²¼¾ÖÔªËØ£º¾ö¶¨Ò³ÃæÔªËØÔÚÆÁÄ»ÉϵÄλÖúʹóС£»
»æÖƽ׶Σº½«Ò³ÃæÔªËØ»æÖƳÉËüÃÇÓ¦ÓеÄÑùʽ£»
ºÏ³É½×¶Î£º°´ÕÕ»æÖƹæÔò½«Ö®Ç°Á½¸ö²½ÖèµÄ²úÎï×éºÏÔÚÒ»Æð¡£
×îºóµÄ¹âÕ¤»¯ÓÉ Engine ²ãÀ´Íê³É¡£
ÔÚäÖȾ½×¶Î£¬¿Ø¼þÊ÷£¨widget£©»áת»»³É¶ÔÓ¦µÄäÖȾ¶ÔÏó£¨RenderObject£©Ê÷£¬ÔÚ Rendering
²ã½øÐв¼¾ÖºÍ»æÖÆ¡£
ÔÚ²¼¾Öʱ Flutter Éî¶ÈÓÅÏȱéÀúäÖȾ¶ÔÏóÊ÷¡£Êý¾ÝÁ÷µÄ´«µÝ·½Ê½ÊÇ´ÓÉϵ½Ï´«µÝÔ¼Êø£¬´Óϵ½ÉÏ´«µÝ´óС¡£Ò²¾ÍÊÇ˵£¬¸¸½Úµã»á½«×Ô¼ºµÄÔ¼Êø´«µÝ¸ø×ӽڵ㣬×Ó½Úµã¸ù¾Ý½ÓÊÕµ½µÄÔ¼ÊøÀ´¼ÆËã×Ô¼ºµÄ´óС£¬È»ºó½«×Ô¼ºµÄ³ß´ç·µ»Ø¸ø¸¸½Úµã¡£Õû¸ö¹ý³ÌÖУ¬Î»ÖÃÐÅÏ¢Óɸ¸½ÚµãÀ´¿ØÖÆ£¬×ӽڵ㲢²»¹ØÐÄ×Ô¼ºËùÔÚµÄλÖ㬶ø¸¸½ÚµãÒ²²»¹ØÐÄ×Ó½Úµã¾ßÌ峤ʲôÑù×Ó¡£

ΪÁË·ÀÖ¹Òò×ӽڵ㷢Éú±ä»¯¶øµ¼ÖµÄÕû¸ö¿Ø¼þÊ÷ÖØ»æ£¬Flutter ¼ÓÈëÁËÒ»¸ö»úÖÆ¡ª¡ªRelayout
Boundary£¬ÔÚÒ»Ð©ÌØ¶¨µÄÇéÐÎÏÂRelayout Boundary»á±»×Ô¶¯´´½¨£¬²»ÐèÒª¿ª·¢ÕßÊÖ¶¯Ìí¼Ó¡£
ÀýÈ磬¿Ø¼þ±»ÉèÖÃÁ˹̶¨´óС£¨tight constraint£©¡¢¿Ø¼þºöÂÔËùÓÐ×ÓÊÓͼ³ß´ç¶Ô×Ô¼ºµÄÓ°Ïì¡¢¿Ø¼þ×Ô¶¯Õ¼Âú¸¸¿Ø¼þËùÌṩµÄ¿Õ¼äµÈµÈ¡£ºÜºÃÀí½â£¬¾ÍÊǿؼþ´óС²»»áÓ°ÏìÆäËû¿Ø¼þʱ£¬¾Íû±ØÒªÖØÐ²¼¾ÖÕû¸ö¿Ø¼þÊ÷¡£ÓÐÁËÕâ¸ö»úÖÆºó£¬ÎÞÂÛ×ÓÊ÷·¢ÉúʲôÑùµÄ±ä»¯£¬´¦Àí·¶Î§¶¼Ö»ÔÚ×ÓÊ÷ÉÏ¡£

ÔÚÈ·¶¨Ã¿¸ö¿Õ¼äµÄλÖúʹóС֮ºó£¬¾Í½øÈë»æÖÆ½×¶Î¡£»æÖƽڵãµÄʱºòÒ²ÊÇÉî¶È±éÀú»æÖƽڵãÊ÷£¬È»ºó°Ñ²»Í¬µÄ
RenderObject »æÖƵ½²»Í¬µÄͼ²ãÉÏ¡£
ÕâʱÓпÉÄܳöÏÖÒ»ÖÖÌØÊâÇé¿ö£¬ÈçÏÂͼËùʾ½Úµã 2 ÔÚ»æÖÆ×Ó½Úµã 4 ʱ£¬ÓÉÓÚÆä½Úµã4ÐèÒªµ¥¶À»æÖƵ½Ò»¸öͼ²ãÉÏ£¨Èç
video£©£¬Òò´ËÂÌɫͼ²ãÉÏÃæ¶àÁ˸ö»ÆÉ«µÄͼ²ã¡£Ö®ºóÔÙÐèÒª»æÖÆÆäËûÄÚÈÝ£¨±ê¼Ç 5£©¾ÍÐèÒªÔÙÔö¼ÓÒ»¸öͼ²ã£¨ºìÉ«£©¡£ÔÙ½ÓÏÂÀ´Òª»æÖƽڵã
1 µÄÓÒ×ÓÊ÷£¨±ê¼Ç 6£©£¬Ò²»á±»»æÖƵ½ºìɫͼ²ãÉÏ¡£ËùÒÔÈç¹û 2 ºÅ½Úµã·¢Éú¸Ä±ä¾Í»á¸Ä±äºìɫͼ²ãÉϵÄÄÚÈÝ£¬Òò´ËÒ²Ó°Ïìµ½Á˺Á²»Ïà¸ÉµÄ
6 ºÅ½Úµã¡£

ΪÁ˱ÜÃâÕâÖÖÇé¿ö£¬Flutter µÄÉè¼ÆÕßÕâÀï»ùÓÚ Relayout Boundary µÄ˼ÏëÔö¼ÓÁË
Repaint Boundary¡£ÔÚ»æÖÆÒ³ÃæÊ±ºòÈç¹ûÓö¼û Repaint Boundary ¾Í»áÇ¿ÖÆÇл»Í¼²ã¡£
ÈçÏÂͼËùʾ£¬ÔÚ´ÓÉϵ½Ï±éÀú¿Ø¼þÊ÷Óöµ½ Repaint Boundary »áÖØÐ»æÖƵ½ÐµÄͼ²ã£¨ÉîÀ¶É«£©£¬ÔÚ´Óϵ½ÉÏ·µ»ØµÄʱºòÓÖÓöµ½
Repaint Boundary£¬ÓÚÊÇÓÖÔö¼ÓÒ»¸öеÄͼ²ã£¨Ç³À¶É«£©¡£

ÕâÑù£¬¼´Ê¹·¢ÉúÖØ»æÒ²²»»á¶ÔÆäËû×ÓÊ÷²úÉúÓ°Ïì¡£±ÈÈçÔÚ Scrollview ÉÏ£¬µ±¹ö¶¯µÄʱºò·¢ÉúÄÚÈÝÖØ»æ£¬Èç¹ûÔÚ
Scrollview ÒÔÍâµÄµØ·½²»ÐèÒªÖØ»æ¾Í¿ÉÒÔʹÓà Repaint Boundary¡£Repaint
Boundary ²¢²»»áÏñ Relayout Boundary Ò»Ñù×Ô¶¯Éú³É£¬¶øÊÇÐèÒªÎÒÃÇ×Ô¼ºÀ´¼ÓÈëµ½¿Ø¼þÊ÷ÖС£
6.¡¾Widget¡¿¿Ø¼þ²ã¡£ËùÓпؼþµÄ»ùÀà¶¼ÊÇ Widget£¬Widget µÄÊý¾Ý¶¼ÊÇÖ»¶ÁµÄ, ²»Äܸı䡣ËùÒÔÿ´ÎÐèÒª¸üÐÂÒ³ÃæÊ±¶¼ÐèÒªÖØÐ´´½¨Ò»¸öеĿؼþÊ÷¡£Ã¿Ò»¸ö
Widget »áͨ¹ýÒ»¸ö RenderObjectElement ¶ÔÓ¦µ½Ò»¸öäÖȾ½Úµã£¨RenderObject£©£¬¿ÉÒÔ¼òµ¥Àí½âΪ
Widget ÖÐÖ»´æ´¢ÁËÒ³ÃæÔªËØµÄÐÅÏ¢£¬¶øÕæÕý¸ºÔð²¼¾Ö¡¢äÖȾµÄÊÇ RenderObject¡£
ÔÚÒ³Ãæ¸üÐÂÖØÐÂÉú³É¿Ø¼þÊ÷ʱ£¬RenderObjectElement Ê÷»á¾¡Á¿±£³ÖÖØÓá£ÓÉÓÚ RenderObjectElement
³ÖÓжÔÓ¦µÄ RenderObject£¬ËùÓÐ RenderObject Ê÷Ò²»á¾¡¿ÉÄܵı»ÖØÓá£ÈçͼËùʾ¾ÍÊÇÈý¿ÃÊ÷Ö®¼äµÄ¹ØÏµ¡£ÔÚÕâÕÅͼÀïÎÒÃǰÑÐÎ×´µ±×öäÖȾ½ÚµãµÄÀàÐÍ£¬ÑÕÉ«ÊÇËüµÄÊôÐÔ£¬¼´ÐÎ×´²»Í¬¾ÍÊDz»Í¬µÄäÖȾ½Úµã£¬¶øÑÕÉ«²»Í¬Ö»ÊÇͬһ¶ÔÏóµÄÊôÐԵIJ»Í¬¡£

Èç¹ûÏë°Ñ·½ÐεÄÑÕÉ«»»³É»ÆÉ«£¬½«Ô²ÐεÄÑÕÉ«±ä³ÉºìÉ«£¬ÓÉÓڿؼþÊDz»Äܱ»Ð޸ĵģ¬ÐèÒªÖØÐÂÉú³ÉÁ½¸öеĿؼþ
Rectangle yellow ºÍ Circle red¡£ÓÉÓÚÖ»ÊÇÐÞ¸ÄÁËÑÕÉ«ÊôÐÔ£¬ËùÒÔ Element
ºÍ RenderObject ¶¼±»ÖØÓ㬶øÖ®Ç°µÄ¿Ø¼þÊ÷»á±»ÊÍ·Å»ØÊÕ¡£

ÄÇôÈç¹û°ÑºìɫԲÐαä³ÉÈý½ÇÐÎÓÖ»áÔõÑùÄØ£¿ÓÉÓÚÕâÀï·¢Éú±ä»¯µÄÊÇÀàÐÍ£¬ËùÒÔ¶ÔÓ¦µÄ Element ½ÚµãºÍ
RenderObject ½Úµã¶¼ÐèÒªÖØÐ´´½¨¡£µ«ÊÇÓÉÓÚ»ÆÉ«·½ÐÎûÓз¢Éú¸Ä±ä£¬ËùÒÔÆä¶ÔÓ¦µÄ Element
½ÚµãºÍ RenderObject ½ÚµãûÓз¢Éú±ä»¯¡£

×îºóÊÇ¡¾Material¡¿ & ¡¾Cupertino¡¿£¬ÕâÊÇÔÚ
Widget ²ãÖ®ÉÏ¿ò¼ÜΪ¿ª·¢ÕßÌṩµÄ»ùÓÚÁ½Ì×Éè¼ÆÓïÑÔʵÏÖµÄ UI ¿Ø¼þ£¬¿ÉÒÔ°ïÖúÎÒÃÇµÄ App ÔÚ²»Í¬Æ½Ì¨ÉÏÌṩ½Ó½üÔÉúµÄÓû§ÌåÑé¡£
Flutter ÔÚÂí·äÎÑÉ̼ҶËApp ÖеÄÓ¦ÓÃʵ¼ù

¿ª·¢·½Ê½£ºFlutter + Native
ÓÉÓÚÉ̼ҶËÒѾÊÇÒ»¿î³ÉÊìµÄ App£¬²»¿ÉÄÜ´´½¨Ò»¸öÐ嵀 Flutter ¹¤³ÌÈ«²¿ÖØÐ¿ª·¢£¬Òò´ËÎÒÃÇÑ¡Ôñ
Native Óë Flutter »ì±àµÄ·½°¸À´ÊµÏÖ¡£
ÔÚÁ˽â Native Óë Flutter »ì±à·½°¸Ç°£¬Ê×ÏÈÎÒÃÇÐèÒªÁ˽âÔÚ Flutter ¹¤³ÌÖУ¬Í¨³£ÓÐÒÔÏÂ
4 ÖÖ¹¤³ÌÀàÐÍ£º
Flutter Application
±ê×¼µÄ Flutter App ¹¤³Ì£¬°üº¬±ê×¼µÄ Dart ²ãÓë Native ƽ̨²ã¡£
Flutter Module
Flutter ×é¼þ¹¤³Ì£¬½ö°üº¬ Dart ²ãʵÏÖ£¬Native ƽ̨²ã×Ó¹¤³ÌΪͨ¹ý Flutter
×Ô¶¯Éú³ÉµÄÒþ²Ø¹¤³Ì£¨.ios / .android£©¡£
Flutter Plugin
Flutter ƽ̨²å¼þ¹¤³Ì£¬°üº¬ Dart ²ãÓë Native ƽ̨²ãµÄʵÏÖ¡£
Flutter Package
Flutter ´¿ Dart ²å¼þ¹¤³Ì£¬½ö°üº¬ Dart ²ãµÄʵÏÖ£¬ÍùÍù¶¨ÒåһЩ¹«¹² Widget¡£
Á˽âÁË Flutter ¹¤³ÌÀàÐͺó£¬ÎÒÃÇÀ´¿´Ï¹ٷ½ÌṩµÄÒ»ÖÖ»ì±à·½°¸£¨https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps£©£¬¼´ÔÚÏÖÓй¤³ÌÏ´´½¨
Flutter Module ¹¤³Ì£¬ÒÔ±¾µØÒÀÀµµÄ·½Ê½¼¯³Éµ½ÏÖÓÐµÄ Native ¹¤³ÌÖС£
¹Ù·½¼¯³É·½°¸£¨ÒÔ iOS ΪÀý£©
a. ÔÚ¹¤³ÌĿ¼´´½¨ FlutterModule£¬´´½¨ºó£¬¹¤³ÌĿ¼´óÖÂÈçÏ£º

b. ÔÚ Podfile ÎļþÖÐÌí¼ÓÒÔÏ´úÂ룺
flutter_application_path = '../flutter_Moudule/'
eval(File.read (File.join(flutter_application_path,
'.ios', 'Flutter', 'podhelper.rb')), binding)
¸Ã½Å±¾Ö÷Òª¸ºÔð£º
pod ÒýÈë Flutter.Framework ÒÔ¼° FlutterPluginRegistrant
×¢²áÈë¿Ú
pod ÒýÈë Flutter µÚÈý·½ plugin
ÔÚÿһ¸ö pod ¿âµÄÅäÖÃÎļþÖÐдÈë¶Ô Generated.xcconfig ÎļþµÄµ¼Èë
ÐÞ¸Ä pod ¿âµÄ ENABLE_BITCODE = NO£¨ÒòΪ Flutter ÏÖÔÚ²»Ö§³Ö bitcode£©
c. ÔÚ iOS ¹¹½¨½×¶Î Build Phases ÖÐ×¢Èë¹¹½¨Ê±ÐèÒªÖ´ÐÐµÄ xcode_backend.sh
(λÓÚ FlutterSDK/packages/flutter_tools/bin) ½Å±¾:
"$FLUTTER_ROOT/packages/flutter_tools/
bin/xcode_backend.sh" build
"$FLUTTER_ROOT/packages/flutter_tools/
bin/xcode_backend.sh" embed
¸Ã½Å±¾Ö÷Òª¸ºÔð£º
¹¹½¨ App.framework ÒÔ¼° Flutter.framework ²úÎï
¸ù¾Ý±àÒëģʽ£¨debug/profile/release£©µ¼Èë¶ÔÓ¦µÄ²úÎï
±àÒë flutter_asset ×ÊÔ´
°ÑÒÔÉϲúÎï copy µ½¶ÔÓ¦µÄ¹¹½¨²úÎïÖÐ
d. Óë Native ͨÐÅ
·½°¸Ò»£º¸ÄÔì AppDelegate ¼Ì³Ð×Ô FlutterAppDelegate
·½°¸¶þ£ºAppDelegate ʵÏÖ FlutterAppLifeCycleProvider ÐÒ飬ÉúÃüÖÜÆÚÓÉ
FlutterPluginAppLifeCycleDelegate ´«µÝ¸ø Flutter
ÒÔÉϾÍÊǹٷ½ÌṩµÄ¼¯³É·½°¸¡£ÎÒÃÇ×îÖÕûÓÐÑ¡Ôñ´Ë·½°¸µÄÔÒò£¬ÊÇËüÖ±½ÓÒÀÀµÓÚ FlutterModule
¹¤³ÌÒÔ¼° Flutter »·¾³£¬Ê¹ Native ¿ª·¢Í¬Ñ§ÎÞ·¨ÍÑÀë Flutter »·¾³¿ª·¢£¬Ó°ÏìÕý³£µÄ¿ª·¢Á÷³Ì£¬ÍŶӺÏ×÷³É±¾½Ï´ó£»¶øÇÒ»áÓ°ÏìÕý³£µÄ´ò°üÁ÷³Ì¡££¨Ä¿Ç°
Flutter ÍŶÓÕýÔÚÖØ¹¹Ç¶Èë Native ¹¤³ÌµÄ·½Ê½£©
×îÖÕÎÒÃÇÑ¡ÔñÁíÒ»ÖÖ·½°¸À´½â¾öÒÔÉϵÄÎÊÌ⣺Զ¶ËÒÀÀµ²úÎï¡£

iOS ¼¯³É·½°¸
ͨ¹ý¶Ô¹Ù·½»ì±à·½°¸µÄÑо¿£¬ÎÒÃÇÁ˽⵽ iOS ¹¤³Ì×îÖÕÒÀÀµµÄÆäʵÊÇ FlutterModule ¹¤³Ì¹¹½¨³öµÄ²úÎFramework£¬Asset£¬Plugin£©£¬Ö»Ð轫²úÎïµ¼³ö²¢
push µ½Ô¶¶Ë²Ö¿â£¬iOS ¹¤³Ìͨ¹ýÔ¶¶ËÒÀÀµ²úÎï¼´¿É¡£
ÒÀÀµ²úÎïĿ¼½á¹¹ÈçÏ£º

App.framework : Flutter ¹¤³Ì²úÎ°üº¬ Flutter ¹¤³ÌµÄ´úÂ룬Debug
ģʽÏÂËüÊǸö¿Õ¿Ç£¬´úÂëÔÚ flutter_assets ÖУ©¡£
Flutter.framework: Flutter ÒýÇæ¿â¡£Óë±àÒëģʽ£¨debug/profile/release£©ÒÔ¼°
CPU ¼Ü¹¹£¨arm*, i386, x86_64£©ÏàÆ¥Åä¡£
lib*.a & .h Í·Îļþ : FlutterPlugin ¾²Ì¬¿â£¨°üº¬ÔÚ iOS ¶ËµÄʵÏÖ£©¡£
flutter_assets: °üº¬ Flutter ¹¤³Ì×ÖÌ壬ͼƬµÈ×ÊÔ´¡£ÔÚ Flutter1.2
°æ±¾ÖУ¬±»´ò°üµ½ App.framework ÖС£
Android ¼¯³É·½°¸
Android Nativite ¼¯³ÉÊÇͨ¹ý Gradle Ô¶³ÌÒÀÀµ Flutter ¹¤³Ì²úÎïµÄ·½Ê½Íê³ÉµÄ£¬ÒÔÏÂÊǾßÌåµÄ¼¯³ÉÁ÷³Ì¡£
a. ´´½¨ Flutter ±ê×¼¹¤³Ì
$ flutter create flutter_demo
ĬÈÏʹÓà Java ´úÂ룬Èç¹ûÔö¼Ó Kotlin Ö§³Ö£¬Ê¹ÓÃÈçÏÂÃüÁ
$ flutter create -a kotlin flutter_demo
b. Ð޸Ť³ÌµÄĬÈÏÅäÖÃ

i. ÐÞ¸Ä app module ¹¤³ÌµÄ build.gradle ÅäÖà apply plugin:
¡®com.android.application¡¯ => apply plugin: ¡®com.android.library¡¯£¬²¢ÒƳý
applicationId ÅäÖÃ
ii. ÐÞ¸Ä root ¹¤³ÌµÄ build.gradle ÅäÖÃ
ÔÚ¼¯³É¹ý³ÌÖÐ Flutter ÒÀÀµÁËÈý·½ Plugins ºó£¬Óöµ½ Plugins µÄ´úÂëûÓб»´ò½ø
Library ÖеÄÎÊÌ⡣ͨ¹ýÒÔÏÂÅäÖýâ¾ö£¨ÕâÖÖ·½Ê½ÂÔÏÔ´Ö±©£¬ºóÐøµÄÓÅ»¯·½°¸ÕýÔÚµ÷ÑУ©¡£
subprojects {
project.buildDir = "${rootProject.buildDir}/app"
iii. app module Ôö¼Ó maven ´ò°üÅäÖÃ
c. Éú³É Android Flutter ²úÎï
$ cd android
$ ./gradlew uploadArchives
¹Ù·½Ä¬ÈϵĹ¹½¨½Å±¾ÔÚ Flutter 1.0.0 °æ±¾´æÔÚ Bug¡ª¡ª×îÖյIJúÎïÖлáȱÉÙ flutter_shared/icudtl.dat
Îļþ£¬µ¼Ö App Crash¡£Ä¿Ç°µÄ½â¾ö·½Ê½Êǽ«Õâ¸öÎļþ¸´ÖƵ½¹¤³ÌµÄ assets Ï£¨ ÔÚ Flutter
×îР1.2.1 °æ±¾ÖÐÕâ¸ö Bug Òѱ»ÐÞ¸´£¬µ«ÊÇ 1.2.1 °æ±¾ÓÖ³öÏÖÁËÒ»¸ö UI äÖȾµÄÎÊÌ⣬ËùÒÔÖ»ÄܼÌÐøÊ¹ÓÃ
1.0.0 °æ±¾£©¡£
d. Android Native ƽ̨¹¤³Ì¼¯³É£¬Ôö¼ÓÏÂÃæÒÀÀµÅäÖü´¿É£¬²»»áÓ°Ïì Native ƽ̨¿ª·¢µÄͬѧ
implementation ¡®com.mfw.app: MerchantFlutter:0.0.5-beta¡¯
Flutter ºÍ iOS¡¢Android µÄ½»»¥
ʹÓÃÆ½Ì¨Í¨µÀ£¨Platform Channels£©ÔÚ Flutter ¹¤³ÌºÍËÞÖ÷£¨Native ¹¤³Ì£©Ö®¼ä´«µÝÏûÏ¢£¬Ö÷ÒªÊÇͨ¹ý
MethodChannel ½øÐз½·¨µÄµ÷Óã¬ÈçÏÂͼËùʾ£º

ΪÁËÈ·±£Óû§½çÃæ²»»á¹ÒÆð£¬ÏûÏ¢ºÍÏìÓ¦ÊÇÒì²½´«µÝµÄ£¬ÐèÒªÓà async ÐÞÊη½·¨£¬await ÐÞÊε÷ÓÃÓï¾ä¡£Flutter
¹¤³ÌºÍËÞÖ÷¹¤³Ìͨ¹ýÔÚ Channel ¹¹Ô캯ÊýÖд«µÝ Channel Ãû³Æ½øÐйØÁª¡£µ¥¸öÓ¦ÓÃÖÐʹÓõÄËùÓÐ
Channel Ãû³Æ±ØÐëÊÇΨһµÄ; ¿ÉÒÔÔÚ Channel Ãû³ÆÇ°¼ÓÒ»¸öΨһµÄ¡¸ÓòÃûǰ׺¡¹¡£
Flutter Óë Native ÐÔÄܶԱÈ
ÎÒÃÇ·Ö±ðʹÓà Native ºÍ Flutter ¿ª·¢ÁËÁ½¸öÁбíÒ³£¬ÒÔÏÂÊÇÒ³ÃæÐ§¹ûºÍÐÔÄܶԱȣº
iOS ¶Ô±È£¨»úÐÍ 6P ϵͳ 10.3.3£©£º
Flutter Ò³Ãæ£º


iOS Native Ò³Ãæ£º


¿ÉÒÔ¿´µ½£¬´ÓʹÓúÍÖ±¹Û¸ÐÊܶ¼Ã»ÓÐÌ«´óµÄ²î±ð¡£ÓÚÊÇÎÒÃDzɼ¯ÁËһЩÆäËû·½ÃæµÄÊý¾Ý¡£
Flutter Ò³Ãæ£º

iOS Native Ò³Ãæ£º


ÁíÍâÎÒÃÇ»¹¶Ô±ÈÁËÉ̼Ҷ˽ÓÈë Flutter ǰºó°üÌå»ýµÄ´óС£º39Mb ¡ú 44MB

ÔÚ iOS »úÐÍÉÏ£¬Á÷³©¶ÈÉÏûÓÐʲô²îÒì¡£´ÓÊýÖµÉÏÀ´¿´£¬Flutter ÔÚ ÄÚ´æ¸ú GPU/CPU
ʹÓÃÂÊÉϱÈÔÉúÂԸߡ£ Demo Öв¢Ã»ÓÐ¶Ô Flutter ×ö¸ü¶àµÄÓÅ»¯£¬¿ÉÒÔ¿´³ö Flutter
ÕûÌåÀ´Ëµ»¹ÊÇ¿ÉÒÔ×ö³ö½Ó½üÓÚÔÉúµÄÒ³Ãæ¡£
ÏÂÃæÊÇ Flutter Óë Android µÄÐÔÄܶԱȡ£
Flutter Ò³Ãæ£º 
Android Native Ò³Ãæ£º

´ÓÒÔÉÏÁ½ÕŶԱÈͼ¿ÉÒÔ¿´³ö£¬²»¿¼ÂÇÆäËûÒòËØ£¬µ¥´¿´ÓÐÔÄܽǶÈÀ´Ëµ£¬ ÔÉúÒªÓÅÓÚ Flutter£¬µ«ÊDzî¾à²¢²»´ó£¬¶øÇÒ
Flutter ¾ßÓÐµÄ¿çÆ½Ì¨¿ª·¢ºÍÈÈÖØÔØµÈÌØµã¼«´óµØ½ÚÊ¡ÁË¿ª·¢Ð§ÂÊ¡£²¢ÇÒ£¬Î´À´µÄÈÈÐÞ¸´ÌØÐÔ¸üÊÇÖµµÃÆÚ´ý¡£
»ìºÏÕ»¹ÜÀí
Ê×ÏÈÏȽéÉÜÏ Flutter ·ÓɵĹÜÀí£º
Flutter ¹ÜÀíÒ³ÃæÓÐÁ½¸ö¸ÅÄRoute ºÍ Navigator¡£
Navigator ÊÇÒ»¸ö·ÓɹÜÀíµÄ Widget£¨Flutter ÖÐÍòÎï½Ô Widget£©£¬Ëüͨ¹ýÒ»¸öÕ»À´¹ÜÀíÒ»¸ö·ÓÉ
Widget ¼¯ºÏ¡£Í¨³£µ±Ç°ÆÁÄ»ÏÔʾµÄÒ³Ãæ¾ÍÊÇÕ»¶¥µÄ·ÓÉ¡£
·ÓÉ (Route) ÔÚÒÆ¶¯¿ª·¢ÖÐͨ³£Ö¸Ò³Ã棨Page£©£¬Õâ¸ú web
¿ª·¢Öе¥Ò³Ó¦ÓÃµÄ Route ¸ÅÄîÒâÒåÊÇÏàͬµÄ£¬Route ÔÚ Android ÖÐͨ³£Ö¸Ò»¸ö Activity£¬ÔÚ
iOS ÖÐÖ¸Ò»¸ö ViewController¡£Ëùν·ÓɹÜÀí£¬¾ÍÊǹÜÀíÒ³ÃæÖ®¼äÈçºÎÌø×ª£¬Í¨³£Ò²¿É±»³ÆÎªµ¼º½¹ÜÀí¡£ÕâºÍÔÉú¿ª·¢ÀàËÆ£¬ÎÞÂÛÊÇ
Android »¹ÊÇ iOS£¬µ¼º½¹ÜÀí¶¼»áά»¤Ò»¸ö·ÓÉÕ»£¬Â·ÓÉÈëÕ» (push) ²Ù×÷¶ÔÓ¦´ò¿ªÒ»¸öÐÂÒ³Ãæ£¬Â·ÓɳöÕ»
(pop) ²Ù×÷¶ÔÓ¦Ò³Ãæ¹Ø±Õ²Ù×÷£¬¶øÂ·ÓɹÜÀíÖ÷ÒªÊÇÖ¸ÈçºÎÀ´¹ÜÀí·ÓÉÕ»¡£

Èç¹ûÊÇ´¿ Flutter ¹¤³Ì£¬Ò³ÃæÕ»ÎÞÐèÎÒÃǽøÐйÜÀí£¬µ«ÊÇÒýÈëµ½ Native ¹¤³ÌÄÚ£¬¾ÍÐèÒª¿¼ÂÇÈçºÎ¹ÜÀí»ìºÏÕ»¡£²¢ÇÒÐèÒª½â¾öÒÔϼ¸¸öÎÊÌ⣺
±£Ö¤ Flutter Ò³ÃæÓë Native Ò³ÃæÖ®¼äµÄÌø×ª´ÓÓû§ÌåÑéÉÏûÓÐÈκβîÒì
Ò³Ãæ×ÊÔ´»¯£¨Âí·äÎÑÌØÓеÄÒµÎñÂß¼£©
±£Ö¤ÉúÃüÖÜÆÚÍêÕûÐÔ£¬´¦ÀíÏà¹Ø´òµãʼþÉϱ¨
×ÊÔ´ÐÔÄÜÎÊÌâ
²Î¿¼ÁËÒµ½çÄڵĽâ¾ö·½·¨£¬ÒÔ¼°ÏîÄ¿×ÔÉíµÄʵ¼Ê³¡¾°£¬ÎÒÃÇÑ¡ÔñÀàËÆÓÚ H5 ÔÚ Navite ÖÐǶÈëµÄ·½Ê½£¬Í³Ò»Í¨¹ý
openURL Ìø×ªµ½Ò»¸ö Native Ò³Ãæ£¨FlutterContainerVC£©£¬Native
Ò³ÃæÍ¨¹ý addChildViewController ·½Ê½Ìí¼Ó FlutterViewController£¨¸ºÔð
Flutter Ò³ÃæäÖȾ£©£¬Í¬Ê±Í¨¹ý channel ͬ²½ Native Ò³ÃæÓë Flutter Ò³Ãæ¡£

ÿһ´ÎµÄ push/pop ÓÉ Native ·¢Æð£¬Í¬Ê±Í¨¹ý channel ±£³Ö Native
Óë Flutter Ò³ÃæÍ¬²½¡ª¡ªÔÚ Native ÖÐÌø×ª Flutter Ò³ÃæÓëÌø×ªÔÉúÎÞ²îÒì
Ò»¸ö Flutter Ò³Ãæ¶ÔÓ¦Ò»¸ö Native Ò³Ãæ£¨FlutterContainerVC) ¡ª¡ª½â¾öÒ³Ãæ×ÊÔ´»¯
FlutterContainerVC ͨ¹ý addChildViewController ¶Ôµ¥Àý
FlutterViewController ½øÐи´Ó᪡ª±£Ö¤ÉúÃüÖÜÆÚÍêÕûÐÔ£¬´¦ÀíÏà¹Ø´òµãʼþÉϱ¨
ÓÉÓÚÿһ¸ö FlutterViewController£¨Ìṩ Flutter ÊÓͼµÄʵÏÖ£©»áÆô¶¯Èý¸öỊ̈߳¬·Ö±ðÊÇ
UI Ï̡߳¢GPU Ïß³ÌºÍ IO Ị̈߳¬Ê¹Óõ¥Àý FlutterViewController ¿ÉÒÔ¼õÉÙ¶Ô×ÊÔ´µÄÕ¼Ó᪡ª½â¾ö×ÊÔ´ÐÔÄÜÎÊÌâ
Flutter Ó¦ÓÃ×ܽá
Flutter Ò»¾·¢²¼¾ÍºÜÊܹØ×¢£¬³ýÁË iOS ºÍ Android µÄ¿ª·¢Õߣ¬ºÜ¶àǰ¶Ë¹¤³ÌʦҲ¶¼·Ç³£¿´ºÃ
Flutter δÀ´µÄ·¢Õ¹Ç°¾°¡£ÏàÐÅÒ²Óкܶ๫˾µÄÍŶÓÒѾͶÈëµ½Ñо¿ºÍʵ¼ùÖÐÁË¡£²»¹ý Flutter
Ò²Óкܶ಻×ãµÄµØ·½£¬ÖµµÃÎÒÃÇ×¢Ò⣺
ËäÈ» 1.2 °æ±¾ÒѾ·¢²¼£¬µ«ÊÇĿǰûÓдﵽÍêÈ«Îȶ¨×´Ì¬£¬1.2 ·¢²¼ÍêÁ˾ͳöÏÖÁ˿ؼþäÖȾµÄÎÊÌâ¡£¼ÓÉÏ
Dart ÓïÑÔÉú̬С£¬Ñ§Ï°×ÊÁÏ¿ÉÄܲ»¹»·á¸»¡£
¹ØÓÚ¶¯Ì¬»¯µÄÖ§³Ö£¬Ä¿Ç° Flutter »¹²»Ö§³ÖÏßÉ϶¯Ì¬ÐÔ¡£Èç¹ûÒªÔÚ Android ÉÏʵÏÖ¶¯Ì¬ÐÔÏà¶ÔÈÝÒ×Щ£¬iOS
ÓÉÓÚÉóºËÔÒòҪʵÏÖ¶¯Ì¬ÐÔ¿ÉÄܳɱ¾ºÜ¸ß¡£
Flutter ÖÐĿǰÄÃÀ´¾ÍÓõÄÄÜÁ¦Ö»ÓÐ UI ¿Ø¼þºÍ Dart ±¾ÉíÌṩÄÜÁ¦£¬¶ÔÓÚÆ½Ì¨¼¶±ðµÄÄÜÁ¦»¹ÐèҪͨ¹ý
channel µÄ·½Ê½À´À©Õ¹¡£
ÒÑÓй¤³ÌÇ¨ÒÆ±È½Ï¸´ÔÓ£¬ÒÔǰ³ÁµíµÄ UI ¿Ø¼þ£¬ÐèÒªÖØÐÂÔÙʵÏÖÒ»Ìס£
×îºóÒ»µã±È½ÏÓÐÕùÒ飬Flutter ²»»á´Ó³ÌÐòÖвð·Ö³ö¶îÍâµÄÄ£°å»ò²¼¾ÖÓïÑÔ£¬Èç JSX »ò XM
L£¬Ò²²»ÐèÒªµ¥¶ÀµÄ¿ÉÊÓ²¼¾Ö¹¤¾ß¡£ÓеÄÈËÈÏΪÅäºÏ HotReload ¹¦ÄÜʹÓ÷dz£·½±ã£¬µ«ÎÒÃÇ·¢ÏÖÕâÑù´úÂë»áÓзdz£¶àµÄǶÌ×£¬ÔĶÁÆðÀ´ÓÐЩ³ÔÁ¦¡£
Ŀǰ°¢ÀïµÄÏÐÓ㿪·¢ÍŶÓÒѾ½« Flutter ÓÃÓÚ´óÐÍʵ¼ù£¬²¢Ó¦ÓÃÔÚÁ˱ȽÏÖØÒªµÄ³¡¾°£¨Èç²úÆ·ÏêÇéÒ³£©£¬ÎªºóÀ´ÕßÌṩÁËÁ¼ºÃµÄ½è¼ø¡£Âí·äÎѵÄÒÆ¶¯¿Í»§¶ËÍŶӹØÓÚ
Flutter µÄ̽Ë÷²Å¸Õ¸ÕÆð²½£¬Ç°Ã滹ÓкܶàµÄÎÊÌâÐèÒªÎÒÃÇÒ»µãÒ»µãÈ¥½â¾ö¡£²»¹ýÎÞÂÛ´Ó Google
¶ÔÆäµÄÖØÊӳ̶ȣ¬»¹ÊÇÎÒÃÇ´Óʵ¼ùÖп´µ½µÄÕâЩÓŵ㣬¶¼ÈÃÎÒÃÇ¶Ô Flutter ³äÂúÐÅÐÄ£¬Ò²Ï£ÍûÔÚδÀ´ÎÒÃÇ¿ÉÒÔÀûÓÃËü´´Ôì¸ü¶àµÄ¼ÛÖµºÍÆæ¼£¡£
·;ËäÔ¶£¬ÓÌ¿ÉÆÚÐí¡£
|