Flutter (半年開發(fā)經(jīng)驗(yàn))- iOS原生導(dǎo)航欄顷蟀、iOS主動(dòng)通知Flutter、最新微信SDK處理(iOS)骡技、Flutter圖片壓縮(需要image_Picker)鸣个、Flutter接收原生通知數(shù)據(jù)

AppDelegate.m

/** iOS原生導(dǎo)航欄 */
FlutterViewController *controller = (FlutterViewController *)self.window.rootViewController;
///原生導(dǎo)航欄
ExpressNavigationController *nav = [[ExpressNavigationController alloc ]initWithRootViewController:controller];
 self.window.rootViewController = nav;
 [self.window makeKeyAndVisible];
///隱藏原生導(dǎo)航欄,因?yàn)橐褂肍lutter的導(dǎo)航欄布朦。
 [controller.navigationController setNavigationBarHidden:YES animated:YES];

/** iOS主動(dòng)通知Flutter -注冊通知 */
[XlbPlugin registerWithRegistrar:[controller registrarForPlugin:@"XlbPlugin"]];
 [GeneratedPluginRegistrant registerWithRegistry:controller];

FlutterPlugin.h

#import <Foundation/Foundation.h>
#import <Flutter/Flutter.h>

@interface XlbPlugin : NSObject<FlutterPlugin>

/** 發(fā)送信息 */
+ (void)sendMessage:(NSDictionary *)dic;

/** 處理OpenURL */
+ (void)handleOpenURL:(NSURL*)url;

+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar;

@end

FlutterPlugin.m

#import "XlbPlugin.h"


__weak XlbPlugin* __XlbPlugin;

@interface XlbPlugin()

@property (copy,nonatomic) FlutterBasicMessageChannel *channel;

@end
@implementation XlbPlugin


-(id)init{
    if(self = [super init]){
        __XlbPlugin  = self;
    }
    return self;
}

+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar{
    FlutterBasicMessageChannel *basicMessage_channel = [FlutterBasicMessageChannel messageChannelWithName:@"XlbBasicMessage_Plugin" binaryMessenger:[registrar messenger]];
    FlutterMethodChannel *method_Channel = [FlutterMethodChannel
                                     methodChannelWithName:@"XlbMethod_Plugin"
                                     binaryMessenger:[registrar messenger]];
    XlbPlugin *instance = [[XlbPlugin alloc] init];
    [registrar addMethodCallDelegate:instance channel:method_Channel];
    [__XlbPlugin channelSet:basicMessage_channel];
}
//MARK: - Getter/Setter
- (void)channelSet:(FlutterBasicMessageChannel *)channel{
    _channel = channel;
}

+ (void)sendMessage:(NSDictionary *)dic{
    [__XlbPlugin sendMessage:dic];
}

+ (void)handleOpenURL:(NSURL*)url{
    [__XlbPlugin openUrl:url];
}

- (void)sendMessage:(NSDictionary *)dic{
    [self.channel sendMessage:dic];
}
- (void)openUrl:(NSURL *)url{
    [self.channel sendMessage:[NSString stringWithFormat:@"%@",url]];
}

最新微信SDK處理-universalLink配置網(wǎng)上一大堆

//最新微信需要配置universalLink毛萌,配置后微信打開APP走的下面方法。未配置走的openapplication:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
    ///第三方插件也是通過這個(gè)方法處理URL
   [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
    NSURL *url = userActivity.webpageURL;
    NSString *path = url.path;
  //這兒處理的是分享鏈接的喝滞。
    if ([path rangeOfString:appid].location != NSNotFound) {
        [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];
    }
    if ([path rangeOfString:@"share"].location != NSNotFound) {
        NSDictionary *dic = @{@"share":[self diwWithUrl:userActivity.webpageURL.absoluteString],@"key":@"share"};
        ///發(fā)消息給Flutter
        [XlbPlugin sendMessage:dic];
        ///APP重新打開的情況下阁将,發(fā)通知給Flutter。Flutter不會(huì)及時(shí)處理右遭,需要在APP打開后通過粘貼板處理鏈接做盅。
        UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
        pasteboard.string = url.absoluteString;
    }
    return YES;
}

處理Flutter通知原生-圖片壓縮(需要image_Picker)

