欢迎您光临深圳塔灯网络科技有限公司!
电话图标 余先生:13699882642

网站百科

为您解码网站建设的点点滴滴

在存在的iOS工程中使用Flutter

发表日期:2018-09 文章编辑:小灯 浏览次数:3111

参考:https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps

本文代码:https://github.com/yonglinwang002/TestFlutter

一、生成Flutter 模块

假设已有工程 TestFlutter

$ cd TestFlutter/

$ flutter create -t module flutter_library

执行后会生成

flutter_library 目录

结构如下

Flutter模块

二、使用宿主工程依赖Flutter模块

在主工程中增加一个 Group 如名为Flutter

生成后结构

TestFlutter/

    Flutter/

      Flutter.xcconfig

    TestFlutter/

      AppDelegate.h

      AppDelegate.m

      :

      Debug.xcconfig

      Release.xcconfig

编辑Flutter.xcconfig 文件

#include "../flutter_library/.ios/Flutter/Generated.xcconfig"

ENABLE_BITCODE=NO

Debug.xcconfig文件

#include "../Flutter/Flutter.xcconfig"

Release.xcconfig文件

#include "../Flutter/Flutter.xcconfig"

FLUTTER_BUILD_MODE=release


使用xcconfig相应配置


三、设置执行Flutter的脚本

在Run Script中增加

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


Run Script

四、执行脚本并把Framework加入工程

Cmd+B,Build工程,编译后,Flutter目录中生成如下

编译后生成目录

把其中的flutter_assets 目录以及Flutter.framework加入到工程的Flutter Group中

注意添加flutter_assets目录时,选择 Create forlder references !!!! (我就是这里没注意,后面始终出错)

添加Flutter相关文件

五、添加调用Flutter语句

这里就没有什么好说的了,

#import "Flutter/Flutter.h"


- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view setBackgroundColor:[UIColor orangeColor]];
   
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button addTarget:self
               action:@selector(handleButtonAction)
     forControlEvents:UIControlEventTouchUpInside];
    [button setTitle:@"Press me" forState:UIControlStateNormal];
    [button setBackgroundColor:[UIColor blueColor]];
    button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
    [self.view addSubview:button];
   
    // Do any additional setup after loading the view, typically from a nib.
}


- (void)handleButtonAction {
    FlutterViewController* flutterViewController = [[FlutterViewController alloc] init];
    flutterViewController.view.frame = [UIScreen mainScreen].bounds;
//    [flutterViewController setInitialRoute:@"route1"];//如果设置了router,可以到不同的页面
    [self presentViewController:flutterViewController animated:NO completion:nil];
}


Cmd+R吧,就出来了

这里说一个热重载的方法 (Hot Reload) 在终端上

$ cd flutter_library

$ flutter attach

Waiting for a connection from Flutter on iPhone X...

然后,在XCode中 Cmd+R 执行,待进入到FlutterView页面时,

终端变成如下

这时如果修改了dart文件 ,再按r就可以重新载入

q 退出


本页内容由塔灯网络科技有限公司通过网络收集编辑所得,所有资料仅供用户学习参考,本站不拥有所有权,如您认为本网页中由涉嫌抄袭的内容,请及时与我们联系,并提供相关证据,工作人员会在5工作日内联系您,一经查实,本站立刻删除侵权内容。本文链接:http://dengtar.com/18193.html
相关APP开发
 八年  行业经验

多一份参考,总有益处

联系深圳网站公司塔灯网络,免费获得网站建设方案及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:余经理:13699882642

Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.