【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();
    }

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

相关推荐
音浪豆豆_Rachel3 小时前
Flutter鸿蒙化之深入解析Pigeon多参数接口设计:multiple_arity.dart全解
flutter·harmonyos
音浪豆豆_Rachel3 小时前
Flutter鸿蒙文件选择器深度解析:文本文件处理与跨平台挑战
flutter·harmonyos
renke33645 小时前
Flutter 2025 测试工程体系:从单元测试到混沌演练,构建高可靠、可验证、自动化的质量保障闭环
flutter·单元测试·自动化
DreamMachine5 小时前
Flutter 开发的极简风格聊天界面
flutter·交互设计
kirk_wang7 小时前
Flutter Catcher 在鸿蒙端的错误捕获与上报适配指南
flutter·移动开发·跨平台·arkts·鸿蒙
未来猫咪花8 小时前
flutter 确实不需要 hooks
flutter
音浪豆豆_Rachel9 小时前
Flutter鸿蒙化之深入解析Pigeon可空返回与参数设计:nullable_returns.dart全解
flutter·harmonyos
音浪豆豆_Rachel10 小时前
Flutter鸿蒙跨平台测试策略解析:从基础Widget测试到平台集成验证
flutter·harmonyos
音浪豆豆_Rachel10 小时前
Flutter鸿蒙跨平台通信协议解析:Pigeon生成的Dart端桥接艺术
flutter·华为·harmonyos