美文网首页
flutter plugin之路(阶段完结):四步实现flutt

flutter plugin之路(阶段完结):四步实现flutt

作者: 帅气的阿斌 | 来源:发表于2023-03-17 14:57 被阅读0次
    • 系列文章

    flutter与原生交互传值OC/java版(一)
    flutter与原生交互传值OC/java版(二)
    四步实现flutter显示iOS原生组件OC/java版(三)
    四步实现flutter显示安卓原生组件OC/java版(三)
    本demo的github地址:https://github.com/iBinbro/flutterstudy

    四步实现flutter显示安卓原生组件

    一、安卓端的实现

    1.新建原生组件(我是iOS开发...)

    /// 原生的组件
    class NVView extends TextView {
        public NVView(Context context, Object arg) {
            super(context);
            setText("我是安卓原生组件" + arg);
        }
    }
    

    2.新建一个继承PlatformView类 返回具体的原生组件

    /// 一个继承PlatformView类 返回具体的原生组件
    class NVPlatformView implements PlatformView {
        Context context;
        Object args;
    
        NVPlatformView(Context context, Object args) {
            this.context = context;
            this.args = args;
        }
    
        /// 这里返回原生组件
        @Nullable
        @Override
        public View getView() {
            Log.d("args", "args = " + args);
            return new NVView(context, args);
        }
    
        @Override
        public void dispose() {
            Log.d("销毁", "NVPlatformView 销毁 自动释放的");
        }
    }
    

    3.新建一个工厂类 返回 PlatformView 类实例

    /// 新建一个工厂类 返回 PlatformView 类实例
    class NVPlatformViewFactory extends PlatformViewFactory {
    
        /// 与flutter中 creationParams creationParamsCodec 对应 不实现此方法args则为null
        public NVPlatformViewFactory() {
            super(StandardMessageCodec.INSTANCE);
        }
    
        @NonNull
        @Override
        public PlatformView create(Context context, int viewId, @Nullable Object args) {
            //args 根据这个参数可以返回不同的view
            return new NVPlatformView(context, args);
        }
    }
    

    4.原生代码里注册插件以及注册步骤3中创建的NVPlatformViewFactory
    这里比iOS多一步,需要再创建一个实现FlutterPlugin的类,然后再注册NVPlatformViewFactory

    /**********flutter显示原生组件flutter**********/
    public class NVPlugin implements FlutterPlugin {
    
        @Override
        public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
            binding.getPlatformViewRegistry().registerViewFactory("nvview", new NVPlatformViewFactory());
        }
    
        @Override
        public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
    
        }
    }
    
    public class MainActivity extends FlutterActivity {
    
        //其他代码...
    
        //注册插件 核心代码
        @Override
        public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
            super.configureFlutterEngine(flutterEngine);
            //添加插件
            flutterEngine.getPlugins().add(new NVPlugin());
        }
    
        //其他代码...
    }
    

    flutter侧的代码

          Container(
            width: 100,
            height: 100,
            color: Colors.red,
            child: AndroidView(
              viewType: "nvview",
              creationParams: 2,
              creationParamsCodec: StandardMessageCodec(),
            ),
          )
    

    相关文章

      网友评论

          本文标题:flutter plugin之路(阶段完结):四步实现flutt

          本文链接:https://www.haomeiwen.com/subject/jeyjrdtx.html