//// MPIOSRoute.m// mp_ios_runtime//// Created by PonyCui on 2021年6月21日.// Copyright © 2021 MPFlutter. All rights reserved.//#import "MPIOSRouter.h"#import "MPIOSApp.h"#import "MPIOSViewController.h"#import "MPIOSEngine+Private.h"@interface MPIOSRouter ()@property (nonatomic, strong) NSMutableDictionary<NSString *, MPIOSRouteResponseBlock> *routeResponseHandler;@property (nonatomic, assign) BOOL doBacking;@property (nonatomic, strong) NSNumber *thePushingRouteId;@end@implementation MPIOSRouter- (instancetype)init{self = [super init];if (self) {_routeResponseHandler = [NSMutableDictionary dictionary];}return self;}- (void)requestRoute:(NSString *)routeNamerouteParams:(NSDictionary *)routeParamsisRoot:(BOOL)isRootviewport:(CGSize)viewportcompletionBlock:(MPIOSRouteResponseBlock)completionBlock {if (self.thePushingRouteId != nil) {NSNumber *value = self.thePushingRouteId;self.thePushingRouteId = nil;[self.engine sendMessage:@{@"type": @"router",@"message": @{@"event": @"updateRoute",@"routeId": value,@"viewport": @{@"width": @(viewport.width),@"height": @(viewport.height),},},}];completionBlock(value);return;}NSString *requestId = [[NSUUID UUID] UUIDString];self.routeResponseHandler[requestId] = completionBlock;[self.engine sendMessage:@{@"type": @"router",@"message": @{@"event": @"requestRoute",@"requestId": requestId,@"name": routeName ?: @"/",@"params": routeParams ?: @{},@"viewport": @{@"width": @(viewport.width),@"height": @(viewport.height),},@"root": [NSNumber numberWithBool:isRoot],},}];}- (void)updateRouteViewport:(NSNumber *)routeId viewport:(CGSize)viewport {[self.engine sendMessage:@{@"type": @"router",@"message": @{@"event": @"updateRoute",@"routeId": routeId,@"viewport": @{@"width": @(viewport.width),@"height": @(viewport.height),},},}];}- (void)reponseRoute:(NSDictionary *)message {if (![message isKindOfClass:[NSDictionary class]]) {return;}NSString *requestId = message[@"requestId"];NSNumber *routeId = message[@"routeId"];if ([requestId isKindOfClass:[NSString class]] && [routeId isKindOfClass:[NSNumber class]]) {if (self.routeResponseHandler[requestId] != nil) {self.routeResponseHandler[requestId](routeId);[self.routeResponseHandler removeObjectForKey:requestId];}}}- (void)didReceivedRouteData:(NSDictionary *)message {if (![message isKindOfClass:[NSDictionary class]]) {return;}NSString *event = message[@"event"];if (![event isKindOfClass:[NSString class]]) {return;}if ([event isEqualToString:@"responseRoute"]) {[self reponseRoute:message];}if ([event isEqualToString:@"didPush"]) {[self didPush:message];}else if ([event isEqualToString:@"didReplace"]) {[self didReplace:message];}else if ([event isEqualToString:@"didPop"]) {[self didPop];}}- (void)dispose:(NSNumber *)viewId {if (self.doBacking) {return;}if (viewId == nil) {return;}MPIOSEngine *engine = self.engine;if (engine != nil) {[engine sendMessage:@{@"type": @"router",@"message": @{@"event": @"disposeRoute",@"routeId": viewId,},}];}}- (void)triggerPop:(NSNumber *)viewId {if (self.doBacking) {return;}if (viewId == nil) {return;}MPIOSEngine *engine = self.engine;if (engine != nil) {[engine sendMessage:@{@"type": @"router",@"message": @{@"event": @"doPop",@"toRouteId": [NSString stringWithFormat:@"%ld", (long)[viewId integerValue]],},}];}}- (void)didPush:(NSDictionary *)message {if (!([message[@"routeId"] isKindOfClass:[NSNumber class]])) {return;}MPIOSEngine *engine = self.engine;self.thePushingRouteId = message[@"routeId"];if (engine != nil) {UINavigationController *navigationController = engine.app.navigationController;if (navigationController != nil) {UIViewController *nextViewContrroller = [engine.app createPushingViewController];[navigationController pushViewController:nextViewContrroller animated:YES];}}}- (void)didReplace:(NSDictionary *)message {if (!([message[@"routeId"] isKindOfClass:[NSNumber class]])) {return;}MPIOSEngine *engine = self.engine;self.thePushingRouteId = message[@"routeId"];if (engine != nil) {UINavigationController *navigationController = engine.app.navigationController;if (navigationController != nil) {UIViewController *nextViewContrroller = [engine.app createPushingViewController];NSMutableArray *viewControllers = navigationController.viewControllers.mutableCopy;[viewControllers removeLastObject];[viewControllers addObject:nextViewContrroller];[navigationController setViewControllers:viewControllers.copy];}}}- (void)didPop {self.doBacking = YES;MPIOSEngine *engine = self.engine;if (engine != nil) {UINavigationController *navigationController = engine.app.navigationController;if (navigationController != nil) {[navigationController popViewControllerAnimated:YES];}}self.doBacking = NO;}@end
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。