±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ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 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µÄ¿ª·¢£¬Ò²ÓÐÀûÓÚÎÒÃǵÄ×é¼þÖØÓúÍÌá¸ß¿ª·¢Ð§ÂÊ£¡
|