总结flutter玩转之-flutter 调用安卓原生view(使用AndroidView)

2023-11-06

总结flutter玩转之-fluuter 调用安卓原生view(使用AndroidView)

1.假设你已经熟悉fluuter 开发熟悉dart 语言 android 原生开发技能

1、在安卓原生项目添加代码

1.创建一个原生view 比如说TextView 继承自flutterSdk 中的PlatformView(io.flutter.plugin.platform.PlatformView)
package com.example.flutter_demo2022;

import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import androidx.annotation.Nullable;

import java.util.Map;

import io.flutter.plugin.platform.PlatformView;

public class MyView implements PlatformView {

    Context context;
    int viewId;
    Map<String, Object> params;
    TextView textView;

    public MyView(Context context, int viewId, Map<String, Object> params) {
        this.context = context;
        this.viewId = viewId;
        this.params = params;
        textView = new TextView(context);


        Log.d("gsc", "得到的参数=》" + params + textView.getLayoutParams());


        textView.setText("我是安卓原生的TextView" + params.get("ss"));
    }


    @Nullable
    @Override
    public View getView() {


        return textView;
    }

    @Override
    public void dispose() {
           //销毁view
    }
}

2.创建一个viewFactory 类继承PlatformViewFactory(io.flutter.plugin.platform.PlatformViewFactory)

public class MyViewFactory extends PlatformViewFactory {

    BinaryMessenger messenger;


    public MyViewFactory(BinaryMessenger messenger) {
        super(StandardMessageCodec.INSTANCE);
        this.messenger = messenger;

    }

    @NonNull
    @Override
    public PlatformView create(@Nullable Context context, int viewId, @Nullable Object args) {
        Map<String, Object> params = (Map<String, Object>) args;
        return new MyView(context, viewId, params);
    }
}

3.创建一个 FlutterPlugin 实现 io.flutter.embedding.engine.plugins.FlutterPlugin

public class FlutterPlugin implements io.flutter.embedding.engine.plugins.FlutterPlugin {
    @Override
    public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
        BinaryMessenger binaryMessenger = binding.getBinaryMessenger();
		//你注册的原生组件名字plugins.flutter.io/custom_platform_view 在flutter 代码会用到要一致才能调用到这个view
        binding.getPlatformViewRegistry().registerViewFactory("plugins.flutter.io/custom_platform_view", new MyViewFactory(binaryMessenger));
    }

    @Override
    public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {

    }
}

4.在宿主的app中注册(也就是fluuter页面的主页面activity中)

class MainActivity : FlutterActivity() {
    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        flutterEngine.plugins.add(FlutterPlugin())
    }
}

5.在flutter中dart 代码中添加此view

AndroidView(
        viewType: "plugins.flutter.io/custom_platform_view", //和你注册的名字一致
        creationParams: {"ss": 333}, //传递参数
        creationParamsCodec: StandardMessageCodec(),
      );

下期将介绍安卓view 承载flutter 的页面姿势O(∩_∩)O哈哈~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

