Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用带有自定义入口点的FlatterFragment在Android应用程序中嵌入颤振布局?_Android_Kotlin_Flutter_Dart_Androidx - Fatal编程技术网

如何使用带有自定义入口点的FlatterFragment在Android应用程序中嵌入颤振布局?

如何使用带有自定义入口点的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

我在Flatter中尝试的这项功能称为添加到应用程序

我阅读了他们关于如何在我的应用程序中添加
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代码的行为

进一步阅读