mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
77 lines
2.7 KiB
Objective-C
77 lines
2.7 KiB
Objective-C
// 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
|