flutter Android原生和Flutter进行关联

flutter 可以作为单独的app存在,也可以在Android或者ios中以页面部分存在或者以局部来存在,当然就是涉及到Android原生程序和flutter程序之间的通信。
大致步骤如下:

1.创建Flutter_module项目

因为涉及两种不同类型的项目进行关联和通信,因为需要先创建两个项目,Android项目和flutter要存放到相同文件夹下。

- flutter_hybrid
	- flutter_module
	- FlutterHybridAndroid 
	- FlutterHybridiOS

2.Android项目配置

  • android module 使用java1.8
 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
  • 最低Android 版本16
  • setting文件要配置flutter_module项目
setBinding(new Binding([gradle: this]))                                 // new
evaluate(new File(                                                      // new
        settingsDir.parentFile,                                               // new
        'flutter_module/.android/include_flutter.groovy'                          // new
))


 implementation project(':flutter')

3.关联对象

到这里我们就开始编写Android项目的code,写之前先看效果图。点击按钮,会把flutter的界面调取处理展示。
在这里插入图片描述

主界面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/click"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="展示flutter!"
          />


    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/content"
        />
</LinearLayout>

代码逻辑:
备注:FlutterFragment其实就是一个fragment,在这里注意Flutter_module是否使用了androidx版本,因为这会影响fragment的版本,是v4还是androidx,这里会导致找不到匹配类型。原则就是两个项目要统一一个版本。

@Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.click:
                // TODO 20/02/05

//点击按钮,使用FlutterFragment替换掉占位布局,
                final FlutterFragment fragment = Flutter.createFragment("content");
                final FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();

                fragmentTransaction.replace(R.id.content, fragment ).commit();
                break;
            default:
                break;
        }
    }

总结:这里Android和flutter结合使用Flutter.createFragment,这种形式就是把flutter的逻辑封装成一个fragment,因为fragment轻量化,灵活的特点,可以作为页面,也可以作为局部存在。

还有一种形式就是Flutter.createView(this, getLifecycle(), “content”);它创建了一个view,展示到Android原生界面里,这里面一共三个参数:

  • this 上下文context
  • lifecycle 生命周期的对象,可以根据生命周期,处理各种状态的逻辑
  • initalRoute 初始化路由,相当于在展示页面或者是跳转的时候,可以初始化一些数据或者指定就是不同的页面。
   final FlutterView flutterView = Flutter.createView(this, getLifecycle(), "content");
                mContent.removeAllViews();
                mContent.addView(flutterView);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值