【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 {
  @override
  Future<String> upload({
    required File file,
    Function(int, int)? onSendProgress
  }) async {
    // 复用原阿里云上传逻辑
    return await AliyunOss.upload(
      file: file,
      onSendProgress: onSendProgress,
    );
  }
}

//上传实现
class SamUploader implements UploadStrategy {
  @override
  Future<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();
    }

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

相关推荐
G_dou_8 分钟前
Flutter+OpenHarmony 实战:weather 天气查询应用
flutter·harmonyos
韩曙亮39 分钟前
【错误记录】flutter pub get 执行报错 ( 打开 Windows 开发者模式 )
windows·flutter
G_dou_3 小时前
Flutter+OpenHarmony实战:flashlight】手电筒项目
flutter·harmonyos
坚果的博客3 小时前
Flutter OHOS SDK 版本目录校验 Bug 修复实战
flutter·bug
坚果的博客4 小时前
Flutter 开发鸿蒙 6 应用,祝贺六一儿童节 [特殊字符]
flutter·华为·harmonyos
jingling5554 小时前
Flutter | 从基本跳转到路由守卫
服务器·前端·网络·flutter·前端框架
用户9655973619019 小时前
Flutter 遇上 FlutterSkills:让开发效率翻倍的实用技巧
flutter
2501_919749031 天前
鸿蒙 Flutter 实战:image_crop 0.4.1 适配 3.27-ohos 全流程
flutter·华为·harmonyos
木子雨廷1 天前
Flutter 内存管理实战:从 GC 原理到 DevTools 泄漏排查
前端·flutter
恋猫de小郭1 天前
GSY 史上最全跨平台/架构/语言的项目,七大项目召唤「神龙」
android·前端·flutter