如何使用FlutterFragment和自定义入口点将Flutter布局嵌入Android应用程序中?

约书亚·德古兹曼

我在Flutter中尝试的此功能称为“添加到应用”

我阅读了他们的文档中包含的有关如何添加FlutterFragment为应用程序部分的说明。

从文档示例中可以看出,我应该能够newFlutterFragmentFragment在Android中添加普通一样添加我的内容

// 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和SO),我们的示例非常简单明了,只有在FlutterEngine使用main默认入口点进行预热时,它才有效

图片1

不幸的是,每当我尝试FlutterFragment使用自定义入口点添加自己的对象时,它似乎都不接受我在的.add(<INVALID_TYPE>,...,...)方法中传递的对象类型FragmentTransaction

图片1

我有没有机会仍然可以FlutterFragment用作我的Flutter剖视图的容器?

设定

  • Android取决于Flutter模块的源代码(选项B
  • 带有AndroidX的Android项目

环境

  • Flutter:v1.12.13 + hotfix.5(稳定)
  • 飞镖:v2.4.0
  • 操作系统:macOS Catalina v1.14.5
约书亚·德古兹曼

什么地方出了错?

到目前为止,如果您使用的是AndroidX,则可以将FlutterFragment嵌入Flutter布局的唯一方法是将其作为Android存档(AAR)添加到依赖项中。

我以前在Github中就此问题打开过一个问题,在撰写本文时仍未解决。

将Flutter添加为AAR依赖项既有优点也有缺点。使用AAR,您的团队无需在本地计算机上安装Flutter SDK,也不需要安装Dart SDK。但是,由于AAR文件是已编译的工件,因此您的团队可能无法在开发期间编辑项目的Flutter源代码。

这是有关如何通过将Flutter源代码添加为AAR模块来设置Android项目的文档。

但是为什么真正使用AAR?

幕后FlutterFragment并且其中的某些(如果不是全部)类io.flutter.embedding仍在使用支持库,而不是AndroidX,则依赖项不匹配启用AAR并编译过程中启用jetifier,Flutter的AAR输出现在将使用等效的AndroidX库,这在运行时不会发生

但是,我需要我的团队在处理某些Flutter应用程序功能的同时,还要对Android应用程序项目进行一些更改。

好吧,由于您无法使用FlutterFragment该特定类型的设置,因此您仍然可以使用FlutterView,特别是如果您仅在Android应用中显示Flutter布局的一部分时。

feature_fragment.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_layout.xml

<?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/flutterContainerView"
        android:layout_width="match_parent"
        android:layout_height="300dp" />
</LinearLayout>

但是,有一个小问题...

使用FlutterActivityFlutterFragment以上的好处之一FlutterView是易于同时管理Android和Flutter代码的生命周期。不用担心,您仍然可以通过使用附件管理Flutter代码的生命周期来处理Flutter代码的行为FlutterEngine

进一步阅读

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何定义自定义应用程序主题以为Android中的布局指定默认背景?

来自分类Dev

如何在我的应用程序中嵌入自定义字体

来自分类Dev

如何在Mac OS X应用程序中嵌入自定义可可框架?

来自分类Dev

如何使用C#和xaml在Windows 8.1应用程序中自定义POLL UI和公告UI?

来自分类Dev

Android应用程序中SeekBar的自定义形状

来自分类Dev

如何在Android应用程序中指定和添加自定义打印机?

来自分类Dev

Android应用程序和ActionBar中的自定义字体

来自分类Dev

Android应用程序和ActionBar中的自定义字体

来自分类Dev

TomEE嵌入式和自定义JAX-RS应用程序部署

来自分类Dev

TomEE嵌入式和自定义JAX-RS应用程序部署

来自分类Dev

Android-如何布局和使用自定义视图?

来自分类Dev

如何使其他应用程序无法使用Android中的系统范围/自定义广播?

来自分类Dev

如何在Android应用程序(Java)中创建自定义Google Maps样式

来自分类常见问题

如何在Android中为整个应用程序设置自定义字体?

来自分类Dev

如何在我的Android应用程序中包含来自GitHub的自定义库?

来自分类Dev

在Android中卸载应用程序时如何调用自定义方法

来自分类Dev

如何在branch.io中为Android自定义智能应用程序横幅?

来自分类Dev

如何在Android应用程序中创建自定义视图?

来自分类Dev

使用的特定自定义字体在android应用程序中不起作用

来自分类Dev

在Android Studio中为科学计算器应用程序使用自定义字体

来自分类Dev

将 Twilio Flex 嵌入到自定义应用程序中

来自分类Dev

用于向Android应用程序添加自定义布局的按钮

来自分类Dev

如何使用基本布局并在android中自定义

来自分类Dev

如何使用基本布局并在android中自定义

来自分类Dev

如何使用自定义应用程序替换Windows 10上的登录应用程序

来自分类Dev

Flutter-如何在Firebase动态链接中为应用程序邀请功能传递自定义参数?

来自分类Dev

如何在Flutter中实现自定义应用栏布局可滚动效果

来自分类Dev

如何在适用于 iOS 和 Android 的 Outlook Mobile 应用程序中启用显示从 Microsoft Flow 发送的自定义自适应卡片?

来自分类Dev

如何在Rails应用程序中包含带有自定义CSS和JS文件的静态页面

Related 相关文章

  1. 1

    如何定义自定义应用程序主题以为Android中的布局指定默认背景?

  2. 2

    如何在我的应用程序中嵌入自定义字体

  3. 3

    如何在Mac OS X应用程序中嵌入自定义可可框架?

  4. 4

    如何使用C#和xaml在Windows 8.1应用程序中自定义POLL UI和公告UI?

  5. 5

    Android应用程序中SeekBar的自定义形状

  6. 6

    如何在Android应用程序中指定和添加自定义打印机?

  7. 7

    Android应用程序和ActionBar中的自定义字体

  8. 8

    Android应用程序和ActionBar中的自定义字体

  9. 9

    TomEE嵌入式和自定义JAX-RS应用程序部署

  10. 10

    TomEE嵌入式和自定义JAX-RS应用程序部署

  11. 11

    Android-如何布局和使用自定义视图?

  12. 12

    如何使其他应用程序无法使用Android中的系统范围/自定义广播?

  13. 13

    如何在Android应用程序(Java)中创建自定义Google Maps样式

  14. 14

    如何在Android中为整个应用程序设置自定义字体?

  15. 15

    如何在我的Android应用程序中包含来自GitHub的自定义库?

  16. 16

    在Android中卸载应用程序时如何调用自定义方法

  17. 17

    如何在branch.io中为Android自定义智能应用程序横幅?

  18. 18

    如何在Android应用程序中创建自定义视图?

  19. 19

    使用的特定自定义字体在android应用程序中不起作用

  20. 20

    在Android Studio中为科学计算器应用程序使用自定义字体

  21. 21

    将 Twilio Flex 嵌入到自定义应用程序中

  22. 22

    用于向Android应用程序添加自定义布局的按钮

  23. 23

    如何使用基本布局并在android中自定义

  24. 24

    如何使用基本布局并在android中自定义

  25. 25

    如何使用自定义应用程序替换Windows 10上的登录应用程序

  26. 26

    Flutter-如何在Firebase动态链接中为应用程序邀请功能传递自定义参数?

  27. 27

    如何在Flutter中实现自定义应用栏布局可滚动效果

  28. 28

    如何在适用于 iOS 和 Android 的 Outlook Mobile 应用程序中启用显示从 Microsoft Flow 发送的自定义自适应卡片?

  29. 29

    如何在Rails应用程序中包含带有自定义CSS和JS文件的静态页面

热门标签

归档