Flutter Plugin 調(diào)用 Native API

一鬓照、新建plugin

由于1、2 方式未生成平臺(tái)對(duì)應(yīng)文件询件,我一般使用第三種命令行方式創(chuàng)建

1. 通過(guò)IntelliJ

(1) Create New Project 或者 點(diǎn)擊 File>New>Project…带污;
(2) 在左側(cè)菜單選擇 Flutter, 然后點(diǎn)擊 Next;
(3) 輸入 Project name 和 Project location专钉,Project type 選擇 "Plugin";
(4)最后點(diǎn)擊 Finish累铅。

截屏2020-10-29 17.23.24.png

2. 通過(guò)Android Studio

(1) Start a new flutter project -> flutter plugin ,然后點(diǎn)擊 Next跃须;

截屏2020-10-29 19.31.28.png

(2) 選擇語(yǔ)言: 不勾選iOS 為OC,安卓為Java

截屏2020-10-29 19.32.25.png

上述兩種方法創(chuàng)建過(guò)后需要手動(dòng)在插件 pubspec.yaml 文件中 設(shè)置每個(gè)平臺(tái)對(duì)應(yīng)的類(lèi)名等信息娃兽,文檔描述說(shuō)在插件目錄下執(zhí)行 flutter packages get 后會(huì)生成對(duì)應(yīng)的平臺(tái)對(duì)應(yīng)目錄(如ios菇民、android),不知道為什么未生效投储,如果有人知道該怎么做歡迎聯(lián)系我

截屏2020-10-29 19.44.41.png

3. 通過(guò)命令行

具體參數(shù)設(shè)置可參考flutter 文檔

例:

 flutter create --org com.example.nativeapi --template=plugin --platforms=android,ios -i objc native_api

該命令會(huì)在插件下自動(dòng)創(chuàng)建好ios 及 android 目錄


截屏2020-10-29 20.16.08.png

二第练、增加方法

例如想要增加一個(gè)方法獲取字符串長(zhǎng)度

1. dart (native_api/lib/native_api.dart)

默認(rèn)創(chuàng)建的文件如下

class Nativeapi {
  static const MethodChannel _channel =
      const MethodChannel('nativeapi');

  static Future<String> get platformVersion async {
    final String version = await _channel.invokeMethod('getPlatformVersion');
    return version;
  }
}

新增一個(gè)countOfString

class NativeApi {
  static const MethodChannel _channel = const MethodChannel('native_api');

  static Future<String> get platformVersion async {
    final String version = await _channel.invokeMethod('getPlatformVersion');
    return version;
  }

  static Future<String> countOfString(str) async {
    final String count = await _channel.invokeMethod('countOfString', str);
    return count;
  }
}

2. ios (native_api/ios/Classes/NativeApiPlugin.m)

創(chuàng)建后自動(dòng)生成的代碼如下

#import "NativeApiPlugin.h"

@implementation NativeApiPlugin
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
  FlutterMethodChannel* channel = [FlutterMethodChannel
      methodChannelWithName:@"native_api"
            binaryMessenger:[registrar messenger]];
  NativeApiPlugin* instance = [[NativeApiPlugin alloc] init];
  [registrar addMethodCallDelegate:instance channel:channel];
}

- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
  if ([@"getPlatformVersion" isEqualToString:call.method]) {
    result([@"iOS " stringByAppendingString:[[UIDevice currentDevice] systemVersion]]);
  } else {
    result(FlutterMethodNotImplemented);
  }
}

@end

對(duì)countOfString 方法做具體處理,改完后文件代碼為

#import "NativeApiPlugin.h"

@implementation NativeApiPlugin
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
  FlutterMethodChannel* channel = [FlutterMethodChannel
      methodChannelWithName:@"native_api"
            binaryMessenger:[registrar messenger]];
  NativeApiPlugin* instance = [[NativeApiPlugin alloc] init];
  [registrar addMethodCallDelegate:instance channel:channel];
}

- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
  if ([@"getPlatformVersion" isEqualToString:call.method]) {
    result([@"iOS " stringByAppendingString:[[UIDevice currentDevice] systemVersion]]);
  }else if ([@"countOfString" isEqualToString:call.method]) {
      NSString *urlParam = call.arguments;
      result(@"字符串長(zhǎng)度為 3");
  }else {
    result(FlutterMethodNotImplemented);
  }
}

@end

三、在其他flutter工程中使用本地plugin

新建plugins 文件玛荞,將剛才的plugin拷貝進(jìn)去

截屏2020-10-29 21.22.53.png

修改工程的pubspec文件

截屏2020-10-29 21.24.46.png

在工程中引入
import 'package:native_api/native_api.dart'

使用

var futureValue = await NativeApi.countOfString("abc");

結(jié)果:

截屏2020-10-29 21.34.27.png

想要讓更多人用可以使用命令發(fā)布插件

$flutter packages pub publish --dry-run
$flutter packages pub publish

demo

demo地址

參考鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末娇掏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子勋眯,更是在濱河造成了極大的恐慌婴梧,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件客蹋,死亡現(xiàn)場(chǎng)離奇詭異塞蹭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)讶坯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)番电,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人辆琅,你說(shuō)我怎么就攤上這事漱办〉L溃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵洼冻,是天一觀的道長(zhǎng)崭歧。 經(jīng)常有香客問(wèn)我,道長(zhǎng)撞牢,這世上最難降的妖魔是什么率碾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮屋彪,結(jié)果婚禮上所宰,老公的妹妹穿的比我還像新娘。我一直安慰自己畜挥,他們只是感情好仔粥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蟹但,像睡著了一般躯泰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上华糖,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天麦向,我揣著相機(jī)與錄音,去河邊找鬼客叉。 笑死诵竭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的兼搏。 我是一名探鬼主播卵慰,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼佛呻!你這毒婦竟也來(lái)了裳朋?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤件相,失蹤者是張志新(化名)和其女友劉穎再扭,沒(méi)想到半個(gè)月后氧苍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體夜矗,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年让虐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了紊撕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赡突,死狀恐怖对扶,靈堂內(nèi)的尸體忽然破棺而出区赵,到底是詐尸還是另有隱情,我是刑警寧澤浪南,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布笼才,位于F島的核電站,受9級(jí)特大地震影響络凿,放射性物質(zhì)發(fā)生泄漏骡送。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一絮记、第九天 我趴在偏房一處隱蔽的房頂上張望摔踱。 院中可真熱鬧,春花似錦怨愤、人聲如沸派敷。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)篮愉。三九已至,卻和暖如春差导,著一層夾襖步出監(jiān)牢的瞬間潜支,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工柿汛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冗酿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓络断,卻偏偏與公主長(zhǎng)得像裁替,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子貌笨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355