美文网首页
Flutter作为iOS和Android的Module

Flutter作为iOS和Android的Module

作者: xmb | 来源:发表于2019-08-20 19:04 被阅读0次

参考文章:
官方文档:Add-Flutter-to-existing-apps
iOS和Flutter混编系列一:如何在已有的iOS工程中添加Flutter工程
如何在现有的iOS工程中接入Flutter
原生App项目集成flutter混合开发详细指南

截止:2019-08-20

iOS

1、切换Flutter环境到master环境
查看当前环境:flutter channel
切换到master环境:flutter channel master
执行flutter doctor
2、创建项目基本目录flutter_test
3、flutter_test下使用Xcode创建iOS项目,添加CocosPods支持
4、flutter_test目录下,创建flutter module
flutter create -t module my_flutter
5、添加Flutter app到Podfile
修改Podfile文件,如下,执行pod install

platform :ios, '9.0'
use_frameworks!

target 'DouDiZhu' do
    flutter_application_path = '../flutter_module'
    load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')
    install_all_flutter_pods(flutter_application_path)
end
podhelper.rb说明:
Whenever you change the Flutter plugin dependencies in some/path/my_flutter/pubspec.yaml, you need to run flutter packages get from some/path/my_flutter to refresh the list of plugins read by the podhelper.rb script. Then run pod install again from some/path/MyApp.

6、iOS项目中Build Settings->Build Options->Enable Bitcode的bitcode改为NO
7、iOS项目中创建AppViewController.swift,内容如下:

import UIKit
import Flutter

class AppViewController: FlutterViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }
    

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    }
    */

}

8、iOS项目中Appdelegate.swift中修改如下:

import UIKit
import Flutter
import FlutterPluginRegistrant

@UIApplicationMain
class AppDelegate: FlutterAppDelegate {
    var flutterEngine: FlutterEngine?
    var myWindow: UIWindow!
    var navigationController: UINavigationController?
    
    override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        self.flutterEngine = FlutterEngine(name: "io.flutter", project: nil)
        self.flutterEngine?.run(withEntrypoint: nil)
        GeneratedPluginRegistrant.register(with: self.flutterEngine)
        
        let appController = AppViewController()
        self.navigationController = UINavigationController(rootViewController: appController)
        
        self.myWindow = UIWindow(frame: UIScreen.main.bounds)
        self.myWindow.rootViewController = self.navigationController
        self.myWindow.makeKeyAndVisible()
        
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
    }
    
}

8、iOS项目中general中Main Interface删除为空
9、Android Studio打开flutter项目,运行到iOS设备或者模拟器一次
10、打开Xcode运行iOS项目,即可看到项目内容为flutter所开发的内容


WX20190820-195636@2x.png

相关文章

网友评论

      本文标题:Flutter作为iOS和Android的Module

      本文链接:https://www.haomeiwen.com/subject/hkrmsctx.html