国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Flutter iOS 集成使用 fluter boost

這篇具有很好參考價值的文章主要介紹了Flutter iOS 集成使用 fluter boost。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在 Flutter項目中集成完 flutter boost,并且已經(jīng)使用了 flutter boost進(jìn)行了路由管理,這時如果需要和iOS混合開發(fā),這時就要到 原生端進(jìn)行集成。

注意:之前建的項目必須是 Flutter module項目,并且原生項目和flutter module項目在同一個文件夾下面

下面是原生端集成 flutter boost的步驟:

  • 在原生項目的 Podfile文件中添加如下代碼
# Uncomment the next line to define a global platform for your project
platform :ios, '12.0'


flutter_application_path = '../my_flutter'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')


target 'FlutterList' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for FlutterList
  install_all_flutter_pods(flutter_application_path)
  

  pod 'Masonry', '1.0.2'
  
end


post_install do |installer|
  flutter_post_install(installer) if defined?(flutter_post_install)
end

填寫完后指向 pod install。此時項目的pod目錄下面就會出現(xiàn) flutter相關(guān)的庫
Flutter iOS 集成使用 fluter boost,Flutter 提升之路,ios,flutter,cocoa
到此就完成 flutter混合開發(fā)的集成工作,接下來就是需要 編寫使用代碼

  • 編寫混合開發(fā)代碼
    這里沒有跟著flutter boost 官網(wǎng)進(jìn)行集成 https://github.com/alibaba/flutter_boost/blob/master/docs/install.md 創(chuàng)建代碼,稍微進(jìn)行了些改進(jìn)。

  • HYFlutterBoostDelegate

  • HYFlutterViewContainer

  • HYFlutterViewController
    分別創(chuàng)建了以上代碼,并且在AppDelegate 中使用 FlutterBoost。

  • HYFlutterBoostDelegate

import Foundation
import flutter_boost

class HYFlutterBoostDelegate: NSObject, FlutterBoostDelegate {
    
    ///您用來push的導(dǎo)航欄
    var navigationController:UINavigationController? {
        return UINavigationController.topNavigationController()?.navigationController
    }

    ///用來存返回flutter側(cè)返回結(jié)果的表
    var resultTable:Dictionary<String,([AnyHashable:Any]?)->Void> = [:];
    
    func pushNativeRoute(_ pageName: String!, arguments: [AnyHashable : Any]!) {

        //可以用參數(shù)來控制是push還是pop
        let isPresent = arguments["isPresent"] as? Bool ?? false
        let isAnimated = arguments["isAnimated"] as? Bool ?? true
        //這里根據(jù)pageName來判斷生成哪個vc,這里給個默認(rèn)的了
        let targetViewController = UIViewController()
        
        // 這里也可以使用路由進(jìn)行跳轉(zhuǎn)
        
        if(isPresent){
            self.navigationController?.present(targetViewController, animated: isAnimated, completion: nil)
        }else{
            self.navigationController?.pushViewController(targetViewController, animated: isAnimated)
        }
    }
    
