Flutter與iOS原生交互

Flutter調(diào)用原生方法并且傳參

Flutter


Future reportError(errorJson)async{
  const platform = const MethodChannel("com.xxx.xxx");
  var result;
  try{
    result = await platform.invokeMethod('reportErrorMethod',errorJson);
    return Future.value(result);
  }on PlatformException catch(e){
    return Future.error(e.toString());
  }
}

OC

新建文件.h
#import <Foundation/Foundation.h>
#import <Flutter/Flutter.h>
NS_ASSUME_NONNULL_BEGIN

@interface FlutterNativePlugin : NSObject<FlutterPlugin>

@end

NS_ASSUME_NONNULL_END


新建文件.m
#import "FlutterNativePlugin.h"

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

- (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result{
    if ([@"isChinese" isEqualToString:call.method]) {
        result([NSNumber numberWithBool:YES]);
    }else if([@"reportErrorMethod" isEqualToString:call.method]){
        //flutter傳給原生的參數(shù)
        NSString * para = call.arguments;
        if (para.length != 0) {
            //OC傳參給Flutter
            result([NSString stringWithFormat:@"從原生返回過來的==>%@",para]);
        }else{
      //向flutter拋出異常
        result([FlutterError errorWithCode:@"404" message:[NSString stringWithFormat:@"我是異常信息"] details:@"我是異常描述"]);
        }
    }else{
        result (FlutterMethodNotImplemented);
    }
}
@end

MethodChannel方式
待續(xù)

Plugin包

 ##需要引用iOS自定義framework庫。 
 在podspec下, 通過s.subspec的方式,指定正確的framework路徑
  s.subspec 'xxxxFramework' do |ss|
        ss.source_files = 'xxxxFramework/**/*.{h,m}'
        ss.resource = 'xxxxFramework/**/*.{bundle,lic}'
        ss.vendored_frameworks = 'xxxxFramework/xxxx.framework'
  end
##需要引用iOS系統(tǒng)framework庫。
在podspec下
#依賴系統(tǒng)Accelerate.framework
  s.frameworks = 'Accelerate'
#依賴libc++.tbd , 去除lib前綴
  s.libraries = 'c++'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容