desire method

Container desire(
  1. List desirable
)

Implementation

Container desire(List desirable) {
  final desires = [
    this,
    Container(
      decoration: const BoxDecoration(),
      foregroundDecoration: const BoxDecoration(),
      constraints: const BoxConstraints(),
    ),
    ...desirable.map((e) {
      if (e is Container) return e;
      if (e is BoxDecoration) return Container(decoration: e);
      if (e is BoxConstraints) return Container(constraints: e);

      return null;
    }).whereType<Container>(),
  ].toList();

  return Container(
    child: child,
    alignment:
        mapDesire<AlignmentGeometry, Container>(desires, (e) => e.alignment),
    padding:
        mapDesire<EdgeInsetsGeometry, Container>(desires, (e) => e.padding),
    color: mapDesire<Color, Container>(desires, (e) => e.color),
    decoration: desires
        .map((e) => e.decoration)
        .whereType<BoxDecoration>()
        .reduce((acc, e) => _mergeBoxDecoration(acc, e)),
    foregroundDecoration: desires
        .map((e) => e.foregroundDecoration)
        .whereType<BoxDecoration>()
        .reduce((acc, e) => _mergeBoxDecoration(acc, e)),
    width: desires.map((e) {
      final c = e.constraints;
      if (c == null || c.minWidth != c.maxWidth) return null;
      return c.maxWidth;
    }).lastWhere((e) => e is double, orElse: () => null),
    height: desires.map((e) {
      final c = e.constraints;
      if (c == null || c.minHeight != c.maxHeight) return null;
      return c.maxHeight;
    }).lastWhere((e) => e is double, orElse: () => null),
    constraints: desires
        .map((e) => e.constraints)
        .whereType<BoxConstraints>()
        .reduce((acc, e) => _mergeConstraints(acc, e)),
    margin:
        mapDesire<EdgeInsetsGeometry, Container>(desires, (e) => e.margin),
    transform: mapDesire<Matrix4, Container>(desires, (e) => e.transform),
    transformAlignment: mapDesire<AlignmentGeometry, Container>(
        desires, (e) => e.transformAlignment),
    clipBehavior: mapDesire<Clip, Container>(
        desires, (e) => e.clipBehavior, Clip.none)!,
  );
}