iOS项目集成flutter

739 阅读1分钟
原文链接: www.jianshu.com

最近移动端火爆无非是Flutter--舍我其谁,而官网的引导之中鲜有说怎么在已有项目中去集成Flutter,今天我们就再蹭个热门来进行一个iOS集成

1 创建iOS项目(做测试使用) 2 cocoapods走起

project 'XX.xcodeproj'
#source 'https://github.com/CocoaPods/Specs.git'
#platform :ios, '9.0'
#inhibit_all_warnings!
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'XX' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  # Pods for XX

  target 'XXTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'XXUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end
flutter_application_path = './flutter_module'
eval(File.read(File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')), binding)

关键部锋分就是末尾添加的

flutter_application_path = './flutter_module'
eval(File.read(File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')), binding)

3 进入项目根目录添加flutter_module

flutter create -t module flutter_module

4 Xcode 设置 Build Phases 添加 Run Scripts

"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build

4 pod install

5 code设置 5.1 Appdelegate

#import <Flutter/Flutter.h>
@interface AppDelegate : FlutterAppDelegate

//@property (strong, nonatomic) UIWindow *window;


@end
#import <FlutterPluginRegistrant/GeneratedPluginRegistrant.h> // Only if you have Flutter Plugins

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [GeneratedPluginRegistrant registerWithRegistry:self];
    return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

5.2 Controller切换


- (IBAction)pushFlutterVC:(id)sender {
    FlutterViewController *flutterViewController = [[FlutterViewController alloc] init];
    flutterViewController.view.backgroundColor = [UIColor cyanColor];
    [flutterViewController setInitialRoute:@"route1"];

    [self presentViewController:flutterViewController
                       animated:YES completion:^{
                           UIViewController * vc = [[NextViewController alloc] init];
//                           vc.view.backgroundColor = [UIColor whiteColor];
                           AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
                           UIViewController * rootVC = appDelegate.window.rootViewController;
                           UIViewController * topVC = nil;
                           if ([rootVC isKindOfClass:[UINavigationController class]]) {
                                topVC =  ((UINavigationController *)rootVC).topViewController.presentedViewController;
                           } else {
                               topVC =  rootVC.presentedViewController;
                           }
                           [topVC presentViewController:vc animated:YES completion:nil];
                       }];
}

5.2中我们要考虑到首页是Nav UIViewCOntrooler 或者是FlutterViewController 到此我们的就可以直接Xcode run运行项目啦

6 假如想实现hot reload

进入项目中的flutter_module,运行
flutter attach
热更新