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

【Flutter】抽象类的运用(abstract与implements的实践)

使用场景:功能支持两种接口模式,使用抽象类分别实现接口
1、定义抽象类及统一接口

abstract class UploadStrategy {/// 抽象上传方法/// [file]:待上传文件/// [onSendProgress]:进度回调(已上传字节数,总字节数)Future<String> upload({required File file,Function(int, int)? onSendProgress});
}

2、通过创建策略工厂类(根据类型获取上传实例)

class UploadStrategyFactory {static UploadStrategy getStrategy(UploadApiType type) {switch (type) {case UploadApiType.aLiYun:return AliYunUploader();case UploadApiType.sam:return SamUploader();}}
}

3、通过implements分别实现自定义上传接口

/// 阿里云OSS上传实现
class AliYunUploader implements UploadStrategy {@overrideFuture<String> upload({required File file,Function(int, int)? onSendProgress}) async {// 复用原阿里云上传逻辑return await AliyunOss.upload(file: file,onSendProgress: onSendProgress,);}
}//上传实现
class SamUploader implements UploadStrategy {@overrideFuture<String> upload({required File file,Function(int, int)? onSendProgress}) async {return await FileUploadService().uploadCommon(file);}
}

4、使用示例:

 final uploader = UploadStrategyFactory.getStrategy(uploadType);try {final urls = await Future.wait(files.map((file) => uploader.upload(file: file,onSendProgress: onSendProgress,),),);UIToast.showSuccess('上传成功');successCallback(urls);} catch (e) {UIToast.showError('上传失败: ${e.toString()}');} finally {UIToast.dismissHud();}

总结:虽然可以通过参数方式实现不同类型接口的功能,但通过抽象类可以减少逻辑,并更加简便的使用上传方法,后期若有增加类型,也更容易维护。

http://www.dtcms.com/a/434710.html

相关文章:

  • 上海建设网站便宜的网站服务器是什么意思
  • 11.UE-游戏逆向-内存中的FUObjectArray(深入理解内存数据)
  • AI智能体在研究分析中的仿真应用:利他主义的悖论——是道德的顶峰,还是精致的利己?
  • SQL语句——高级字符串函数 / 正则表达式 / 子句
  • 西宁网站建设君博首选建设公司的网站首页
  • 【MySQL】数据库事务深度解析:从四大特性到隔离级别的实现逻辑
  • 2021 年真题配套词汇单词笔记(考研真相)
  • 儿童携带背包专利拆解:活动腿弹簧式伸缩卡扣与三模式(背包 / 座椅 / 安全椅)切换机制
  • 一般做一个网站专题页多少钱多商户商城源码下载
  • 利用网站建设平台河南省建设集团有限公司官网
  • **标题:发散创新:探索分布式账本的深度技术****摘要**:本文将深入探讨分布式账本技术,
  • Berachain稳定币使用指南:HONEY与跨链稳定币的协同之道
  • Ethernaut 1-10
  • 比特币、以太坊的“红与黑”:合法持有与传承的法律边界与警示
  • 函数的定义与使用
  • Citadel 发布首个原生支持 Sui 的硬件钱包 SuiBall
  • 游戏攻略新闻资讯主题模板源码 YK一点资讯模版 Zblog主题模版
  • 英语学习-Saints043-2
  • 手机网站html512306的网站是哪个公司做的
  • 认知篇#14:360度舵机和180度舵机的区别
  • 多模态大语言模型LISA
  • 第一次训练赛题解
  • 在线购物网站 模版怎么开网店具体流程
  • 返回值:on()方法返回的是当前jQuery对象
  • 你用过快捷支付吗?这是一种什么支付方式?
  • 自己做的网页加在网站文章上为什么打不开门户网站系统架构
  • 韩国在中国做美食的视频网站有哪些企业网站建设开发服务
  • (C语言数据结构)二叉树-概念-性质-存储结构-遍历-代码实现层层刨析
  • 面试MySQL 高级问题及解答(三)
  • 网站网页转小程序教程wordpress评论框背景图片