    func pushFlutterRoute(_ options: FlutterBoostRouteOptions!) {
        let vc:HYFlutterViewController = HYFlutterViewController()
        vc.setName(options.pageName, uniqueId: options.uniqueId, params: options.arguments,opaque: options.opaque)
        vc.hidesBottomBarWhenPushed = true
        //對這個頁面設(shè)置結(jié)果
        resultTable[options.pageName] = options.onPageFinished;
        if let nav = navigationController  {
            nav.pushViewController(vc, animated: true)
        }
        
    }
    
    
    func popRoute(_ options: FlutterBoostRouteOptions!) {
        //如果當(dāng)前被present的vc是container,那么就執(zhí)行dismiss邏輯
        if let vc = self.navigationController?.presentedViewController as? HYFlutterViewController, vc.uniqueIDString() == options.uniqueId{
            
            //這里分為兩種情況,由于UIModalPresentationOverFullScreen下,生命周期顯示會有問題
            //所以需要手動調(diào)用的場景,從而使下面底部的vc調(diào)用viewAppear相關(guān)邏輯
            if vc.modalPresentationStyle == .overFullScreen {
                
                //這里手動beginAppearanceTransition觸發(fā)頁面生命周期
                self.navigationController?.topViewController?.beginAppearanceTransition(true, animated: false)
                
                vc.dismiss(animated: true) {
                    self.navigationController?.topViewController?.endAppearanceTransition()
                }
            }else{
                //正常場景,直接dismiss
                vc.dismiss(animated: true, completion: nil)
            }
        }else{
            self.navigationController?.popViewController(animated: true)
        }
        //否則直接執(zhí)行pop邏輯
        //這里在pop的時候?qū)?shù)帶出,并且從結(jié)果表中移除
        if let onPageFinshed = resultTable[options.pageName] {
            onPageFinshed(options.arguments)
            resultTable.removeValue(forKey: options.pageName)
        }
    }
    
}
  • HYFlutterViewContainer
#import <flutter_boost/FlutterBoost.h>

NS_ASSUME_NONNULL_BEGIN

@interface HYFlutterViewContainer : FBFlutterViewContainer

@end

NS_ASSUME_NONNULL_END
#import "HYFlutterViewContainer.h"

@interface HYFlutterViewContainer (){
    UINavigationBar *_bar;
}

@property (nonatomic)BOOL navigationBarHidden;
@property (nonatomic, strong) FBVoidCallback removeEventCallback;

@end

@implementation HYFlutterViewContainer

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:animated];
}

/// 設(shè)置這個container對應(yīng)的從flutter過來的事件監(jiān)聽
-(void)setupEventListeningFromFlutter{
    __weak typeof(self) weakSelf = self;
    // 為這個容器注冊監(jiān)聽,監(jiān)聽內(nèi)部的flutterPage往這個容器發(fā)的事件
    self.removeEventCallback = [FlutterBoost.instance addEventListener:^(NSString *name, NSDictionary *arguments) {
        __strong typeof(self) strongSelf = weakSelf;
        //事件名
        NSString *event = arguments[@"event"];
        //事件參數(shù)
        NSDictionary *args = arguments[@"args"];
        
        if ([event isEqualToString:@"enablePopGesture"]) {
            // 多page情況下的側(cè)滑動態(tài)禁用和啟用事件
            NSNumber *enableNum = args[@"enable"];
            BOOL enable = [enableNum boolValue];
            //右滑控制
//            strongSelf.fd_interactivePopDisabled = !enable;
        }
    } forName:self.uniqueId];
}

- (BOOL)navigationBarHidden {
    return YES;
}

- (UINavigationBar *)navBar
{
    if (!_bar) {
        _bar = [UINavigationBar new];
    }
    return _bar;
}

- (BOOL)shouldAutorotate
{
    return NO;
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}


@end
  • HYFlutterViewController
#import <UIKit/UIKit.h>
#import "HYFlutterViewContainer.h"


@interface HYFlutterViewController : UIViewController

@property (nonatomic, strong) HYFlutterViewContainer *container;

- (NSString *)uniqueIDString;

- (void)setName:(NSString *)name uniqueId:(NSString *)uniqueId params:(NSDictionary *)params opaque:(BOOL) opaque;

@end

#import "HYFlutterViewController.h"
#import <Masonry/Masonry.h>
#import "UINavigationController+HY.h"


@interface HYFlutterViewController ()

@end

@implementation HYFlutterViewController


- (void)setName:(NSString *)name uniqueId:(NSString *)uniqueId params:(NSDictionary *)params opaque:(BOOL) opaque {
    _container = [HYFlutterViewContainer new];
    [_container setName:name uniqueId:uniqueId params:params opaque:opaque];
}


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    // 隱藏導(dǎo)航欄
    [self.container.navigationController setNavigationBarHidden:YES animated:YES];
    
    [self addChildViewController:_container];
    [_container didMoveToParentViewController:self];
    
    [self.view addSubview:_container.view];
    [_container.view mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.mas_equalTo(UIEdgeInsetsZero);
    }];
}



