blob: ca4d5db373f63c15b5cd3529775eead11f6be3ef [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import <Flutter/Flutter.h>
#import "AppDelegate.h"
#import "HybridViewController.h"
@interface HybridViewController ()
@end
static NSString *_kChannel = @"increment";
static NSString *_kPing = @"ping";
@implementation HybridViewController {
FlutterBasicMessageChannel *_messageChannel;
}
- (FlutterEngine *)engine {
return [(AppDelegate *)[[UIApplication sharedApplication] delegate] engine];
}
- (FlutterBasicMessageChannel *)reloadMessageChannel {
return [(AppDelegate *)[[UIApplication sharedApplication] delegate]
reloadMessageChannel];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"Hybrid Flutter/Native";
UIStackView *stackView = [[UIStackView alloc] initWithFrame:self.view.frame];
stackView.axis = UILayoutConstraintAxisVertical;
stackView.distribution = UIStackViewDistributionFillEqually;
stackView.layoutMargins = UIEdgeInsetsMake(0, 0, 50, 0);
stackView.layoutMarginsRelativeArrangement = YES;
[self.view addSubview:stackView];
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]
initWithTitle:@"Back"
style:UIBarButtonItemStylePlain
target:nil
action:nil];
NativeViewController *nativeViewController =
[[NativeViewController alloc] initWithDelegate:self];
[self addChildViewController:nativeViewController];
[stackView addArrangedSubview:nativeViewController.view];
[nativeViewController didMoveToParentViewController:self];
_flutterViewController =
[[FlutterViewController alloc] initWithEngine:[self engine]
nibName:nil
bundle:nil];
[[self reloadMessageChannel] sendMessage:@"hybrid"];
_messageChannel = [[FlutterBasicMessageChannel alloc]
initWithName:_kChannel
binaryMessenger:_flutterViewController.binaryMessenger
codec:[FlutterStringCodec sharedInstance]];
[self addChildViewController:_flutterViewController];
[stackView addArrangedSubview:_flutterViewController.view];
[_flutterViewController didMoveToParentViewController:self];
__weak NativeViewController *weakNativeViewController = nativeViewController;
[_messageChannel setMessageHandler:^(id message, FlutterReply reply) {
[weakNativeViewController didReceiveIncrement];
reply(@"");
}];
}
- (void)didTapIncrementButton {
[_messageChannel sendMessage:_kPing];
}
@end