Flutter   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了【Flutter 混合开发】添加 Flutter 到 Android Activity大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

【Flutter 混合开发】添加 Flutter 到 Android Activity

创建 Flutter Module

Flutter可以以源代码或AAR的方法嵌入到Android原生项目,集成流程可以使用 Android studio 完成,也可以手动完成。强烈建议使用 Android studio

首先创建一个 Android 项目,创建一个空的 Activity:

【Flutter 混合开发】添加 Flutter 到 Android Activity

Android 项目创建成功后,使用Android studio 添加Flutter模块,在Android原生项目中点击“File > New > New Module...”,创建 Flutter Module

【Flutter 混合开发】添加 Flutter 到 Android Activity

在弹出的选择Module类型的对话框中选中Flutter Module,然后点击Next,

【Flutter 混合开发】添加 Flutter 到 Android Activity

设置Flutter module的Project name、Flutter SDK等,点击Next:

【Flutter 混合开发】添加 Flutter 到 Android Activity

设置Flutter module的包名,点击Finish:

【Flutter 混合开发】添加 Flutter 到 Android Activity

编译完成后将在当前App目录下生成Flutter模块的代码,目录结构如下:

【Flutter 混合开发】添加 Flutter 到 Android Activity

启动页加载 Flutter

Flutter 页面加载到 MainActivity(启动页) 中,修改 MainActivity :

package com.Flutter.androidFlutter

import io.Flutter.embedding.android.FlutterActivity

class MainActivity : FlutterActivity()

你没有看错,只需让 MainActivity 继承 FlutterActivity 即可。

【Flutter 混合开发】添加 Flutter 到 Android Activity

跳转Flutter 页面

@H_54_0@mainActivity(启动页添加一个按钮,点击后跳转到新的页面,此页面加载 Flutter ,MainActivity代码如下:

package com.Flutter.androidFlutter

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.bundle
import io.Flutter.embedding.android.FlutterActivity
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceStatE)
        setContentView(R.layout.activity_main)
        button.setOnClickListener {
            startActivity(Intent(this,SecondFlutterActivity::class.java))
        }
    }
}

SecondFlutterActivity 代码如下:

package com.Flutter.androidFlutter

import io.Flutter.embedding.android.FlutterActivity

class SecondFlutterActivity:FlutterActivity() 

AndroidManifest.xml注册此 Activity:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://scheR_819_11845@as.android.com/apk/res/android"
    package="com.Flutter.androidFlutter">

    <application
        android:allowBACkup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@String/app_name"
        android:rounDicon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        ...
        <activity android:name=".SecondFlutterActivity"/>
    </application>

</manifest>

【Flutter 混合开发】添加 Flutter 到 Android Activity

SecondFlutterActivity 只是继承了 FlutterActivity,这种情况下,也可以直接使用 FlutterActivity

startActivity(Intent(this,FlutterActivity::class.java))

或者:

startActivity(FlutterActivity.createDefaulTintent(this))

AndroidManifest.xml注册 FlutterActivity:

<activity android:name="io.Flutter.embedding.android.FlutterActivity"/>

效果与上面是一样的。

FlutterActivity 会加载 Flutter Module 中 lib/main.dart 中 main 方法,如果有多个Flutter页面,如何指定跳转,比如现在有 OnePage Flutter 页面,OnePage 代码如下:

class OnePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),body: Center(
        child: Text('这是 One 页面'),),);
  }
}

FlutterActivity 指定加载页面需要使用命名路由,MyApp 修改如下:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',theme: ThemeData(

        priMarySwatch: Colors.blue,routes: {
        'one_page':(context){
          return OnePage();
        },'two_page':(context){
          return TwoPage();
        }
      },home: MyHomePage(title: 'Flutter Demo Home Page'),);
  }
}
@H_54_0@mainActivity 页面点击到 Flutter 页面,加载 OnePage 页面

class MainActivity : AppCompatActivity() {


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceStatE)
        setContentView(R.layout.activity_main)
        button.setOnClickListener {
            startActivity(
                FlutterActivity
                    .withNewENGIne()
                    .initialRoute("one_page")
                    .build(this)
            )
        }
    }
}

【Flutter 混合开发】添加 Flutter 到 Android Activity

引擎缓存

加载 FlutterActivity 页面时明显看到一段时间的黑屏,这段时间主要是启动 Flutter 引擎(FlutterENGIne),Flutter 引擎启动的时间在不同手机上不同,性能越好的手机越短。同时每一个 FlutterActivity 页面都会启动一个引擎,所以强烈建议不要在一个项目中创建多个 FlutterActivity(或者启动多个 FlutterActivity 实例),否则内存会越来越大,下面是每隔3秒创建一个 FlutterActivity 实例内存变化图:

【Flutter 混合开发】添加 Flutter 到 Android Activity

为了减少 FlutterActivity 页面的延迟时间和多个 FlutterActivity 实例内存一直增长问题,我们可以使用 Flutter 引擎(FlutterENGIne)缓存,在启动 FlutterActivity 前先启动 Flutter 引擎,然后使用缓存的引擎加载页面,通常将其放在 Application 中:

class MyApplication : Application() {
    lateinit var FlutterENGIne: FlutterENGIne

    override fun onCreate() {
        super.onCreate()
        FlutterENGIne = FlutterENGIne(this)
        FlutterENGIne.dartExecutor.executeDartEntrypoint(
            DartExecutor.DartEntrypoint.createDefault()
        )
        FlutterENGIneCache
            .geTinstance()
            .put("ENGIne_id",FlutterENGInE)
    }

}

使用缓存的引擎:

startActivity(
    FlutterActivity
        .withCachedENGIne("ENGIne_id")
        .build(this)
)

在同一台手机上效果非常明显,黑屏时间大大减少,不过还是有一个短暂的黑屏。

这里要注意,使用缓存引擎时,其生命周期不在是 FlutterActivity(或者 FlutterFragment)的生命周期,而是整个 App 的生命周期(在Application 中的创建和销毁)。当然也可以提前销毁:

FlutterENGIne.destroy()

另外项目的 debug 和 release 版本对性能的影响非常大,如果要测试其性能一定在要 release 下测试

上面使用新的引擎可以指定 FlutterActivity(或者 FlutterFragment)配置初始路由,但使用缓存引擎时无法在 FlutterActivity(或者 FlutterFragment)配置初始路由,因为缓存引擎已经启动并运行,不过可以在启动缓存引擎时指定其初始路由:

FlutterENGIne = FlutterENGIne(this)

FlutterENGIne.navigationChAnnel.seTinitialRoute("one_page")

FlutterENGIne.dartExecutor.executeDartEntrypoint(
    DartExecutor.DartEntrypoint.createDefault()
)
FlutterENGIneCache
    .geTinstance()
    .put("ENGIne_id",FlutterENGInE)

如果使用缓存引擎在FlutterActivity(或 FlutterFragment)指定不同路由,如何处理?这时需要创建一个 @H_750_21@method chAnnel,Flutter 接收具体消息从而切换不同的路由。

交流

老孟Flutter博客(330个控件用法+实战入门系列文章):http://laomengit.com

欢迎加入Flutter交流群(微信:laomENGIt)、关注公众号【老孟Flutter】:

【Flutter 混合开发】添加 Flutter 到 Android Activity

【Flutter 混合开发】添加 Flutter 到 Android Activity

大佬总结

以上是大佬教程为你收集整理的【Flutter 混合开发】添加 Flutter 到 Android Activity全部内容,希望文章能够帮你解决【Flutter 混合开发】添加 Flutter 到 Android Activity所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: