Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Flutter×é¼þ»¯¿ª·¢·½°¸
 
  3791  次浏览      28
2019-8-12
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚjuejin£¬Ö÷Òª½éÉÜÁËFlutter Plugin¡¢PubµÄ¶¨ÒåºÍʹÓã¬FlutterµÄ¹¤³Ì½á¹¹µÈÏà¹ØÄÚÈÝ¡£

ǰÑÔ

Ç°Ãæ½²ÁËFlutterºÍNativeµÄ»ìºÏ¿ª·¢Ä£Ê½£¬Flutter×÷ΪNative¹¤³ÌµÄÒ»¸öModule´æÔÚ£¬ÕâÑù¿ÉÒÔÓÐЧµÄ½«FlutterºÍNative½øÐÐÎïÀí¸ôÀ룬µ«Ëæ×ÅFlutter³ÐÔØµÄÒµÎñÔ½À´Ô½¶à£¬ÓëNative½»»¥µÄ½Ó¿Ú±äµÄÔ½À´Ô½¶à£¬´øÀ´Á˺ܶà¹ÜÀíÎÊÌ⣬Òò´ËÎÒÃÇÆÈÇÐÐèÒª²ÉÓÃеĿª·¢Ä£Ê½£¬±¾ÎĽ«½éÉÜFlutterµÄ×é¼þ»¯¿ª·¢·½°¸¡£

1.´æÔÚµÄÎÊÌâ

ÒòΪ½»»¥½Ó¿ÚÉæ¼°Flutter¡¢Android¡¢iOS¶à¶Ë£¬Ëæ×ŽӿڱäµÄÔ½À´Ô½¶à£¬Ê¹µÃ¹¤³ÌÔ½À´Ô½¸´ÔÓ£¬´úÂëÒ²Ô½À´Ô½¶à£¬µ¼ÖÂά»¤³É±¾±ä¸ß£¬²»ºÃ¹ÜÀí¡£

ÖÚ¶àµÄ½Ó¿ÚдÔÚÒ»Æð£¬Âß¼­ñîºÏ£¬ÐÞ¸ÄÒ»´¦¿ÉÄÜ»áÓ°ÏìÆäËûµÄÂß¼­£¬Ò²²»ºÃ¸´Óá£

²»·½±ãµ¥Ôª²âÊÔ

2.¸Ä½øµã

²ÉÓÃ×é¼þ»¯¿ª·¢Flutter£¬½«»áÓÐÈçϵÄÓÅÊÆ£º

½«¹¦ÄÜÄ£¿é»¯£¬Ï໥¶ÀÁ¢£¬·½±ã¹ÜÀí

Ä£¿éÖ®¼ä»¥²»Ó°Ï죬ñîºÏµÍ£¬Ò»Ð©ÓëÒµÎñÎ޹صÄÄ£¿é¿ÉÒÔ¿ªÔ´³öÀ´£¬¹©ÆäËûAPPʹÓã¬Ìṩ´úÂëµÄ¸´Óá£

²ÉÓÃ×é¼þ»¯¿ª·¢£¬¿ª·¢Ê±»¥²»Ó°Ï죬¿ÉÒÔÌá¸ß¿ª·¢Ð§ÂÊ¡£

·½±ãµ¥Ôª²âÊÔ

ÏÂÃæ½éÉÜFlutter×é¼þ»¯¿ª·¢µÄ¾ßÌåÄÚÈÝ¡£

3.´ÓPlatform Channel˵Æð

¶¨Òå

Platform ChannelΪDartºÍƽ̨֮¼äÌṩÁËÏ໥ͨÐŵĻúÖÆ£¬½«Flutter¡¢Android¡¢iOSÁ¬½ÓÆðÀ´¡£

ÔÚÒÆ¶¯H5¿ª·¢ÖУ¬webview×ÔÉíÌṩµÄ¹¦ÄÜÍùÍù²»¹»Óã¬ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬ÒýÈëÁËjsbridge£¬¼´webÓënativeÖ®¼ä½øÐÐÊý¾Ý½»»¥µÄÒ»ÖÖ·½·¨,¿ÉÒÔ·½±ãµÄ½«nativeµÄ¹¦ÄÜÀ©Õ¹¸øwebviewʹÓ㬴Ӷø¿ÉÒÔ¿ìËÙ¿ª·¢¡£ÔÚFlutterÖУ¬Ò²´æÔÚºÍjsbridgeÒ»ÑùµÄÓ÷¨£¬ÄǾÍÊÇPlatform Channel£¬ÎÒÃÇ¿ÉÒÔͨ¹ýPlatform Channel£¬½«FlutterºÍNative·½±ãµÄÁ¬½ÓÔÚÒ»Æð£¬¼Ü¹¹Í¼ÈçÏÂ:

