#import "IjkplayerPlugin.h" #import "FlutterIjkManager.h" #import "FlutterIJK.h" @interface FlutterMethodCall (Ijk) - (int64_t)getId; - (int64_t)getIdParamFromDict; - (NSString *)getStringParam:(NSString *)key; @end @implementation IjkplayerPlugin { FlutterIjkManager *manager; } - (instancetype)initWithRegistrar:(NSObject *)registrar { self = [super init]; if (self) { self.registrar = registrar; manager = [FlutterIjkManager managerWithRegistrar:registrar]; } return self; } + (instancetype)pluginWithRegistrar:(NSObject *)registrar { return [[self alloc] initWithRegistrar:registrar]; } + (void)registerWithRegistrar:(NSObject*)registrar { FlutterMethodChannel* channel = [FlutterMethodChannel methodChannelWithName:@"top.kikt/ijkplayer" binaryMessenger:[registrar messenger]]; IjkplayerPlugin *instance = [IjkplayerPlugin pluginWithRegistrar:registrar]; [registrar addMethodCallDelegate:instance channel:channel]; } - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { if ([@"create" isEqualToString:call.method]) { @try { int64_t id = [manager create]; result(@(id)); } @catch (NSException *exception) { result([FlutterError errorWithCode:@"1" message:@"创建失败" details:exception]); } } else if ([@"dispose" isEqualToString:call.method]) { int64_t id = [call getId]; [manager disposeWithId:id]; } else if ([@"play" isEqualToString:call.method]) { FlutterIJK *ijk = [manager findIJKWithId:call.getId]; if (ijk) { [ijk play]; result(@(1)); } } else if ([@"pause" isEqualToString:call.method]) { FlutterIJK *ijk = [manager findIJKWithId:[call getId]]; if (ijk) { [ijk pause]; } } else if ([@"stop" isEqualToString:call.method]) { FlutterIJK *ijk = [manager findIJKWithId:[call getId]]; if (ijk) { [ijk stop]; } } else if ([@"setDataSource" isEqualToString:call.method]) { FlutterIJK *ijk = [manager findIJKWithId:[call getIdParamFromDict]]; if (ijk) { NSString *uri = [call getStringParam:@"uri"]; [ijk setDateSourceWithUri:uri]; result(nil); } else { result([FlutterError errorWithCode:@"1" message:@"设置失败" details:nil]); } } else { result(FlutterMethodNotImplemented); } } @end @implementation FlutterMethodCall (Ijk) - (int64_t)getId { return [[self arguments] intValue]; } - (int64_t)getIdParamFromDict { return [[self arguments][@"id"] intValue]; } - (NSString *)getStringParam:(NSString *)key { return [self arguments][key]; } @end