android - 如何在 Flutter 插件中使用 Android Fragment?

标签 android flutter android-fragments dart

我需要将在原生代码 iOS/Android 中创建的 SDK 包装到 Flutter 中。在 Android 方面,我的 Fragment 或 Activity 需要扩展一些功能 开发工具包 实现自定义 View 的 fragment 或 Activity 。
我的问题是如何包装 开发工具包 中的 fragment 或 Activity Flutter 插件 并让使用我的插件在 flutter 项目方面扩展它?换句话说,我想要一个可以使用我的插件扩展 Fragment 或 Activity 的 Widget 以拥有 在 SDK 中显示 Widget ui 的能力 .
在插件中使用 FlutterFragment、FlutterActivity 是否正确?
我是说:
Flutter 项目(Widget)<-> Flutter 插件(FlutterFragment 或 FlutterActivity 附加到原生 SDK Fragment 或 Activity)
如果不是什么是可能的解决方案?

最佳答案

我遇到了同样的问题,这是我的解决方案:

  • 实现一个支持ActivityAware的FlutterPlugin,关于如何缓存Activity,引用这个FlutterPlugin with ActivityAware,以及MethodCallHandler(与FlutterWidget应用程序通信)。
  • 实现 MethodCall 例如 SHOW_NATIVE_FRAGMENT 它将附加 native fragment 。注意:需要动态添加一个View作为fragment的容器
         int id = 0x123456;
         ViewGroup.LayoutParams vParams = new FrameLayout.LayoutParams(
                 ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT
         );
         FrameLayout container = new FrameLayout(context);
         container.setLayoutParams(vParams);
         container.setId(id);
         activity.addContentView(container, vParams);
    
  • 然后将Fragment附加到Activity
  •         FragmentManager fm = ((FragmentActivity) activity).getSupportFragmentManager();
            fm.beginTransaction()
                .replace(id, nativeFragment)
                .commitAllowingStateLoss();
    
  • 完成 Fragment 后,请记住使用 MethodChannel.Resultsuccess() 调用 error(),否则,FlutterWidget 将永远被阻塞。
  • 在 FlutterWidget 端,使用
  • 调用 MethodChannel
            static Future<void> showNativeFragment() async {
                await _channel.invokeMethod("SHOW_NATIVE_FRAGMENT");
            }
    
    还要确保 FlutterWidget 的应用程序 Activity 扩展了 FlutterFragmentActivity

    关于android - 如何在 Flutter 插件中使用 Android Fragment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62746709/

    相关文章:

    java - 如何在 Android SQLite 中插入默认值?

    android - 在 TableRow 中对齐 TextView

    android - 设备空闲时 fragment 状态丢失

    安卓工作室 : New gradle build NDK sample app error

    email - Flutter - 如何实现一个电子邮件 TextFormField 小部件在多个屏幕中使用?

    Flutter 版本解决失败 with new flutter upgrade

    git - Flutter 的 pubspec.yaml 版本更改自动提交标记

    android - 在选项卡式 Activity 中添加横幅

    android - 当我从对话框 fragment 返回并且编​​辑文本获得焦点时,不会调用 onBackPressed

    android - 如何在内容滚动时捕获 ScrollView 的一部分?