Flutter 使用AndroidStudio并集成Flutter界面

AndroidStudio项目中集成Flutter

需先到项目工程中集成flutter module。然后,通过原生Android的Activity跳转或addView()方式打开flutter页面。


AS创建module

菜单选项  →  File -> New -> New Flutter Project -> Flutter Module; 


Android Project 中添加依赖

如果第1步比较顺利,默认工程会自动配置依赖。

如果没有默认配置,那需要手动配置一下,参考如下。

(1)在 setting.gradle 中加入 Flutter 的引入;

include ':app'

setBinding(new Binding([gradle: this]))
evaluate(new File(
  settingsDir,
  'flutter_view/.android/include_flutter.groovy'
))

include ':flutter_view'

(2)在app/build.project 中添加 Flutter 依赖;

dependencies{
    implementation project(path: ':flutter')
}

(3)在app/build.project 中指定JDK1.8,且最低版本在 16 以上;

android {
  defaultConfig {//版本号...minSdkVersion >= 16}

  compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
  }
}

Flutter两种方式打开

一种是在原生里页面内添加View页面(FlutterView和FlutterFragment),另外一种是在原生页面跳转打开FlutterActivity。

FlutterEngine引擎 :它负责执行Dart代码,将Flutter编写的UI显示到FlutterView或FlutterActivity或FlutterFragment中。创建好了一个FlutterEngine对象,我们可以通过代码指定初始路由名称。另外,每个FlutterEngine对象在显示出Flutter UI之前是需要一个warm-up准备期的,导致屏幕呈现短暂的空白。解决方式就是预先创建并启动FlutterEngine,完成warm-up过程,然后将这个FlutterEngine缓存起来,之后使用这个FlutterEngine来显示出Flutter UI。 

FlutterView

public class MyActivity extends AppCompatActivity {
    FlutterEngine flutterEngine;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mylayout);
        createEngine();
        openFlutterView();
    }
    private void createEngine(){
        flutterEngine = new FlutterEngine(this);
        flutterEngine.getDartExecutor().executeDartEntrypoint(
                DartExecutor.DartEntrypoint.createDefault()
        );
        flutterEngine.getNavigationChannel().setInitialRoute("route1");//指定路由
    }
    private void openFlutterView(){
        FlutterView flutterView = new FlutterView(this);
        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT);
        FrameLayout flContainer = findViewById(R.id.flutter_view);
        flContainer.addView(flutterView, lp);

        flutterView.attachToFlutterEngine(flutterEngine);
    }
    @Override
    protected void onResume() {
        super.onResume();
        flutterEngine.getLifecycleChannel().appIsResumed();
    }
    @Override
    protected void onPause() {
        super.onPause();
        flutterEngine.getLifecycleChannel().appIsInactive();
    }
    @Override
    protected void onStop() {
        super.onStop();
        flutterEngine.getLifecycleChannel().appIsPaused();
    }

FlutterFragment

官方提供了三种创建FlutterFragment的方式:

private void  openFlutterFragment() {
    FlutterFragment flutterFragment = FlutterFragment.createDefault();
    getSupportFragmentManager()
        .beginTransaction()
        .add(R.id.fl_container, flutterFragment)
        .commit();
//或者
    FragmentTransaction tx = getSupportFragmentManager().beginTransaction();
    FlutterFragment fragment = FlutterFragment.withNewEngine().initialRoute("route1").build();
        tx.replace(R.id.flutter_view, fragment);
        tx.commit();
}
 // 创建可缓存的FlutterEngine对象
        FlutterEngine flutterEngine = new FlutterEngine(this);
        flutterEngine.getNavigationChannel().setInitialRoute("route1");
        flutterEngine.getDartExecutor().executeDartEntrypoint(
                DartExecutor.DartEntrypoint.createDefault()
        );
        FlutterEngineCache.getInstance().put("my_engine_id", flutterEngine);
