如何在iOS中快速集成Flutter

   日期:2020-05-30     浏览:97    评论:0    
核心提示:如何在iOS中快速集成Flutter摘要:如何快速集成 Flutter 到 原生项目。集成之后如何使用flutter。一、如何快速集成集成的方式一般有两种:手动导入和pods 自动导入。手动导入就不用多说了直接把相应的framework 拖入项目即可,这种方式是比较笨重的(但也有大神自己写脚本来实现),我们来说说如何使用pods 快速集成吧。1、第一步:创建配置文件我们需要创建三个配置文件:Debug.xcconfigRelease.xcconfigFlutter.xcconfi移动开发

如何在iOS中快速集成Flutter

摘要:

如何快速集成 Flutter 到 原生项目。

集成之后如何使用flutter。

一、如何快速集成

集成的方式一般有两种:手动导入和pods 自动导入。

手动导入就不用多说了直接把相应的framework 拖入项目即可,这种方式是比较笨重的(但也有大神自己写脚本来实现),我们来说说如何使用pods 快速集成吧。

1、第一步:创建配置文件
我们需要创建三个配置文件:
Debug.xcconfig
Release.xcconfig
Flutter.xcconfig

Debug.xcconfig

#include "Flutter.xcconfig"
#include "Pods/Target Support Files/Pods-你自己的工程名字/Pods-你自己的工程名字.debug.xcconfig"

Release.xcconfig

#include "Flutter.xcconfig"
#include "Pods/Target Support Files/Pods-你自己的工程名字/Pods-你自己的工程名字.debug.xcconfig"

Flutter.xcconfig

#include "../my_flutter/.ios/Flutter/Generated.xcconfig"   // 需要改成你自己的目录
ENABLE_BITCODE=NO   // 关闭bitecdoe
2、添加配置文件到工程中
PROJECT-->info--->Configurations 配置成之前我们自己创建文件.xcconfig( 有iOS开发经验的应该都能看得懂)
3、添加编译flutter的脚本

Target->Build Phases->Run Script 中添加flutter包中工具中的一个工具脚本·xcode_backend.sh

这个脚本干了那些事呢,主要有一下几点:

  • 导入Flutter引擎的对应模式版本。
  • 编译Dart代码为App.framework。
  • 编译flutter_assets,并内嵌到App.framework。
  • 复制资源,并签名

脚本如下

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

FLUTTER_ROOT 这个变量是在Generated.xcconfig 配置文件中配的,会自动生成,指向的是flutter SDK所在的更目录。

4、配置PODS profile 文件

先上代码:

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

use_frameworks!

target 'Runner' do
  install_flutter_engine_pod
  install_flutter_plugin_pods flutter_application_path
end

下面我们来解释下:

其中非常关键的是podhelper 这个文件,在.ios/Flutte/ 目录下。

这个文件我不做具体解释,有兴趣的可以研究下,

首先是导入这个文件,因为我们需要使用到里边的一些方法。

install_flutter_engine_pod 方法:

其作用很简单:pod 'Flutter, 就是把Flutter引擎当做一个组件pod 到我们的工程中去。

install_flutter_plugin_pods 方法:

其作用就是把Flutter插件导入到我们项目中去,

.ios 目录下所有的Flutte 插件将会生成相对应的pod 组件,在对应的.symlinks 目录下,通过pod 的方式导入到我们的项目中。

5、pod install 完成集成

最后只需要使用命令:pod install 就可以完成集成工作。

二、如何使用Flutter

这里做一个简单的示范例子:

通过 FlutterViewController 来完成从原生到flutter 的跳转。

FlutterViewController *vc  = [[FlutterViewController alloc] init];
 [vc setInitialRoute:@"FirstView"];
 [self.navigationController pushViewController:vc animated:YES];

其中 FirstView 是一个标识,用于在flutter 中判断具体跳转到哪个页面Widget

void main() {
if(window.defaultRouteName =="FirstView"){
  return runApp(FirstView());
}else if(window.defaultRouteName == "SecondView"){
  return runApp(SecondView());
}else{
  return runApp(FirstView());
}
}

这样就完成了从原生到flutter 的一个跳转过程。

但是如果我们在flutter 使用了插件的时候,仅仅这样是不够的。

如果使用了插件,在iOS中我们还需要注册这些插件:

#import <UIKit/UIKit.h>
#import <Flutter/Flutter.h>
@interface AppDelegate : FlutterAppDelegate
@property (nonatomic,strong)FlutterEngine *flutterEngine;
@end

#import "AppDelegate.h"
#import <FlutterPluginRegistrant/GeneratedPluginRegistrant.h>

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.flutterEngine = [[FlutterEngine alloc] initWithName:@"io.flutter" project:nil];
    [self.flutterEngine runWithEntrypoint:nil];
    [GeneratedPluginRegistrant registerWithRegistry:self.flutterEngine]; 
    return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

 FlutterEngine *flutterEngine = ((AppDelegate *)[UIApplication sharedApplication].delegate).flutterEngine;
    FlutterViewController *vc  = [[FlutterViewController alloc] initWithEngine:flutterEngine nibName:nil bundle:nil];
    [vc setInitialRoute:@"FirstView"];
    [self.navigationController pushViewController:vc animated:YES];
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服