#import "MopPlugin.h" #import "MOPBaseApi.h" #import "MOPApiRequest.h" #import "MOPApiConverter.h" @implementation MopEventStream { FlutterEventSink _eventSink; } - (FlutterError *_Nullable)onListenWithArguments:(id _Nullable)arguments eventSink:(FlutterEventSink)events { _eventSink = events; return nil; } - (void)send:(NSString *)channel event:(NSString *)event body:(id)body { if (_eventSink) { NSDictionary *dictionary = @{@"channel": channel, @"event": event, @"body": body}; _eventSink(dictionary); } } - (FlutterError *_Nullable)onCancelWithArguments:(id _Nullable)arguments { _eventSink = nil; return nil; } @end @implementation MopPlugin + (void)registerWithRegistrar:(NSObject*)registrar { FlutterMethodChannel* channel = [FlutterMethodChannel methodChannelWithName:@"mop" binaryMessenger:[registrar messenger]]; MopPlugin* instance = [[MopPlugin alloc] init]; [registrar addMethodCallDelegate:instance channel:channel]; FlutterEventChannel *mopEventChannel = [FlutterEventChannel eventChannelWithName:@"plugins.mop.finogeeks.com/mop_event" binaryMessenger:[registrar messenger]]; instance.mopEventStreamHandler = [[MopEventStream alloc] init]; [mopEventChannel setStreamHandler:instance.mopEventStreamHandler]; } - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { if ([@"getPlatformVersion" isEqualToString:call.method]) { result([@"iOS " stringByAppendingString:[[UIDevice currentDevice] systemVersion]]); } else { MOPApiRequest* request = [[MOPApiRequest alloc] init]; request.command = call.method; request.param = (NSDictionary*)call.arguments; MOPBaseApi* api = [MOPApiConverter apiWithRequest: request]; if (api) { [api setupApiWithSuccess:^(NSDictionary * _Nonnull data) { result(@{@"retMsg":@"ok",@"success":@(YES),@"data": data}); } failure:^(id _Nullable error) { if ([error isKindOfClass:[NSDictionary class]]) { NSDictionary* dict = (NSDictionary*)error; if (dict != nil) { result(@{@"retMsg": dict ,@"success":@(NO)}); } else { result(@{@"retMsg": @"其它错误" ,@"success":@(NO)}); } } else { result(@{@"retMsg": error ,@"success":@(NO)}); } } cancel:^{ }]; } else { result(FlutterMethodNotImplemented); } } } @end