总结flutter玩转之-flutter 调用安卓原生view(使用AndroidView) 的相关文章

  • Android Q:file.mkdirs() 返回 false

    我们有一个应用程序 使用外部存储来存储一些临时文件 图像 二进制数据 该代码已经运行了几年 直到最近才发生重大变化 在 Android Q 上它不起作用 File f new File Environment getExternalStor
  • 将现有 VARCHAR 列与 Room 结合使用

    我正在尝试将现有的数据库与 Android Room 一起使用 但是 我的一个表有一个 VARCHAR 列 Room 似乎只支持 TEXT 不支持 VARCHAR 而且 sqlite 不允许修改列类型 那么 有没有办法使用Room中现有的带
  • Android应用程序组件销毁和重新创建的详细信息

    有人可以向我提供一些具体的 值得信赖的 最好是简洁的 信息 内容如下 系统销毁和 如果适用 重新创建组件的顺序 片段 活动 活动的线程 异步任务 计时器 静态数据 类何时卸载 其他类中的线程 异步任务 定时器 主机 TabActivity
  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • 如何更改终端的默认目录?

    我想更改 Android Studio v2 2 2 终端的默认目录 当我打开终端时 它基于项目的目录 C 项目路径 我经常需要使用adb shell 所以我必须导航到 SDK 路径 平台工具 才能使用 adb 命令 是否可以更改终端的默认
  • 以编程方式将文本颜色设置为主要 Android 文本视图

    如何设置我的文本颜色TextView to android textColorPrimary以编程方式 我已经尝试了下面的代码 但它将 textColorPrimary 和 textColorPrimary Inverse 的文本颜色始终设
  • 在 flutter 中强制重建有状态子部件

    假设我有一个主屏幕 有状态小部件 其中有一个变量count作为状态 在此主屏幕中 有一个按钮和另一个有状态小部件 我们称之为MyListWidget MyListWidget初始化它自己的小部件initState取决于的值count多变的
  • ExoPlayer2 - 如何使 HTTP 301 重定向工作?

    我开始使用 ExoPlayer 来传输一些音频 一切都很顺利 直到我遇到一个带有 301 永久移动 重定向的 URL ExoPlayer2 默认情况下不处理该问题 我已经看过这个线程 https github com google ExoP
  • 更改项目名称

    Flutter项目的项目名称可以修改吗 项目名称是指您在创建 flutter 项目时提供的名称flutter create name 这取决于您想要实现的目标 如果您想更改手机菜单中显示的应用程序名称以及应用程序图标 则必须更改androi
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • Android 构建发布失败,原因为:java.lang.ArrayIndexOutOfBoundsException:213(pr​​oguard 问题)

    我的项目使用调试构建变体构建得很好 但使用发布变体 Android Studio 会抛出 引起原因 java lang ArrayIndexOutOfBoundsException 213 可能是什么问题 如果我设置minifyEnable
  • 对于一个单元格,RecyclerView onBindViewHolder 调用次数过多

    我正在将 RecyclerView 与 GridLayoutManager 一起使用 对于网格中的每个项目 我需要调用 REST api 来检索数据 然后 从远程异步获取数据后 我使用 UIL 加载 显示图像 一切似乎都很好 但我发现 on
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • WorkManager 或 AlarmManager 用于日常请求然后通知工作?

    这是用例 用户设置具有特定时间的每日通知 在指定时间 发出网络请求以获取一些数据 然后使用检索到的数据显示通知 我不确定是否应该使用 AlarmManager 还是 WorkManager 来实现这个用例 据我了解 AlarmManager
  • 我应该释放或重置 MediaPlayer 吗?

    我有自己的自定义适配器类 称为 WordAdapter 并且我正在使用媒体播放器 名为pronounce WordAdapter 类中的全局变量 我有不同的活动 其中每个列表项都有线性布局 名为linearLayout 我正在设置onCli
  • OnLongClickListener 不工作

    我有一个ImageView 我需要使用onLongClickListener对于图像视图 当我使用这段代码时 什么也没有发生 Code gallery Gallery findViewById R id gall1 gallery setA
  • Android - 以编程方式选择菜单选项

    有没有办法以编程方式选择菜单选项 基本上 我希望视图中的按钮能够执行与按特定菜单选项相同的操作 我正在考虑尝试调用 onOptionsItemSelected MenuItem item 但我不知道要为菜单项添加什么 是的 有一种方法可以选
  • 如何使用 AccessibilityService 在 Android 中模拟按键

    我正在编写一个辅助服务 我一直在尝试在应用程序上进行一些自动搜索 我使用accessibilityservice action paste来填充EditText 然后我需要模拟软键盘上的按键 但我不知道如何做 你们能帮我一下吗 你可以尝试A
  • Android 屏幕方向错误

    我使用的是 Android HTC HERO 2 1 版本 我写的活动
  • Git 实验分支还是单独的实验存储库?

    我正在开发一个 Android 应用程序 并且在整个开发周期中一直使用 Git 现在 我想构建并发布实验性功能 供人们尝试和安装 同时仍将原始的 稳定的应用程序安装在他们的设备上 现在 这意味着我需要使用不同的包名称 这会更改开发项目中的一