// 通过FlutterFragment引入Flutter编写的页面
        FlutterFragment flutterFragment = FlutterFragment.withCachedEngine("my_engine_id").build();

原生Activity跳转Flutter界面

首先,需要在工程下的AndroidManifest.xml文件中注册FlutterActivity,代码如下:

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

三种启动方式:

1 、FutterActivity默认路由名称为"/",默认打开main.dart的main方法。

startActivity(
        FlutterActivity.createDefaultIntent(this)
);

2、FutterActivity路由名称为“route1”,创建一个新的FlutterEngine对象

startActivity(
        FlutterActivity
                .withNewEngine()
                .initialRoute("route1")
                .build(this)
);

3、FutterActivity 使用缓存的引擎对象(主流推荐

startActivity(
        // 创建可缓存的FlutterEngine对象
    FlutterEngine flutterEngine = new FlutterEngine(this);
    flutterEngine.getDartExecutor().executeDartEntrypoint(
                DartExecutor.DartEntrypoint.createDefault()
        );
    flutterEngine.getNavigationChannel().setInitialRoute("route1");
        
    FlutterEngineCache.getInstance().put("engine_id", flutterEngine);
    FlutterActivity
        .withCachedEngine("engine_id")
        .build(this)
);

跳转Flutter带参数

通常情况下,我们需要在页面跳转时传递参数完成一些业务功能。那么,如何在Flutter代码中获取到原生代码中的参数呢?

只需要在route地址后缀拼接参数就可以了。代码示例如下:

  private void createEngine(){
        flutterEngine = new FlutterEngine(this);
        flutterEngine.getDartExecutor().executeDartEntrypoint(
                DartExecutor.DartEntrypoint.createDefault()
        );
        flutterEngine.getNavigationChannel().
            setInitialRoute("route1?{\"id\":123456}");//指定路由
    }

在flutter页面代码:

String url = window.defaultRouteName;
// route名称
String route =
    url.indexOf('?') == -1 ? url : url.substring(0, url.indexOf('?'));
// 参数Json字符串
String paramsJson =
    url.indexOf('?') == -1 ? '{}' : url.substring(url.indexOf('?') + 1);
// 解析参数
Map<String, dynamic> params = json.decode(paramsJson);

*参数就在Map对象中了,需要导入dart:convert包。


至此,原生Android项目中集成Flutter的混编算是迈出了最重要的一步。

下一篇,学习从Flutter界面跳转到其他原生Activity页面通讯。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Android Studio使用Flutter,首先我们需要安装Flutter插件。我们可以打开Android Studio,然后选择“File”菜单,点击“Settings”打开设置界面。在设置界面的左侧面板中找到“Plugins”选项,然后点击“Browse repositories”按钮。在弹出的对话框中搜索“Flutter”,找到“Flutter”插件后,点击“Install”按钮进行安装。安装完成后,需要重新启动Android Studio。 安装完毕后,我们可以开始创建一个Flutter项目。在Android Studio的欢迎界面中选择“Start a new Flutter project”选项,点击“Create New Project”按钮。在弹出的对话框中选择项目路径和项目名称,然后点击“Next”按钮。接下来可以选择Flutter版本和项目模板,例如“Flutter Application”,然后点击“Finish”按钮。 创建项目后,我们可以在Android Studio中编写Flutter代码。在项目的lib目录下可以找到main.dart文件,在该文件中编写Flutter的UI布局和逻辑代码。我们可以使用中文网提供的Flutter控件、组件和API来构建我们的应用程序界面和功能。 在Android Studio中运行Flutter项目,我们可以通过点击工具栏上的运行按钮来启动模拟器或连接的Android设备。选择目标设备后,Android Studio会自动构建和安装我们的Flutter应用程序。在模拟器或设备上运行后,我们就可以看到我们的应用程序在模拟器或设备上运行并呈现出来。 通过上述步骤,我们就可以在Android Studio使用Flutter中文网提供的资源和文档来创建和开发我们的Flutter应用程序。希望以上回答对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾阳Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值