flutter嵌入原生组件_Flutter之Flutter布局中加入原生View

本文介绍了如何在Flutter布局中嵌入原生Android组件,以TextView为例,详细阐述了实现过程,包括创建PlatformView、PlatformViewFactory以及FlutterPlugin的注册。此外,还展示了如何通过MethodChannel进行Flutter与原生组件的交互,实现文本内容的动态更新。
摘要由CSDN通过智能技术生成

在先前的两篇文章中,介绍了flutter 与原生android通信,以及在原有工程中加入flutter view或是flutter的新页面。

flutter功能很强大不仅仅有自己的ui库,也能像rn那样封装原生view来实现更好的ui,地图和webview和相机就是觉见的封装。

在这里先用textview文本组件举例,效果图如图一。

图一

在Android工程中编写并注册原生组件

添加原生组件的流程基本是这样的:

1.实现原生组件PlatformView提供原生view

2.创建PlatformViewFactory用于生成PlatformView

3.创建FlutterPlugin用于注册原生组件

实现原生组件PlatformView提供原生view

在这里我定义一个myview的类,实现PlatformView(flutter定义的接口类,如图二)。

图二

MyView.java

import io.flutter.plugin.common.BinaryMessenger;

import io.flutter.plugin.common.MethodCall;

import io.flutter.plugin.common.MethodChannel;

import io.flutter.plugin.platform.PlatformView;

public class MyView implements PlatformView , MethodChannel.MethodCallHandler{

private final TextView natvieTextView;

Context context;

public MyView(Context context, BinaryMessenger messenger, int id, Map params) {

this.context = context;

TextView myNativeView = new TextView(context);

myNativeView.setText("我是来自Android的原生TextView");

if (params.containsKey("myContent")) {

String myContent = (String) params.get("myContent");

myNativeView.setText(myContent);

}

this.natvieTextView = myNativeView;

MethodChannel methodChannel = new MethodChannel(messenger, "plugins.nightfarmer.top/myview_" + id);

methodChannel.setMethodCallHandler(this);

}

@Override

public View getView() {

return natvieTextView;

}

@Override

public void dispose() {

}

@Override

public void onMethodCall(MethodCall call, MethodChannel.Result result) {

if ("setText".equals(call.method)) {

String text = (String) call.arguments;

natvieTextView.setText(text);

result.success(null);

Intent intent = new Intent();

intent.setClass(context, LoginActivity.class);

context.startActivity(intent);

}

}

}

MyView中onMethodCall是用于处理flutter与原生view交互的,如果不需要交互的话可以不用实现MethodChannel.MethodCallHandler。

创建PlatformViewFactory用于生成PlatformView

package com.woshiku.flutter_rn.plugin;

import com.woshiku.flutter_rn.factory.MyViewFactory;

import io.flutter.plugin.common.PluginRegistry;

public class MyViewFlutterPlugin {

public static void registerWith(PluginRegistry registry) {

final String key = MyViewFlutterPlugin.class.getCanonicalName();

if (registry.hasPlugin(key)) return;

PluginRegistry.Registrar registrar = registry.registrarFor(key);

registrar.platformViewRegistry().registerViewFactory("plugins.woshiku.top/myview", new MyViewFactory(registrar.messenger()));

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值