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

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.xdnf.cn/news/15774.html

相关文章:

  • 关于Mysql开启慢查询日志报错:13 - Permission denied的解决方案
  • logback日志控制服务器日志输出
  • 对Yii2中开启`authenticator`后出现的跨域问题-修复
  • 图机器学习(11)——链接预测
  • 现代R语言【Tidyverse、Tidymodel】的机器学习方法
  • Typecho博客集成阿里云CDN+OSS实现全站加速方案
  • 关于字符编辑器vi、vim版本的安装过程及其常用命令:
  • 第七章 愿景09 海波龙的坑
  • 数字化转型:概念性名词浅谈(第三十讲)
  • Kotlin集合过滤
  • 文档处理控件TX Text Control系列教程:使用 C# .NET 将二维码添加到 PDF 文档
  • 从拆分到导出图片,这款工具如何简化PDF处理流程
  • 基于R语言piecewiseSEM结构方程模型在生态环境领域实践技术应用
  • 无标记点动捕:如何突破传统娱乐边界,打造沉浸式交互体验
  • RuoYi-Cloud框架功能分析与请求处理流程解析
  • docker,防火墙关闭后,未重启docker,导致端口映射失败
  • 【3D并排条状图】:附Origin详细画图教程
  • CertiK创始人顾荣辉出席上海Conflux大会,聚焦Web3全球化中的安全与合规路径
  • 区块链加密技术全景解析
  • (nice!!!)(LeetCode 每日一题) 2163. 删除元素后和的最小差值 (贪心+优先队列)
  • Java学习第五十三部分——后端常用函数
  • 从抓包GitHub Copilot认证请求,认识OAuth 2.0技术
  • 性能远超Spring Cloud Gateway!Apache ShenYu如何重新定义API网关!
  • 集成开发环境:在IntelliJ IDEA中高效运行与调试Spring Boot
  • LangChain 源码剖析(三):连接提示词与大语言模型的核心纽带——LLMChain
  • Mock 单元测试
  • AI驱动数据质量优化:破局数据治理难题
  • PyCharm高效入门指南
  • 力扣 hot100 Day48
  • 雪豹大模型驱动效率革命 华鼎冷链科技重构餐饮供应链神经网络