FlutterMethodChannel *shareChannel = [FlutterMethodChannel methodChannelWithName:@"NativeCode" binaryMessenger:controller];
    [shareChannel setMethodCallHandler:^(FlutterMethodCall * _Nonnull call, FlutterResult  _Nonnull result) {
      
      ///使用原生導(dǎo)航欄-跳轉(zhuǎn)原生界面
      if ([call.method isEqualToString:@"Webview"]){
            ScanWebViewController *webView = [[ScanWebViewController alloc]init];
            webView.webUrl = call.arguments;
            webView.hidesBottomBarWhenPushed = YES;
            ///原生導(dǎo)航欄 ExpressNavigationController *nav = [[ExpressNavigationController alloc ]initWithRootViewController:controller];
            [nav pushViewController:webView animated:YES];
        }
        if ([call.method isEqualToString:@"imageEdit"]){
            //原圖地址
            NSString *originalImageFile = call.arguments;
            NSData *originalImageData = [NSData dataWithContentsOfFile:originalImageFile];
            UIImage *originalImage = [UIImage imageWithData:originalImageData];
            CGFloat soriginalKB = originalImageData.length / 1024.0;
            NSLog(@"原圖地址:%@,圖片大小:%.2fKB",originalImageFile,soriginalKB);
            if (soriginalKB < 500){
                result(originalImageFile);
            } else{
                //處理后圖片
                NSData *imageDate = [NetworkingRequest reSizeImageData:originalImage maxImageSize:0 maxSizeWithKB:500];
                UIImage *editImage = [UIImage imageWithData:imageDate];
                ///用imagePicker保存圖片窘哈,返回路徑
                NSString *imagePath = [FLTImagePickerPhotoAssetUtil saveImageWithOriginalImageData:originalImageData image:editImage maxWidth:[NSNumber numberWithFloat:originalImage.size.width] maxHeight:[NSNumber numberWithFloat:originalImage.size.height] imageQuality:[NSNumber numberWithInt:1]];
                //處理后圖片大小
                CGFloat sizeOriginKB = imageDate.length / 1024.0;
                NSLog(@"現(xiàn)圖地址:%@,圖片大写盗瘛:%.2fKB",imagePath,sizeOriginKB);
                result(imagePath);
            }
        }
    }];

Flutter端處理

static const BasicMessageChannel<dynamic> iosMessage =
const BasicMessageChannel(
"XlbBasicMessageNSDictionary_Plugin", StandardMessageCodec());

@override
void initState() {
super.initState();
iosMessage.setMessageHandler((dynamic value) {
print('收到iOS原生消息:' + value.toString());
//我原生傳過來的是NSDictionary,所以Flutter用Map接收
Map dic = value;
});
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滚婉,一起剝皮案震驚了整個(gè)濱河市图筹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖远剩,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扣溺,死亡現(xiàn)場離奇詭異,居然都是意外死亡瓜晤,警方通過查閱死者的電腦和手機(jī)锥余,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痢掠,“玉大人驱犹,你說我怎么就攤上這事∽慊” “怎么了雄驹?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長淹辞。 經(jīng)常有香客問我荠医,道長,這世上最難降的妖魔是什么桑涎? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮兼贡,結(jié)果婚禮上攻冷,老公的妹妹穿的比我還像新娘。我一直安慰自己遍希,他們只是感情好等曼,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凿蒜,像睡著了一般禁谦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上废封,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天州泊,我揣著相機(jī)與錄音,去河邊找鬼漂洋。 笑死遥皂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刽漂。 我是一名探鬼主播演训,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贝咙!你這毒婦竟也來了样悟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窟她,沒想到半個(gè)月后陈症,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡礁苗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年爬凑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片试伙。...
    茶點(diǎn)故事閱讀 40,615評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘁信,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疏叨,到底是詐尸還是另有隱情潘靖,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布蚤蔓,位于F島的核電站卦溢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏秀又。R本人自食惡果不足惜单寂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吐辙。 院中可真熱鬧宣决,春花似錦、人聲如沸昏苏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贤惯。三九已至洼专,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間孵构,已是汗流浹背屁商。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颈墅,地道東北人棒假。 一個(gè)月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像精盅,于是被迫代替她去往敵國和親帽哑。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容