如何使用带有自定义入口点的FlatterFragment在Android应用程序中嵌入颤振布局?
我在Flatter中尝试的这项功能称为添加到应用程序 我阅读了他们关于如何在我的应用程序中添加如何使用带有自定义入口点的FlatterFragment在Android应用程序中嵌入颤振布局?,android,kotlin,flutter,dart,androidx,Android,Kotlin,Flutter,Dart,Androidx,我在Flatter中尝试的这项功能称为添加到应用程序 我阅读了他们关于如何在我的应用程序中添加fragment部分的说明 如文档中所示,我应该能够添加我的newfragment,就像我在Android中添加普通Fragment类一样 // Create and attach a FlutterFragment if one does not exist. if (flutterFragment == null) { var newFlutterFragment = FlutterFragme
fragment
部分的说明
如文档中所示,我应该能够添加我的newfragment
,就像我在Android中添加普通Fragment
类一样
// Create and attach a FlutterFragment if one does not exist.
if (flutterFragment == null) {
var newFlutterFragment = FlutterFragment.createDefault()
flutterFragment = newFlutterFragment
fragmentManager
.beginTransaction()
.add(
R.id.fragment_container,
newFlutterFragment,
TAG_FLUTTER_FRAGMENT
)
.commit()
}
但是,我们的示例非常简单,根据检查(Github等),它仅在使用main
或默认入口点预热flatterengine
时起作用
不幸的是,每当我尝试使用自定义入口点添加我自己的fragment
时,它似乎不接受我在中传递的对象类型
是否有可能我仍然可以使用flatterfragment
作为我拥有的颤振剖面视图的容器
设置
- Android依赖于颤振模块的源代码(选项B)
- 使用AndroidX的Android项目
环境
- 颤振:v1.12.13+修补程序.5(稳定)
- Dart:v2.4.0
- 操作系统:macOS Catalina v1.14.5
出了什么问题?
目前,如果您使用的是AndroidX,那么在嵌入flatter布局时使用flatterfragment
的唯一方法就是将其添加为依赖项中的Android存档(AAR)
我以前在Github中打开过一个关于这个问题的网站,在撰写本文时它仍然是开放的
将Flutter添加为AAR依赖项既有优点也有缺点。使用AAR,您的团队不需要在本地机器上安装颤振SDK,也不需要安装Dart SDK。然而,由于AAR文件是编译的工件,所以您的团队可能无法在开发期间编辑项目的flatter源代码
该文档介绍了如何使用作为AAR模块添加的Flatter源代码设置Android项目
但为什么真的要使用AAR呢
在引擎盖下,和
下的部分(如果不是全部)类别
io.flatter.embedding
仍在使用支持库而不是AndroidX,依赖项中存在不匹配。使用AAR并在编译过程中启用,颤振的AAR输出现在将使用等效的AndroidX库,这是您在运行时不希望发生的事情
但是,我需要我的团队在对一些Android应用程序项目进行更改的同时开发一些Flitter应用程序的功能
好吧,因为你不能在那种特定类型的设置中使用flatterfragment
,你仍然可以使用flatterview
,特别是如果你在Android应用程序中只显示了一部分flatter布局
功能片段.kt
portfolioEngine?.let { flutterEngine ->
// Start executing Dart code to pre-warm the FlutterEngine.
// https://github.com/flutter/flutter/wiki/Experimental:-Launch-Flutter-with-non-main-entrypoint
flutterEngine.dartExecutor.executeDartEntrypoint(
DartExecutor.DartEntrypoint(
FlutterMain.findAppBundlePath(),
"customEntryPoint"
)
)
// Cache the FlutterEngine to be used by FlutterActivity.
FlutterEngineCache
.getInstance()
.put("SOME_FLUTTER_ENGINE_NAME", flutterEngine)
// Add the Flutter layout
flutterView = FlutterView(context)
flutterView.attachToFlutterEngine(flutterEngine)
flutterContainerView?.removeAllViews() // Only if deemed necessary
flutterContainerView?.addView(flutterView)
}
feature\u layout.xml
但是,有一个小陷阱…
在flatterview
上使用flatteractivity
或flatterfragment
的好处之一是易于同时管理Android和flatter代码的生命周期。别担心,通过使用附带的flatterengine
管理其生命周期,您仍然可以处理flatter代码的行为
进一步阅读