Android端集成Flutter

Android端集成Flutter

集成

假设你已经有了一个原生项目…

  1. 在android项目路径的上层路径 执行
flutter create -t module flutter_module

创建完成后会出现一个与原生项目平级的文件夹“flutter_module”
两个文件夹在同一层级

  1. 在原生项目的settings.gradle中引入flutter_module组件
setBinding(new Binding([gradle:this]))
evaluate(new File(
        settingsDir.parentFile,
        'flutter_module/.android/include_flutter.groovy'
        //注释:如果创建的flutter模块和该app不在同一个目录下 需要适当调整路径结构
))
  1. flutter最低兼容sdk 16 ,app下的build.gradle:minSdkVersion 设置为16以上即可;
  2. 指定java编译版本 app目录gradle文件的android层级下配置java编译版本
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
  1. 添加项目依赖 implementation project(’:flutter’)
    //注释:第一步添加的配置后 会在本项目中生成一个"flutter"组件

调用

原生调用flutter并传递初始化数据
原生代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btn).setOnClickListener(v -> {
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.fl_container, FlutterFragment.withNewEngine().initialRoute("{name:'devep',dataList:['aa','bb','cc']}")
                    .build());
            ft.commit();
        });
    }
}

Flutter代码

import 'dart:ui';

import 'package:flutter/material.dart';

void main() => runApp(FlutterModule(initParams: window.defaultRouteName));

class FlutterModule extends StatelessWidget {
  //接收native端传来的数据
  final String initParams;

  const FlutterModule({Key key, this.initParams}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page',initParams:initParams),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title,this.initParams}) : super(key: key);
  final String title;
  //直接使用即可
  final String initParams;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

热载

项目运行原生app后修改flutter代码是无法直接体验flutter热更新的特性的,需要先关闭app,在flutter_module路径下(flutter项目的根路径)执行命令flutter attach ,再客户端开启app,热重载就可以使用了

注意:如果说连接电脑的设备不止1个的话会出现以下提示
 	 Multiple devices found:
     M2002J9E (mobile)7d4f21c4      • android-arm64 • Android 11 (API 30)
     sdk gphone x86 arm (mobile) • emulator-5554 • android-x86   • Android 11 (API 30) (emulator)
     [0]: M2002J9E (7d4f21c4)
     [1]: sdk gphone x86 arm (emulator-5554)

请执行 flutter attach -d ‘emulator-5554’
'emulator-5554’为设备id

调试

  1. 关闭app
  2. 打开flutter端,点击Flutter Attach按钮(androidstudio运行按钮旁边 前提需要安装flutter和dart插件)
  3. flutter项目中打断点 在客户端开启app

希望我的文章可以节约你一些学习时间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值