Dart 中的组静态常量 Class

Group Static const in Dart Class

我有一个名为 KIcons 的图标 class。在这个 class 里面,我有两种类型的图标。一个是 Solid,另一个是 Outlined。现在我想按如下方式访问它。怎么做? 预期输出:KIcons.solid.back_arrow 这样做的原因是,当我键入 KIcons.solid 时,我应该只获得在此 grouping 下定义的 const 的列表,因为两者将具有相同和不同的图标。我该如何实现?

目前我拥有一个屋檐下的一切,命名为 solidArrowLeft accessibile as KIcons.solidArrowLeft.

代码:

class KIcons {
  // solid
  static const String solidArrowLeft = "assets/icons/solid/arrow-left.svg";
  static const String solidArrowRight = "assets/icons/solid/arrow-right.svg";
  static const String solidArrowTop = "assets/icons/solid/arrow-Top.svg";
  static const String solidArrowBottom = "assets/icons/solid/arrow-bottom.svg";
  static const String solidChevronLeft = "assets/icons/solid/chevron-left.svg";
  static const String solidChevronRight =
      "assets/icons/solid/chevron-right.svg";
  static const String solidChevronTop = "assets/icons/solid/chevron-Top.svg";
  static const String solidChevronBottom =
      "assets/icons/solid/chevron-bottom.svg";
  static const String solidArrowCircleLeft =
      "assets/icons/solid/arrow-circle-left.svg";
  static const String solidArrowCircleRight =
      "assets/icons/solid/arrow-circle-right.svg";
  static const String solidArrowCircleTop =
      "assets/icons/solid/arrow-circle-Top.svg";
  static const String solidArrowCircleBottom =
      "assets/icons/solid/arrow-circle-bottom.svg";

  // outlined
  static const String outlineArrowLeft = "assets/icons/outline/arrow-left.svg";
  static const String outlineArrowRight =
      "assets/icons/outline/arrow-right.svg";
  static const String outlineArrowTop = "assets/icons/outline/arrow-Top.svg";
  static const String outlineArrowBottom =
      "assets/icons/outline/arrow-bottom.svg";
  static const String outlineChevronLeft =
      "assets/icons/outline/chevron-left.svg";
  static const String outlineChevronRight =
      "assets/icons/outline/chevron-right.svg";
  static const String outlineChevronTop =
      "assets/icons/outline/chevron-Top.svg";
  static const String outlineChevronBottom =
      "assets/icons/outline/chevron-bottom.svg";
  static const String outlineArrowCircleLeft =
      "assets/icons/outline/arrow-circle-left.svg";
  static const String outlineArrowCircleRight =
      "assets/icons/outline/arrow-circle-right.svg";
  static const String outlineArrowCircleTop =
      "assets/icons/outline/arrow-circle-Top.svg";
  static const String outlineArrowCircleBottom =
      "assets/icons/outline/arrow-circle-bottom.svg";
}

如有帮助将不胜感激:)

是这样的吗?

class KIcons {
  // solid
  static const _KIconsSubType solid = _KIconsSubType('solid');
  
  // outlined
  static const _KIconsSubType outlined = _KIconsSubType('outlined');
}

class _KIconsSubType {
  final String arrowLeft;
  final String arrowRight;
  final String arrowTop;
  final String arrowBottom;
  final String chevronLeft;
  final String chevronRight;
  final String chevronTop;
  final String chevronBottom;
  final String arrowCircleLeft;
  final String arrowCircleRight;
  final String arrowCircleTop;
  final String arrowCircleBottom;

  const _KIconsSubType(String type)
      : arrowLeft = "assets/icons/$type/arrow-left.svg",
        arrowRight = "assets/icons/$type/arrow-right.svg",
        arrowTop = "assets/icons/$type/arrow-Top.svg",
        arrowBottom = "assets/icons/$type/arrow-bottom.svg",
        chevronLeft = "assets/icons/$type/chevron-left.svg",
        chevronRight = "assets/icons/$type/chevron-right.svg",
        chevronTop = "assets/icons/$type/chevron-Top.svg",
        chevronBottom = "assets/icons/$type/chevron-bottom.svg",
        arrowCircleLeft = "assets/icons/$type/arrow-circle-left.svg",
        arrowCircleRight = "assets/icons/$type/arrow-circle-right.svg",
        arrowCircleTop = "assets/icons/$type/arrow-circle-Top.svg",
        arrowCircleBottom = "assets/icons/$type/arrow-circle-bottom.svg";
}

示例,如果您在类型之间存在一些差异:

class KIcons {
  // solid
  static const _KIconsSolid solid = _KIconsSolid();

  // outlined
  static const _KIconsOutlined outlined = _KIconsOutlined();
}

class _KIconsSubTypeCommon {
  final String arrowLeft;
  final String arrowRight;
  final String arrowTop;
  final String arrowBottom;
  final String chevronLeft;
  final String chevronRight;
  // final String chevronTop;
  final String chevronBottom;
  final String arrowCircleLeft;
  final String arrowCircleRight;
  final String arrowCircleTop;
  final String arrowCircleBottom;

  const _KIconsSubTypeCommon(String type)
      : arrowLeft = "assets/icons/$type/arrow-left.svg",
        arrowRight = "assets/icons/$type/arrow-right.svg",
        arrowTop = "assets/icons/$type/arrow-Top.svg",
        arrowBottom = "assets/icons/$type/arrow-bottom.svg",
        chevronLeft = "assets/icons/$type/chevron-left.svg",
        chevronRight = "assets/icons/$type/chevron-right.svg",
        // chevronTop = "assets/icons/solid/chevron-Top.svg",
        chevronBottom = "assets/icons/$type/chevron-bottom.svg",
        arrowCircleLeft = "assets/icons/$type/arrow-circle-left.svg",
        arrowCircleRight = "assets/icons/$type/arrow-circle-right.svg",
        arrowCircleTop = "assets/icons/$type/arrow-circle-Top.svg",
        arrowCircleBottom = "assets/icons/$type/arrow-circle-bottom.svg";
}

class _KIconsSolid extends _KIconsSubTypeCommon {
  final String chevronTop;

  const _KIconsSolid()
      : chevronTop = "assets/icons/solid/chevron-Top.svg",
        super("solid");
}

class _KIconsOutlined extends _KIconsSubTypeCommon {
  const _KIconsOutlined() : super("outlined");
}