-
打开vscode 在终端执行命令路径指向想要创建model的目录(存放Flutter工程和iOS工程的上一级目录)

-
执行如下命令:
flutter create –t module flutter_module(目录名字)会生成如图示的文件夹结构: 此时打开AS(因为我是用Android Studio),把flutter_module工程导入到IDE里,选择模拟器运行一边,因为在iOS工程里需要的库文件只有要运行过后才会生成. 很重要的一步:同时按住Shift +command+.(点号),把隐藏文件显示出来,此时flutter_module文件夹的结构会变成这样:

-
在iOSFlutte文件夹里创建iOS工程,结构如下:

-
接下来,打开命令行工具,进入到iOSFlutter(iOS工程)文件夹目录下
执行
pod init,生成podfile文件,打开此文件,添加如两行代码:
flutter_application_path = '../flutter_community'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')
如图:

并且在每个Xcode target都需要绑定flutter,调用install_all_flutter_pods(flutter_application_path)

注意:文件夹的目录,一定要按照上面说的来创建,要不然,这个podfile文件的flutter_application_path要进行路径调整. 添加完成后,再在命令行窗口里执行:pod install,此时就会生成pod支持的各种文件.
-
iOS工程Enable Bitcode 需要关闭,因为Flutter混合开发不支持Bitcode

-
然后写代码调用flutter的界面.
-(void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor lightGrayColor];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(handleButtonAction)
forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@"点击跳转flutter页面" forState:UIControlStateNormal];
[button setBackgroundColor:[UIColor blueColor]];
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
[self.view addSubview:button];
}
-(void)handleButtonAction {
FlutterViewController *flutterViewController = [[FlutterViewController alloc] init];
flutterViewController.view.backgroundColor = [UIColor cyanColor];
// 根据传入的字符串区分flutter页面
[flutterViewController setInitialRoute:@"xxx"];
flutterViewController.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:flutterViewController animated:YES completion:nil];
// NSAssert([self navigationController], @“Must have a NaviationController”);
// [[self navigationController] pushViewController:flutterViewController animated:YES];
}
注:如果遇到如下图
这是flutter官方的一个bug,查资料说flutter升级到1.10就好了
不升级flutter的情况下,可以改Flutter SDK 的一个文件,flutter/packages/flutter_tools/bin/xcode_backend.sh
144行
RunCommand find "${derived_dir}/engine/Flutter.framework" -type f -exec chmod a-w "{}" \;
=>
RunCommand find "${derived_dir}/engine/Flutter.framework" -type f -iname '.h' -exec chmod a-w "{}" \;