flutter 音视频通话项目的那点事儿

2022-08-08  本文已影响0人  简单coder

开篇

业务型

脚本

  1. 本地资源文件读取,这个可用脚本插件生成,否则pub.yaml配置确实比较烦
  2. json_model化,项目肯定需要数据转模型的,flutter禁用了反射mirror库,日常使用一般都是使用json_annotation注解,build_runner脚本运行,预生成json转化文件.这种编译前的转化.如果是这样,基本没啥好说的,主要的点是,模型数据有可能不是后端发给我们的,也有可能是iOS原生,已经安卓原生通过im发送过来的,所以数据类型有可能会被原生decode,encode修改,事实上我确实碰到了这个问题,在拨打电话中,接收iOS原生发送过来的数据,有些数据类型被修改了,比如int类型被修改成了string,这里在转模型时就会抛出异常,所以我不得不手动转类型,不过,因为是采用正则全局替换,也不算什么太过麻烦的事.


状态管理

  1. Get自标榜MOST LISKED的LOGO,这个有点王婆卖瓜的味道.
  2. Get弱化context以及stful的这个行为,这个应该是官方不太喜欢get的原因.
  3. Get太"好用"了,导致部分新手动不动就get,get,完全不关心原生的生命周期,原理等等,导致基础更加薄弱,有些人的无脑使得别的人对这一框架更加反感

动画管理

class SKPositionTween extends Tween<SKPosition> {
  SKPositionTween({required SKPosition begin, required SKPosition end})
      : super(begin: begin, end: end);

  @override
  SKPosition lerp(double t) => SKPosition.lerp(begin!, end!, t);
}

以及差值动画计算SKPosition.lerp(begin!, end!, t);

原生与flutter通信,插件封装

Overlay层级控制

比如弹窗什么的永远要高于直播层级,可以通过权重设置每个overlay的层级



这东西有点向iOS原生window层级控制.


agora管理

三方框架永远建议自己至少封装一层,否则迭代升级会非常的痛苦.


最好能做到业务page中,不需要
import 'package:agora_rtc_engine/rtc_engine.dart';

整体框架把控

PS

上一篇 下一篇

猜你喜欢

热点阅读