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++'