- (NSString *)uniqueIDString {
    return self.container.uniqueIDString;
}

- (void)dealloc {
    [_container removeFromParentViewController];
    [_container didMoveToParentViewController:nil];
}

@end

  • AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    HYFlutterBoostDelegate* delegate = [[HYFlutterBoostDelegate alloc]init];
    
    [FlutterBoost.instance setup:application delegate:delegate callback:^(FlutterEngine *engine) {
        NSLog(@"FlutterBoost 開始操作");
        
    }];
    
    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
    
    ViewController* VC = [[ViewController alloc]init];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:VC];

    self.window.rootViewController = nav;
    [self.window makeKeyAndVisible];
    
    return YES;
}

使用 Flutter boost進(jìn)行調(diào)轉(zhuǎn)

- (void)btnClick:(UIButton *)btn {
    FlutterBoostRouteOptions* option = [[FlutterBoostRouteOptions alloc]init];
    option.pageName = @"/";
    [[[FlutterBoost instance] plugin].delegate pushFlutterRoute:option];
}

到此flutter boost原生交互使用結(jié)束,此時進(jìn)到flutter界面導(dǎo)航是沒有左側(cè)的返回按鈕的,這需要自己處理。文章來源地址http://www.zghlxwxcb.cn/news/detail-626530.html

