gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:21:26 26 4
gpt4 key购买 nike

我需要将在原生代码 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com