Flutter学习记录(二):Andriod原生项目集成Flutter

博主想偷懒了,but,还是撑着眼皮来写了哈哈^_^ 废话不说了 我喜欢简单粗暴点的,直接告诉你怎么弄哈

博主的配置环境先来了解下:

  • Windows 10 系统 64位 (32位的装不了flutter环境哦)
  • android suodio  4.0
  • flutter  1.17.4
  • dart 2.8.4

步入正题啦,嘿嘿

一 Android原生集成Flutter环境

    1.1 在已有的Android原生项目根目录 依次运行以下命令:

//创建 flutter Module 
flutter create -t module module_flutter 

cd  module_flutter 

cd .android/

   1.2 android 项目 目录下 app/build.gradle 配置 

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.0"

    defaultConfig {
        applicationId "com.example.companyproject"
        minSdkVersion 16
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    //flutter相关声明
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}

    1.3  在 android项目 根目录下的 settings.gradle 中添加如下代码

include ':app'
setBinding(new Binding([gradle: this]))
evaluate(new File(
 rootDir.path + '/module_flutter/.android/include_flutter.groovy'
))

   1.4  在需要接入的项目中引入 flutter module

  //导入flutter
    implementation project(':flutter')

   1.5  别忘记 Sync Now 哦 *_* 

到这里,你就可以在Android 的.java类中使用Flutter的相关类了哦 ,接下来就正式介绍下 如何在原生项目中跳入到Flutter中吧

二  Android 接入Flutter的两种方式

  2.1 直接跳转到FlutterActivity类的方式 (网上大部分是FlutterView的方式,只适合Flutter 1.12之前的版本,新版本的,找不到类,你们找到了跟我说下哈),

       2.1.1建一个FlutterActivity 如下所示



public class MyFlutterActivity extends FlutterActivity {
    TextView tv_showTest;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
}

    public static NewEngineIntentBuilder withNewEngine(Class<? extends FlutterActivity> activityClass) {
        return new NewMyEngineIntentBuilder(activityClass);
    }

    public static class NewMyEngineIntentBuilder extends NewEngineIntentBuilder {
        protected NewMyEngineIntentBuilder(@NonNull Class<? extends FlutterActivity> activityClass) {
            super(activityClass);
        }
    }

    @Override
    public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
        super.configureFlutterEngine(flutterEngine);
        GeneratedPluginRegistrant.registerWith(flutterEngine);
    }
}

      2.1.2进入的时候 直接用Intent到该FlutterActivity的方式。如下:

//1.12版本以后的启动flutter方法
Intent intent = MyFlutterActivity.withNewEngine(MyFlutterActivity.class).initialRoute("/route1").build(MainActivity.this);
startActivity(intent);

 2.2 已Fragment的方式引入 

       目前只是简单的引入,具体到项目中如何使用,小伙伴们自己发挥哈

     2.2.1 在需要接入的Activity布局文件中 添加一个 占位FrameLayout 如下:

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

    <FrameLayout
        android:id="@+id/fl_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

    2.2.2 在布局中绑定,使用如下:

public class MyFlutterFragmentActivity extends FlutterFragmentActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_flutter_fragment);      
        FragmentTransaction tx = getSupportFragmentManager().beginTransaction();
        FlutterFragment flutterFragment = FlutterFragment.withNewEngine().initialRoute("route1").build();
        tx.replace(R.id.fl_container, flutterFragment);
        tx.commit();

    }
}

 目前,博主使用的也就这了,其他的。。哪里不好指哪里吧 ,记录在这里 以后找的话 方便啊 是吧 哈哈

猜你喜欢

转载自blog.csdn.net/zww986736788/article/details/107712335