desire method
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)!,
);
}