一文搞懂FlutterMethodChannel原理

目录

前言

swift端Channel实现

flutter端Channel实现

flutterMethodChannel原理

MethodChannel整体架构图

IOS端MethodChannel分析

如何注册MethodChannel监听?

总结


前言

        在跟甲方合作中,需要开发一个App,除了店长管理日常日报和订单退款之外,还需要实现通过消息推送将每笔订单进行语音播报。App开发开始从其他团队借调一个做Android的人过来先完成了Android开发,ios本打算靠后一点发布。刚好遇到组织架构重组,ios就停滞了。离甲方要求的时间只有一个月时间了,产品和运营就来找我们技术团队说App能不能做,但是重新学习一门新的语言,确实一个非常大的挑战。恰好当时我很感兴趣flutter开发app,就主动提出来接这个锅。虽然年龄已经过了30,也想试一试是否还能学得动,学习新的语言和技术毕竟是兴趣使然!最终花了5天入门dart语言,5天熟悉开发环境和调试打包,真机调试等,并在1多个月内完成了Android版本的发布和ios 的开发提测!!!整体感觉不错,特别是ios的语音播报问题,从未接触过swift到最终实现ios的语音播报,特别写下这篇文章表示对自己的一份总结吧。

        基于flutter开发,对于大部分功能界面确实能做到开发一套代码,在Android和ios就能做到完全兼容,在涉及到语音播报的时候,就很麻烦了,本来打算使用TTS来实现语音播报的,参考了下网上资料,大多都使用百度语音合成和科大讯飞,可是需要注册,且必须交年费才能使用,于是放弃。最后使用1到10,十,百,千,万等mp3静态资源,使用dart解析订单金额并将mp3读入内存进行语音播报,比如10元,那么解析出来的就是["file://**/1.mp3","file://**/.十.mp3","file://**/yuan.mp3"]。Android中使用flutter_exoplayer,其原理是通过MethodChannel调用原生的播放器进行语音播放,将解析出来的静态资源列表传给flutter_exoplayer插件,就可以完成多mp3无缝连播了。Java核心代码:

flutter_exoplayer并不支持ios,而且现在该插件好像也不支持更新了,查了很多插件都不满足要求,最后索性自己探索自己搞,写出一个语音播报的功能出来。

swift端Channel实现

为了能在ios支持语音播报,坚持3天swfit的学习,基本掌握了swift语法,并通过FlutterMethodChannel实现语音播报。语音播报最后封装在SpeechPlayer类中,类之间关系如下图所示:

在SpeechPlayer初始化时,首先创建一个具有唯一名称的Channel:

在channel对象的setMethodCallHandler回调中监听dart调用的speech方法,核

### 推荐算法概述 推荐系统旨在预测用户的兴趣并向用户提供个性化的建议。这类系统广泛应用于电子商务、社交媒体以及娱乐行业等领域,帮助用户发现感兴趣的商品或内容。为了构建有效的推荐引擎,通常采用三种主要类型的推荐技术:基于内容的过滤(Content-based Filtering),协同过滤(Collaborative Filtering),混合模型(Hybrid Models)[^4]。 #### 协同过滤原理 在众多推荐算法中,协同过滤是最常用的一种方法之一。其核心思想在于利用大量其他用户的行为数据来进行个性化推荐。具体来说,如果两个用户在过去表现出相似的兴趣偏好,则认为他们在未来也会有类似的喜好;同样地,对于同一类商品而言,被一群具有相同品味的人所喜爱意味着这些产品之间存在关联性[^4]。 ##### 用户-项目矩阵(U-V矩阵) 以视频平台为例,可以建立一个二维表格形式的关系结构——用户-视频矩阵(User-to-Item Matrix),其中每一行代表一位特定观众的历史观看记录,而每列则对应不同影片的信息。当面对稀疏的数据集时,可以通过填充缺失值或者仅保留评分较高的条目等方式简化处理过程。 ##### 计算相似度 针对上述提到的两种情况(即寻找相似用户和查找相近物品),需要定义合适的距离度量方式来量化彼此间的差异程度。常见的衡量标准包括余弦相似度(Cosine Similarity)、皮尔逊相关系数(Pearson Correlation Coefficient)等。例如,在计算两部电影之间的相似度时,可以选择后者作为评价指标: \[ \text{similarity}(A, B)=\frac{\sum_{i=1}^{n}\left(r_{Ai}-\bar{r}_{A}\right)\left(r_{Bi}-\bar{r}_{B}\right)}{\sqrt{\sum_{i=1}^{n}\left(r_{Ai}-\bar{r}_{A}\right)^{2}} \cdot \sqrt{\sum_{i=1}^{n}\left(r_{Bi}-\bar{r}_{B}\right)^{2}}} \] 这里 \( r_{Xj} \) 表示第 j 位用户给定 X 物品打下的分数,\( \overline {r_X } \) 则表示所有涉及此项目的平均得分。 ```python import numpy as np from scipy.spatial.distance import pdist, squareform def pearson_corr_matrix(data): """Calculate the Pearson correlation coefficient matrix.""" corr = 1 - squareform(pdist(data.T, metric='correlation')) return corr ``` #### 实现步骤 尽管具体的实施方案可能因应用场景的不同有所变化,但总体上遵循以下几个原则: - **数据预处理**:清洗并整理原始日志文件中的交互事件; - **特征提取**:根据业务需求选取恰当维度描述实体属性; - **模型训练**:运用机器学习框架完成参数估计工作; - **效果评估**:借助离线测试集验证性能表现,并持续迭代优化方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值