目前Flutter比较流行,对于目前前端同学来说,,学习Flutter的来说,相对来说不是那么难,学习曲线还好,而相对于有Android或者IOS开发经验的同学来说,可能会更容易一点,如果是光学些Flutter和Dart方面的东西来说,可以按照其官方提供的api来进行学习即可,这都是入门Flutter的必要途径,当学习Flutter一段时间之后,就会遇到Flutter如何与Android和Ios进行混合式开发,也就是说Flutter项目和andriod、ios做的app项目,它们之间的页面如何相互调用,这里我们就只对Android端如何来调用Flutter的项目进行一个入门介绍,有两原生端开发经验的同学,针对这个那可能就是秒懂了。
在实现这两者之间的调用之前,我们先准备两个项目(Android 端 和Flutter 端)
一、准备工作,这里先上界面
1. Flutter 原生项目界面
2. Android原生项目界面
2. 在FlutterHybrid目录中通过以下命令进行创建一个flutter_module的flutter原生项目,运行界面就是上面的
flutter create -t module flutter_module通过命令创建flutter_module 项目,创建好后,flutter_module的目录结构如下:
4.修改/Users/xxxx/flutter_hybrid/FlutterHybridAndroid/settings.gradle,在改文件添加如下内容:
setBinding(new Binding([gradle: this]))
evaluate(new File(
settingsDir.parentFile,
'flutter_module/.android/include_flutter.groovy'
))5.修改/Users/xxx/flutter_hybrid/FlutterHybridAndroid/app/build.gradle 文件,在该文件添加如下配置:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}implementation project(':flutter')8.Android项目对Flutter项目的调用方式可以通过以下两种方式来实现
- 使用Flutter.createView API 的方式
- 使用FlutterFragment 的方式
9. 修改Android项目中的java中添加对Flutter模块调用的代码,在android原生项目的/FlutterHybridAndroid/app/src/main/res/layout/activity_main.xml中添加元素
<Button
android:id="@+id/test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="在android项目中调用Flutter页面并传递参数1"
/>
<Button
android:id="@+id/test2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="在android项目中调用Flutter页面并传递参数2"
/>//1.使用FlutterFragment的方式,在页面上添加test按钮的点击事件
final String initParams = "这是来自android项目中的参数";
findViewById(R.id.test).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction tx = getSupportFragmentManager().beginTransaction();
tx.replace(R.id.someContainer,Flutter.createFragment(initParams));
tx.commit();
}
});
//2.使用Flutter.createView API的方式,在页面上添加test按钮的点击事件
findViewById(R.id.test2).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
View flutterView = Flutter.createView(
MainActivity.this,
getLifecycle(),
initParams
);
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(600,800);
layout.leftMargin = 100;
layout.rightMargin = 200;
layout.topMargin = 300;
addContentView(flutterView,layout);
}
});12.如果AndroidStudio 升级到3.0以上版本时候,这个时候项目如果从原来的Android升级或者迁移到AndroidX时,原来Android中的一些包名会和升级或者迁移到AndroidX时一些包名冲突,这个时候需要解决包名冲突的问题,要不然项目无法运行,解决步骤如下:
android.useAndroidX=true
android.enableJetifier=true//import android.support.annotation.NonNull;
//import android.support.v4.app.Fragment;
import androidx.annotation.NonNull;
import androidx.fragment.app.*;/*
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.OnLifecycleEvent;
*/
import androidx.lifecycle.*;import 'dart:ui';(2)在Flutter页面接受传递过来的参数如下图,能看到下面表示Android 项目 调用Flutter项目成功了。
总结,心动不如行动,看都是问题,做才是答案,只有经过亲自动手实践才能明白其流程是怎么样的,给大家一起分享一下,希望能给大家带来一点帮助,避免采坑。