随机推荐

  • Springboot + Vue ElementUI 实现MySQL&&Postgresql可视化

    一 功能展示 PostgreSQL教程 实现类似于MySQL的show create table功能实现见末尾 效果如图 DB连接配置维护 Schema功能 集成Screw生成文档 导出库的表结构 导出表结构和数据 表对象操作 翻页查询 查
  • Mybatis快速入门

    目录 MyBatis简介 MyBatis基于xml的快速入门 1 案例准备 2 引入依赖 3 编写全局配置文件 4 编写持久层接口的映射文件 5 编写测试类 MyBatis基于注解的快速入门 MyBatis简介 MyBatis 是一个优秀的
  • nodejs安装及环境配置

    一 下载 安装 1 下载node js 下载地址 Node js 2 安装 2 1选择Node js runtime 2 2这里不用选择安装其他的插件 如果选择会消耗2 3g流量的 2 3安装完成 3 检查是否安装成功 3 1 node v
  • C语言——时间制转换

    C语言 写一个程序 要求用户输入24小时制的时间 然后显示12小时制的时间 首先我们得搞清楚24小时制和12小时制之间的差异 从上步的差异中 我们得到规律 整理思路 并完成代码 考虑到代码的健壮性和实用性 考虑可能会遇到的问题 比如用户输入
  • 时间序列——季节系数法

    注 参考司守奎老师的数学建模与算法书籍 在数学建模问题中 有很多类问题具有 季节性特点 类似于不同蔬菜在一年四季中的价格变化 季节性服装在一年四季的价格变化等 对于季节性时间序列的预测 可以采用 季节系数法 来预测时间序列的变化趋势 在时间
  • 【python 1】python 基础

    文章目录 一 格式化输出 1 占位符 2 拼接输出 3 message 输出 4 format 输出 二 input 输入 三 pass break 四 字符串 五 列表 六 元组 七 字典 八 集合 一 格式化输出 1 占位符 s str
  • 文件读写的理论

    为了提高效率 稍微复杂一些的操作系统对文件的读写都是带缓冲的 Linux当然也不例外 所谓缓冲 就是操作系统为最近刚读写的文件内容在内核保留一份副本 以便当再次需要已经缓冲存储在副本中的内容时就不必再临时从设备上读入 而需要写的时候则可以先
  • Jmeter-使用http proxy代理录制脚本

    Jmeter 使用http proxy代理录制脚本 第1步 打卡jmeter工具新增1个线程组 第2步 给线程组添加1个HTTP请求默认值 第3步 设置下HTTP请求默认值第4步 在工作台中新增1个 HTTP代理服务器 第5步 设置HTTP
  • c语言中weak用法,c语言中weak的作用

    c语言中weak的作用 转载参考至 https blog csdn net q251900 在u boot源码中看到 weak关键字 在移植过程中遇到了问题 用例 weak在不同的环境中用法不同 在stm32源码中也比较常见 在u boot
  • BeanCreationException: Error creating bean with name ‘org.springframework.web.servlet.mvc.method.ann

    BeanCreationException Error creating bean with name org springframework web servlet mvc method annotation ExceptionHandl
  • 测试中

    root ubu blockchain2 ll total 44 drwx 5 root root 4096 Aug 4 09 48 drwxr xr x 23 root root 4096 Jul 26 11 26 rw r r 1 ro
  • MVC模式实现学生信息管理

    MVC全名是Model View Controller 是模型 model 视图 view 控制器 controller 的缩写 一种软件设计典范 用一种业务逻辑 数据 界面显示分离的方法组织代码 将业务逻辑聚集到一个部件里面 在改进和个性
  • Markdown表格-换行、合并单元格

    文章目录 1表格中对其 换行处理 1 1 一般我们都会这样用表格如下 1 2 当然这里也可以通过设置 左对齐 右对齐 1 3 实现表格内容换行 2 合并表格 2 1 合并表格行 2 2 合并表格列 2 3 综合实例 1表格中对其 换行处理
  • MyCat配置文件

    1 MyCat 配置文件简介 Mycat的架构其实很好理解 Mycat是代理 Mycat后面就是物理数据库 和 Web 服务器的 Nginx 类似 对于使用者来说 访问的都是Mycat 不会接触到后端的数据库 我们现在做一个主从 读写分离
  • 区块链改革杭州闭门会议——分享链改机遇,探讨价值联动!

    2018年8月19日14点 区块链改革 链改 闭门会暨链改超级节点 杭州 会议在杭州钱江新城华润大厦隆重召开 大会围绕 分享链改机遇 探讨价值联动 为主题 展开系列讨论 基于各界对区块链赋能实体经济的广泛共识 和区块链赋能实体经济场景的逐步
  • python计算距今时间

    计算距今时间 计算一个 ISO 8601 格式的时间字符串距离今天的天数 import datetime 定义时间字符串 time str 2023 08 03T09 30 29 359 08 00 解析时间字符串为datetime对象 d
  • 关于openldap/bdb的一些配置和维护的问题

    一 配置部份在基本配置完成之后 可以在slapd conf设置一些提高安全和效率的选项 cachesize 5000 checkpoint 1024 5 cachesize是ldap在内存中缓存的记录条数 这个缓存是openldap自己维护
  • GMTC分享——当插件化遇到 Android P

    转自 https blog csdn net xinzhou201 article details 80881604 GMTC分享 当插件化遇到 Android P 手机京东技术团队 2018 06 30 举报 前言 Android P 来
  • 用Python写爬虫就很low?你赞同嘛?

    之前换了份工作 不再是单纯的Web开发了 要学习的东西真的挺多的 入职的第1天 就让我入手写个爬虫 只是这个爬虫没有采集几个亿数据量的业务场景 之前换了份工作 不再是单纯的Web开发了 要学习的东西真的挺多的 入职的第1天 就让我入手写个爬
  • 总结flutter玩转之-flutter 调用安卓原生view(使用AndroidView)

    总结flutter玩转之 fluuter 调用安卓原生view 使用AndroidView 1 假设你已经熟悉fluuter 开发熟悉dart 语言 android 原生开发技能 1 在安卓原生项目添加代码 1 创建一个原生view 比如说