到了這里,關(guān)于Flutter iOS 集成使用 fluter boost的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 利用Flutter的特性最大程度提升iOS應(yīng)用的用戶體驗

    利用Flutter的特性最大程度提升iOS應(yīng)用的用戶體驗

    本文探討了使用Flutter開發(fā)的iOS應(yīng)用能否上架,以及上架的具體流程。蘋果提供了App Store作為正式上架渠道,同時也有TestFlight供開發(fā)者進(jìn)行內(nèi)測。合規(guī)并通過審核后,F(xiàn)lutter應(yīng)用可以順利上架。但上架過程可能存在一些挑戰(zhàn),因此可能需要專業(yè)技術(shù)人員或上架服務(wù)商的協(xié)助。

    2024年04月10日
    瀏覽(24)
  • flutter3.7版本下使用flutter boost解決使用platview崩潰或異常問題

    flutter3.7版本下使用flutter boost解決使用platview崩潰或異常問題

    背景 ? 工程使用了混合開發(fā),使用flutter boost插件,flutter 的activity1 frament1 跳轉(zhuǎn)activity2 frament2,frament1 包含platformView,按照上面老哥解決崩潰問題的基礎(chǔ)上,出現(xiàn)activity2 frament2返回activity1 frament1時,platformView觸摸事件沒有響應(yīng)。問題具體見:https://github.com/alibaba/flutter_boost/is

    2024年02月13日
    瀏覽(16)
  • Flutter如何集成到已有iOS工程上

    Flutter如何集成到已有iOS工程上

    大家好,我是咕嚕鐵蛋,今天我將和大家分享一個實用的技術(shù)教程——如何將Flutter集成到已有的iOS工程中。Flutter是Google推出的一款開源的移動UI框架,它允許開發(fā)者使用Dart語言來開發(fā)高性能、美觀的原生應(yīng)用,并支持iOS和Android兩大平臺。然而,在實際開發(fā)中,我們經(jīng)常會遇

    2024年04月12日
    瀏覽(38)
  • 機(jī)器學(xué)習(xí)——boosting之提升樹

    機(jī)器學(xué)習(xí)——boosting之提升樹

    提升樹和adaboost基本流程是相似的 我看到提升樹的時候,懵了 這…跟adaboost有啥區(qū)別??? 直到看到有個up主說了,我才稍微懂 相當(dāng)于,我在adaboost里的弱分類器,換成CART決策樹就好了唄? 書上也沒有明說,唉。。。 還好,有大神提升樹的具體講解 看出來了,提升樹主要是

    2024年02月09日
    瀏覽(13)
  • 【c++修行之路】IO流架構(gòu)及使用

    【c++修行之路】IO流架構(gòu)及使用

    大家好久不見,今天一起來學(xué)習(xí)c++中的IO流。 這兩張架構(gòu)圖略顯復(fù)雜,這里給出一張比較清楚的IO流架構(gòu)圖: 也就是說,我們平時使用的諸如cin、cout、cerr、clog都是來自 iostream 這個頭文件下的,他們分別是 istream 頭文件下的istream和ostream的實例對象。 istream 頭文件里的iostre

    2024年02月16日
    瀏覽(21)
  • 集成使用 GitHub Copilot 提升 IDEA 開發(fā)效率

    集成使用 GitHub Copilot 提升 IDEA 開發(fā)效率

    集成使用 GitHub Copilot 提升 IDEA 開發(fā)效率 在現(xiàn)代軟件開發(fā)中,集成開發(fā)環(huán)境(IDE)如IntelliJ IDEA已經(jīng)成為開發(fā)人員不可或缺的工具。它們提供了代碼編輯、調(diào)試、版本控制等一系列功能,極大地提高了開發(fā)效率。而GitHub Copilot作為一款新興的AI輔助開發(fā)工具,可以與IDE無縫集成,

    2024年02月21日
    瀏覽(27)
  • 一統(tǒng)天下 flutter - 插件: flutter 使用 ios 原生控件,并做數(shù)據(jù)通信

    源碼 https://github.com/webabcd/flutter_demo 作者 webabcd 示例如下: libpluginplugin2.dart iosRunnerAppDelegate.swift iosRunnerMyFlutterPlugin2.swift iosRunnerMyView.swift 源碼 https://github.com/webabcd/flutter_demo 作者 webabcd

    2024年02月03日
    瀏覽(25)
  • 如何在 macOS 上同時使用 Flutter2 和 Flutter3 進(jìn)行 ios 開發(fā)

    如何在 macOS 上同時使用 Flutter2 和 Flutter3 進(jìn)行 ios 開發(fā)

    貓哥主打系統(tǒng)環(huán)境是: macos flutter 3.7.12 ruby 3.2.2 cocoapods 1.12.1 xcode 14.3.1 這套配置運行最新的項目沒問題,但是最近需要維護(hù) flutter 2.10.5 這種老項目,雖然用了 fvm 進(jìn)行 flutter 版本切換,但是 flutter 2.10.5 用的 ruby 2 ,我當(dāng)前是 ruby 3 所以運行 pod install 的時候就報錯了。 這個錯誤

    2024年02月12日
    瀏覽(27)
  • Flutter ios 使用ListView 。滾動時 AppBar 改變顏色問題

    Flutter ios 使用ListView 。滾動時 AppBar 改變顏色問題

    在Ios 中 列表滾動條向下滾動一段距離后 會導(dǎo)致 AppBar 顏色改變? 可以給 AppBar 或者 AppBarTheme。 scrolledUnderElevation: 0.0 屬性 全局: 局部: 效果:? 滾動前 滾動后 x ke z

    2024年04月17日
    瀏覽(20)
  • 【flutter】使用permission_handler配置android和 iOS的權(quán)限

    flutter在pub.flutter-io.cn插件庫中有很多的關(guān)于權(quán)限配置的插件,但是就我個人而言,比較推薦使用permission_handler這個插件。當(dāng)我們打開permission_handler時候,往往新手小白會因為它的官網(wǎng)文檔而弄的一頭霧水,權(quán)限配置往往涉及到android和ios兩個方向的相關(guān)知識,有可能大多數(shù)人就

    2024年02月12日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包