Flutter学习笔记之-原生项目集成Flutter模块

Flutter学习笔记之-原生项目集成Flutter模块

原生项目集成Flutter模块适合用于以下场景:
1、重写整个项目存在很大成本的时候
2、只想某一个功能模块采用Flutter试水项目的时候

原生项目集成Flutter模块步骤

  • 创建Flutter模块项目

1、创建Flutter模块项目

flutter create --template module mudule_demo

2、编写Flutter模块的代码

  • iOS原生项目集成Flutter

采用CocoaPods来管理Flutter依赖。将iOS原生项目和mudule_demo放在同一级目录(也可以不放在同一个目录,根据自己的安排处理)。

1、编写Podfile文件

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

target 'iOSDemo' do
  use_frameworks!
  install_all_flutter_pods(flutter_application_path)

end

2、利用pod install安装依赖

3、编写原生代码跳转flutter module页面

import Flutter

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func jumpFlutterModule(_ sender: UIButton) {
        // 单开flutter模块的页面
        let flutterEngine = (UIApplication.shared.delegate as! AppDelegate).flutterEngine
        let flutterViewController =
            FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil)
        present(flutterViewController, animated: true, completion: nil)
        
        // 方式二: 隐试创建FlutterViewController
//        let flutterViewController = FlutterViewController(project: nil, nibName: nil, bundle: nil)
//        present(flutterViewController, animated: true, completion: nil)
    }
}

demo效果:
Alt
Alt

  • Android中集成Flutter模块

1、在settings.gradle中配置如下

// 添加如下代码,注意目录结构路径
setBinding(new Binding([gradle: this]))                                
evaluate(new File(
        settingsDir.parentFile,                                              
        'mudule_demo/.android/include_flutter.groovy'                         
))

在这里插入图片描述

2、在build.gradle中添加flutter依赖

implementation project(':flutter')

在这里插入图片描述

3、在AndroidManifest.xml中注册FlutterActivity配置

<activity
    android:name="io.flutter.embedding.android.FlutterActivity"
    android:theme="@style/AppTheme"
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
    android:hardwareAccelerated="true"
    android:windowSoftInputMode="adjustResize"
    />

4、添加原生代码跳转到flutter模块

Button jump = findViewById(R.id.jump_flutter);
jump.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    startActivity(FlutterActivity.createDefaultIntent(MainActivity.this));
    }
});

遇到的错误:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.androiddemo/com.example.androiddemo.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.example.androiddemo.MainActivity"

解决办法:

在build中配置
android {
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}

Alt

Alt

调试

在原生项目中如何启用Flutter中的热加载技术呢?

flutter attach -d 16E98A9A-DDA2-4EDF-8235-1C14029CE955 --app-id com.30san.wjt.iOSDemo

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值