// Copyright 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "AppDelegate.h" #include "GeneratedPluginRegistrant.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [GeneratedPluginRegistrant registerWithRegistry:self]; // Override point for customization after application launch. FlutterViewController *flutterController = (FlutterViewController *)self.window.rootViewController; [self setupMessagingHandshakeOnChannel: [FlutterBasicMessageChannel messageChannelWithName:@"binary-msg" binaryMessenger:flutterController codec:[FlutterBinaryCodec sharedInstance]]]; [self setupMessagingHandshakeOnChannel: [FlutterBasicMessageChannel messageChannelWithName:@"string-msg" binaryMessenger:flutterController codec:[FlutterStringCodec sharedInstance]]]; [self setupMessagingHandshakeOnChannel: [FlutterBasicMessageChannel messageChannelWithName:@"json-msg" binaryMessenger:flutterController codec:[FlutterJSONMessageCodec sharedInstance]]]; [self setupMessagingHandshakeOnChannel: [FlutterBasicMessageChannel messageChannelWithName:@"std-msg" binaryMessenger:flutterController codec:[FlutterStandardMessageCodec sharedInstance]]]; [self setupMethodCallSuccessHandshakeOnChannel: [FlutterMethodChannel methodChannelWithName:@"json-method" binaryMessenger:flutterController codec:[FlutterJSONMethodCodec sharedInstance]]]; [self setupMethodCallSuccessHandshakeOnChannel: [FlutterMethodChannel methodChannelWithName:@"std-method" binaryMessenger:flutterController codec:[FlutterStandardMethodCodec sharedInstance]]]; return [super application:application didFinishLaunchingWithOptions:launchOptions]; } - (void)setupMessagingHandshakeOnChannel:(FlutterBasicMessageChannel*)channel { [channel setMessageHandler:^(id message, FlutterReply reply) { [channel sendMessage:message reply:^(id messageReply) { [channel sendMessage:messageReply]; reply(message); }]; }]; } - (void)setupMethodCallSuccessHandshakeOnChannel:(FlutterMethodChannel*)channel { [channel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) { if ([call.method isEqual:@"success"]) { [channel invokeMethod:call.method arguments:call.arguments result:^(id value) { [channel invokeMethod:call.method arguments:value]; result(call.arguments); }]; } else if ([call.method isEqual:@"error"]) { [channel invokeMethod:call.method arguments:call.arguments result:^(id value) { FlutterError* error = (FlutterError*) value; [channel invokeMethod:call.method arguments:error.details]; result(error); }]; } else { [channel invokeMethod:call.method arguments:call.arguments result:^(id value) { NSAssert(value == FlutterMethodNotImplemented, @"Result must be not implemented"); [channel invokeMethod:call.method arguments:nil]; result(FlutterMethodNotImplemented); }]; } }]; } @end