当前位置: 首页 > news >正文

Flutter——Android原生View是如何通过Flutter进行加载

原生视图是如何通过Flutter进行加载渲染和交互

  • 介绍
  • 一句话概括
    • 1.在 Android 原生代码中注册 PlatformView
    • 2.Flutter 中使用 PlatformViewLink 加载这个原生 View

介绍

Flutter 中加载 Android 原生视图(View),这是完全可以实现的,Flutter 提供了官方支持:PlatformView(平台视图)机制。

一句话概括

在 Flutter 中通过 PlatformView 将 Android 原生视图(如 TextView、WebView、MapView 等)嵌入到 Flutter 的 Widget 树中。

1.在 Android 原生代码中注册 PlatformView

先创建NativeViewFactory视图类

class NativeTextView(context: Context, id: Int, creationParams: Map<String?, Any?>?) : PlatformView {private val textView: TextView = TextView(context).apply {text = "这是原生 Android TextView"textSize = 20fsetTextColor(Color.RED)}override fun getView(): View {return textView}override fun dispose() {}
}class NativeTextViewFactory(private val messenger: BinaryMessenger) : PlatformViewFactory(StandardMessageCodec.INSTANCE) {override fun create(context: Context, id: Int, obj: Any?): PlatformView {val creationParams = obj as? Map<String?, Any?>return NativeTextView(context, id, creationParams)}
}

然后在创建Plugin类,并进行注册:

class NativeViewPlugin : FlutterPlugin {override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {flutterPluginBinding.platformViewRegistry.registerViewFactory("native-text-view", NativeTextViewFactory(flutterPluginBinding.binaryMessenger))}override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {}
}

2.Flutter 中使用 PlatformViewLink 加载这个原生 View

创建Widget视图,进行渲染

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';class NativeTextView extends StatelessWidget {const NativeTextView({super.key});Widget build(BuildContext context) {const String viewType = 'native-text-view';return AndroidView(viewType: viewType,layoutDirection: TextDirection.ltr,creationParams: {},creationParamsCodec: const StandardMessageCodec(),);}
}

在Flutter页面中使用

import 'package:flutter/material.dart';
import 'native_text_view.dart';class MyPage extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(body: Center(child: SizedBox(height: 100,width: 300,child: NativeTextView(),),),);}
}
http://www.dtcms.com/a/286259.html

相关文章:

  • 2025年Flutter开发主流技术栈
  • Flutter 多语言(国际化)入门教程
  • 企业如何让内部视频仅限公司官网或指定域名播放?
  • 低代码开发实践博客
  • C++语法 匿名对象 与 命名对象 的详细区分
  • IDEA 中 Maven 配置:当前项目与新项目的统一设置方法
  • 【Docker基础】Docker Compose核心配置文件深度解析:从YAML语法到高级配置
  • 【数据结构】栈的深入解析--用C语言实现
  • Linux 环境下 NNG 通讯库:在嵌入式设备上应用
  • [2025CVPR-目标检测方向] CorrBEV:多视图3D物体检测
  • Docker 与 GPU 训练
  • 排序【各种题型+对应LeetCode习题练习】
  • 线程控制:互斥与同步
  • IDEA高效开发:Database Navigator插件安装与核心使用指南
  • Python趣味算法:抓交通肇事犯(车牌号谜题解析)
  • nginx定制http头信息
  • 腾讯云云服务器深度介绍
  • 面试150 克隆图
  • 通缩期的 “反脆弱” 研发:新启航逆势投入 30% 营收突破 3D 白光干涉测量技术
  • 深孔加工的方法及检测方法探究 —— 激光频率梳 3D 轮廓检测
  • 29、鸿蒙Harmony Next开发:深浅色适配和应用主题换肤
  • 计算机网络基础:从协议到通信全解析(大致框架)
  • 基于 WinForm 与虹软实现人脸识别功能:从理论到实践
  • VisualXML全新升级 | 新增BusLoad计算
  • python控制linux命令反馈
  • 二刷 黑马点评 附近商户
  • 如何更改 SQLserver 数据库存储的位置 想从C盘换到D盘
  • Delphi EDI 需求分析与对接指南
  • Springboot3整合Elasticsearch8(elasticsearch-java)
  • 智和信通赋能:北京某高校校园网交换机全维度智能管控