第2节:交互时iOS端的代码编写

本节学习内容:原生iOS项目在交互时的代码编写。

本节学习用时:30分钟

本节学习方式:动手实践

本节目录:

一、本节内容介绍

二、本节代码解释

一、本节内容介绍

略!

二、本节代码解释

1、本节代码

- (void)showMainFlutterViewControllerWithoutParam {
    self.navigationController.navigationBarHidden = YES;

    FlutterViewController *flutterViewController = [[FlutterViewController alloc] initWithProject:nil nibName:nil bundle:nil];

    NSString *channelName = @"com.dvlproad.ciyouzen/platform_channel";// 要与.dart中一致
    FlutterMethodChannel *messageChannel = [FlutterMethodChannel methodChannelWithName:channelName binaryMessenger:flutterViewController];

    [messageChannel setMethodCallHandler:^(FlutterMethodCall * _Nonnull call, FlutterResult  _Nonnull result) {
        // call.method获取flutter给回到的方法名,要匹配到channelName对应的多个 发送方法名,一般需要判断区分
        // call.arguments获取到flutter给到的参数,(比如跳转到另一个页面所需要参数)
        // result是给flutter的回调,只能回调一次
        NSString *message = [NSString stringWithFormat:@"flutter回调:\n nmethod = %@\n arguments = %@", call.method, call.arguments];
        NSLog(@"%@", message);

        if ([call.method isEqualToString:@"showToast"]) {
            [CJToast shortShowMessage:message];
            return;

        } else if ([call.method isEqualToString:@"goBack"]) {
            [self.navigationController popViewControllerAnimated:YES];
            return;

        } else if ([call.method isEqualToString:@"goiosPage"]) {
            OCCallFlutterViewController *viewController = [[OCCallFlutterViewController alloc] init];
            viewController.parames = call.arguments;
            [self.navigationController pushViewController:viewController animated:YES];
            return;

        } else if ([call.method isEqualToString:@"changeLeftBarButtonAction"]) {
            NSDictionary *params = @{@"imageName":@"lib/Resources/message_arrow.png"};
            result(params);
            return;
        }

        result(FlutterMethodNotImplemented);
    }];

    [self.navigationController pushViewController:flutterViewController animated:YES];
}

Last updated