El uso de la enumeración Enum en el proyecto Flutter

Extension¿Cómo escribir código limpio y ordenado en Dart ?

En mis proyectos de Flutter, uso mucho Enum, pero las integraciones Enumy Extensionlos métodos hacen que el código sea más limpio y fácil de leer.

Suponga que escribe una enumeración y luego devuelve diferentes textos de visualización de acuerdo con el valor de esta enumeración. En el pasado, el uso de declaraciones en IIFE ( publicación de medios ) se usaba para llamar a métodos anónimos en expresiones de función. Aunque esto es muy común en Dart, este patrón produce una gran cantidad de código espagueti, como se muestra en el siguiente ejemplo. Además, si necesita agregar el mismo texto en otro lugar, debe copiar el fragmento de código completo en lugar de simplemente hacer una llamada de función, hay mucho código duplicado.widgetswitch

Text((){
  switch (selectedColor) {
    case SelectedColor.PrimaryColor:
      return 'This is the Primary Color';
    case SelectedColor.SecondaryColor:
      return 'This is the Secondary Color';
    default:
      return 'SelectedScheme Title is null';
  }
}()),
Text((){
  switch (selectedColor) {
    case SelectedColor.PrimaryColor:
      return 'This is the Primary Color';
    case SelectedColor.SecondaryColor:
      return 'This is the Secondary Color';
    default:
      return 'SelectedScheme Title is null';
  }
}()),


enum SelectedColor {
  primaryColor,
  secondColor,
}

extension SelectedColorExtension on SelectedColor {
  String get name => describeEnum(this);

  String get displayTitle {
    switch (this) {
      case SelectedColor.primaryColor:
        return 'This is the Primary Color';
      case SelectedColor.secondColor:
        return 'This is the Secondary Color';
      default:
        return 'SelectedScheme Title is null';
    }
  }
   String get displayColorChangeText {
    switch (this) {
      case SelectedColor.primaryColor:
        return 'Change to Secondary Color';
      case SelectedColor.secondColor:
        return 'Change to Primary Color';
      default:
        return 'SelectedScheme is null';
    }
  }

  String describeEnum(Object enumEntry) {
    final String description = enumEntry.toString();
    final int indexOfDot = description.indexOf('.');
    assert(indexOfDot != -1 && indexOfDot < description.length - 1);
    LogUtils().e(description.substring(indexOfDot + 1));
    return description.substring(indexOfDot + 1);
  }
   Color color() {
    switch (this) {
      case SelectedColor.primaryColor:
        return Colors.red;
      case SelectedColor.secondColor:
        return Colors.blue;
      default:
        return Colors.transparent;
    }
  }
}

Ahora, no tiene que preocuparse por esto, solo necesita extender Enume implementar un método de extensión para hacerlo todo. El uso de este método puede lograr la misma función y el código es más conciso y fácil de leer.

Flutter FoundationdescribeEnum()La función definida en enumEntry.toString()quita el nombre de la clase de enumeración del valor de retorno y devuelve solo la cadena del valor de enumeración. Proporciono una implementación alternativa personalizada que puede usar para otros Dartproyectos.

En el código de muestra, extendí un método displayTitle(), . Al llamar a displayTitle()métodos, encontrará que es significativamente más modular y conciso que IIFE, y será más fácil actualizar la enumeración para agregar nuevos valores de enumeración, y también es muy fácil agregar nuevos métodos de extensión.

enum HomeItemType {
  approval, //业务审批
  report, //数据报表
  work, //工作交流
  board, //数据看板
  feedback, //问题反馈
  announce, //公告公示
}

extension HomeItemTypeExtension on HomeItemType {

  String get name => describeEnum(this);

  String get displayTitle {
    switch (this) {
      case HomeItemType.approval:
        return '业务审批';
      case HomeItemType.report:
        return '数据报表';
      case HomeItemType.work:
        return '工作交流';
      case HomeItemType.board:
        return '数据看板';
      case HomeItemType.feedback:
        return '问题反馈';
      case HomeItemType.announce:
        return '公告公示';
      default:
        return 'Title is null';
    }
  }

  String get displayImage {
     switch (this) {
      case HomeItemType.approval:
        return 'assets/images/home_approval.png';
      case HomeItemType.report:
        return 'assets/images/home_report.png';
      case HomeItemType.work:
        return 'assets/images/home_work.png';
      case HomeItemType.board:
        return 'assets/images/home_board.png';
      case HomeItemType.feedback:
        return 'assets/images/home_feedback.png';
      case HomeItemType.announce:
        return 'assets/images/home_announce.png';
      default:
        return 'image is null';
    }
  }

  String describeEnum(Object enumEntry) {
    final String description = enumEntry.toString();
    final int indexOfDot = description.indexOf('.');
    assert(indexOfDot != -1 && indexOfDot < description.length - 1);
    LogUtils().e(description.substring(indexOfDot + 1));
    return description.substring(indexOfDot + 1);
  }
}

Supongo que te gusta

Origin blog.csdn.net/RreamigOfGirls/article/details/127241515
Recomendado
Clasificación