ÔÚChannelÖÐ

client·¢ËÍÐÅÏ¢

host½ÓÊÜÐÅÏ¢²¢·µ»Ø½á¹û

¶øÇÒÏûÏ¢ºÍÏìÓ¦ÊÇÒÔÒì²½·½Ê½´«µÝµÄ

FlutterºÍNatvie¿ÉÒÔ»¥ÎªclientºÍhost£¬ÐÅÏ¢´«µÝÊÇË«ÏòµÄ

¶øÇÒÔÚFlutterÖÐʵÏÖÒ»¸öChannelÒ²·Ç³£¼òµ¥£¬¼ÙÈçFlutter×÷Ϊclient£¬Native×÷ΪHost£¬Ö»ÐèÒª£º

ÔÚFlutter²ãÉùÃ÷Ò»¸öChannel£¬·¢ËÍÏûÏ¢µ½Native£¬µÈ´ýNative½á¹û·µ»Ø

static const platform = const MethodChannel(¡®samples.flutter.io/battery');
int result = await platform.invokeMethod('getBatteryLevel');

ÔÚNative²ã×¢²áChannelµÄ¼àÌý£¬µ±ÊÕµ½´ÓFlutter²ã·¢Ë͹ýÀ´µÄÏûϢʱ£¬½«½á¹û·µ»Ø¸øFlutter

new MethodChannel(getFlutterView(),"samples.flutter.io /battery") .setMethodCallHandler(
new MethodCallHandler() {
@Override
public void onMethodCall(MethodCall call, Result result) {
if (call.method.equals("getBatteryLevel")) {
return batteryLevel;
}
}}
);

´ÓÖÐÎÒÃÇ¿ÉÒÔ·¢ÏÖ£¬Ð´Ò»¸öFlutterµÄPlatform Channel·Ç³£¼ò½à¶øÇÒÇáÁ¿¡£¶øÇÒÏà½ÏÓÚH5µÄjsbridge£¬Platform ChannelÒ²¾ßÓÐÈçÏµļ¸¸öÓÅÊÆ:

Platform ChannelÊÇFlutter×Ô´øµÄ¹¦ÄÜ£¬²»ÐèÒª¶îÍâµÄ¿ª·¢£¬½Ó¿Ú¼ò½à£¬µ÷Ó÷½±ã¡£

Platform Channel±ÈjsbridgeÓиüºÃµÄÐÔÄܱíÏÖ

¸üÖØÒªµÄÊÇPlatform Channelµ×²ãʵÏÖͳһ£¬¸ü¾Û½¹ÓÚÊý¾ÝÖ®¼äµÄ´«µÝ£¬²»Ïñjsbridge£¬Èç¹ûʹ²ÉÓò»Í¬·½·¨ÊµÏÖµÄjsbridge£¬´úÂëÊÇÎÞ·¨Í¨Óõ쬶øPlatform ChannelÈ´¿ÉÒÔ×öµ½¸üͨÓã¬

Platform Channel×÷ΪÁ¬½ÓFlutterºÍNativeµÄ²¿·Ö£¬ÔÚ»ìºÏ¿ª·¢Ä£Ê½Öзdz£ÖØÒª£¬ÊÇ×÷Ϊµ×²ãÖØÒª¼Ü¹¹µÄ´æÔÚ£¬Òò´Ë¿ÉÒÔ½«Platform Channelµ¥¶À×÷Ϊһ¸öÄ£¿é£¬½«Flutter¹¤³ÌÖеÄPlaform ChannelºÍUI´úÂë·Ö¿ª£¬ÄÇôÈçºÎ½«Platform ChannelÄ£¿é»¯ÄØ£¿ÕâÀï¾ÍÒª½²µ½Ò»¸öеĸÅÄî:Flutter plugin.

4.Flutter Plugin

¶¨Òå

Ò»¸öÔÚAndroid¡¢iOS¡¢DartÉÏʵÏÖPlatform Channel´úÂëµÄÈí¼þ°ü

Òò´ËÒ»¸öÍêÕûµÄFlutter Plugin °üº¬ÈýÖÖÆ½Ì¨µÄ´úÂ룺

Androidƽ̨µÄJava»òKotlin

iOSƽ̨µÄObjC»òÕßSwift

Flutterƽ̨µÄDart

ËùÒÔPlatform Channel¿ÉÒÔʹÓÃFlutter pluginÀ´ÊµÏÖÄ£¿é»¯£¬ÕâÒâζ×Å¿ÉÒÔ½«Ò»Ð©Í¨ÓõŦÄÜÔÚ²»Í¬µÄAPPÉÏʹÓã¬ÀýÈ磺µÇ¼ģ¿é¡¢Í¼Æ¬¿âÄ£¿é¡¢ÍøÂç¿âÄ£¿é¡¢Êý¾Ý¿âÄ£¿éµÈ¡£

´´½¨Flutter PluginµÄ·½·¨Ò²ºÜ¼òµ¥£º

Android Studio

ÔÚAndroid StudioÉϰ²×°FlutterµÄ²å¼þºó£¬¿ÉÒÔͨ¹ý:

File -> New -> New Flutter Project... -> Flutter Pulgin

ÃüÁîÐÐ

$ flutter create --org com.example --template=plugin hello

ÔÚ´´½¨Í깤³Ìºó£¬ÎÒÃǾͿÉÒÔʵÏÖÎÒÃÇÏëÒªµÄPlatform Channel¹¦ÄÜ¡£ÄÇÎÒÃÇÓÖÈçºÎ¹²ÏíÎÒÃǵÄFlutter PluginÄØ£¿ÊìϤAndroid¿ª·¢µÄͬѧ£¬¶¼ÖªµÀMaven²Ö¿â£¬FlutterÒ²ÓÐÀàËÆµÄÈí¼þ°ü²Ö¿â£¬¾ÍÊÇPub.

5.Pub

¶¨Òå

PubÊÇDartÓïÑԵİü¹ÜÀíÆ÷£¬°üº¬Flutter¡¢AngularDartºÍÒ»°ãDart³ÌÐò¡£

ʹÓÃ

ÎÒÃÇ¿ÉÒÔÔÚpub.dartlang.org/ÉÏÃæ²éÕÒÎÒÃÇÏëÒªÓõÄÈí¼þ°ü£¬ÀýÈçprotobuf:

ÔÚËÑË÷½á¹ûÒ³£¬ÕÒµ½ÎÒÃÇÏëÒªµÄ°ü£º

ʹÓõÄʱºòÖ»Òª½«°üÃûºÍ°æ±¾ºÅ¼ÓÈëµ½¹¤³ÌµÄpubspec.yamlÀ

dependencies:
protobuf: ^0.10.4

²¢ÔËÐÐÃüÁîÐа²×°°ü£º

$ flutter packages get

¾Í¿ÉÒÔÔÚ¹¤³ÌʹÓÃÁË¡£ËµÍêʹÓã¬ÄÇÈçºÎ½«ÎÒÃÇ×Ô¼ºµÄFlutter PluginµÄ°üÌṩ¸ø±ðÈËʹÓÃÄØ£¿¾ÍÐèÒªÎÒÃǽ«°üÉÏ´«µ½Pub¡£

ÉÏ´«

½«Ò»¸ö°üÉÏ´«µ½Pub£¬ÐèÒªÈý¸ö²½Ö裺ȷ±£pubspec.yamlÀïÃæµÄÏà¹ØÅäÖÃÌîдÕýÈ·£¬README.mdºÍCHANGELOG.md×îºÃÒ²²¹³äÍêÕû¡£ÔÚÉÏ´«Ç°£¬ÏÈÔËÐÐdry-runÃüÁî²é¿´ÊÇ·ñËùÓÐÄÚÈÝ¿ÉÒÔͨ¹ý¼ì²â

$ flutter pacakges pub publish --dry-run

3.ÉÏ´«

$ flutter packages pub publish

ÉÏ´«³É¹¦ºó£¬¾Í¿ÉÒÔÔÚ±ðµÄ¹¤³ÌÀïʹÓã¬ÔÚpubspec.yamlÀïµÄdependenciesÌí¼Ó£¬ÈçÏ£º

dependencies:
°üÃû: °æ±¾ºÅ

6.Private Pub

ÔÚ½«×Ô¼ºÍŶӵĿâÉÏ´«µ½PubÖк󣬻¹´æÔÚÒ»¸öÎÊÌ⣬ÄǾÍÊÇÒòΪPubÊÇÒ»¸ö¹«¹²²Ö¿â£¬ÉÏ´«ÉÏÈ¥Ö®ºóËùÓÐÈ˶¼¿´µÄµ½£¬ÕâÑù¾Í·Ç³£²»ºÃ£¬ÒòΪÍŶÓÄÚµÄÏîÄ¿ÊDz»ÏëÈÃÆäËûÈË¿´µ½µÄ¡£ÕâʱºòÎÒÃǾÍÐèÒªÒ»¸öPrivate Pub£¬¼´Ë½ÓÐPubÀ´¹ÜÀí×Ô¼ºÍŶӵĿ⡣

ÎÒÔÚ¹«Ë¾ÄڴÁËÒ»¸ö˽ÓÐPub£¬µØÖ·Îª£º

******£¨ÒòΪÊǹ«Ë¾ÄÚ²¿µØÖ·£¬¾Í²»¹«²¼ÁË£©

Èç¹ûÏëҪʹÓÃPrivate Pub£¬ÐèÒªÈçϵÄÉèÖãº

$ export PUB_HOSTED_URL=******

¸´ÖÆ´úÂëÉèÖÃÍê³Éºó¾Í¿ÉÒÔʹÓÃPrivate PubÁË£¬PubÆäËûµÄʹÓö¼²»±ä¡£

7.Flutter ¹¤³Ì½á¹¹

×îºóÎÒÃÇFlutterµÄ¹¤³Ì½á¹¹ÈçÏ£º

ÔÚPlatform ChannelÖУ¬½«¶ÀÁ¢µÄ¹¦Äܶ¼³éÈ¡³öÀ´´ò°ü³Éplugin£¬ÔÚ½«¶à¸öplugin×éºÏ³ÉFlutterµÄ»ù´¡×é¼þ£¬´Ó¶ø¿ìËÙÖ§³ÖFlutter UIÒµÎñ´úÂëµÄ¿ª·¢¡£

8.¿ª·¢Á÷³Ì

×îºóÎÒÃǵĿª·¢Á÷³ÌÈçÏ£º

µ¥Ò»¹¦ÄܵÄPlatform ChannelÒÔProjectµÄÐÎʽ´æÔÚ£¬¾­¹ý¿ª·¢¡¢²âÊÔ¡¢ÑéÖ¤ÎÞÎóÖ®ºóÔÙÉÏ´«µ½Private Pub£¬²»¹ÜÊÇ´¿Flutter¹¤³Ì»¹ÊÇFlutter¡¢Native»ìºÏ¹¤³Ì¶¼¿ÉÒÔ¸÷È¡ËùÐ裬ʹÓÃÐèÒªµÄFlutter Plugin¡£

×ܽá

ͨ¹ý·ÖÎöFlutterµÄ¹¤³Ì½á¹¹£¬ÎÒÃǽ«Flutter²ð·Ö³ÉPlatform ChannelºÍFlutter UIÁ½¸öÏ໥¶ÀÁ¢µÄÄ£¿é£¬Ã÷ÎúÁËFlutterµÄ¹¤³Ì½á¹¹£¬Í¬Ê±½øÒ»²½Ï¸»¯Platform Channel£¬½«µ¥Ò»¹¦ÄܵÄPlatform Channel´ò°ü³ÉFlutter Plugin£¬Í¬Ê±´î½¨×Ô¼ºµÄ˽ÓÐPub£¬·½±ãµÄ¹ÜÀíFlutter Plugin£¬¼«´óµÄ·½±ãÁËFlutterµÄ¿ª·¢£¬Ò²ÓÐÀûÓÚÎÒÃǵÄ×é¼þÖØÓúÍÌá¸ß¿ª·¢Ð§ÂÊ£¡

 
   
3791 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì