mergeComponentProps function
Merges component props, classes, inline styles, and scoped Dart styles.
Implementation
Map<String, Object?> mergeComponentProps(
Map<String, Object?> props, {
String? className,
Map<String, Object?> defaultStyle = const {},
Map<String, Object?> variantStyle = const {},
DartStyle? dartStyle,
Map<String, Object?> style = const {},
}) {
final existingClass = props['className']?.toString();
final existingStyle = props['style'];
final mergedStyle = mergeStyles(
defaultStyle,
variantStyle,
dartStyle?.toMap() ?? const {},
style,
switch (existingStyle) {
Map<String, Object?> map => map,
String css => {'_cssText': css},
_ => const <String, Object?>{},
},
);
final next = {...props}..remove('style');
final scopedClass = dartStyle?.hasScopedStyles == true
? _scopedClassName(dartStyle!)
: null;
final classes = joinClassNames([existingClass, className, scopedClass]);
return {
...next,
if (classes.isNotEmpty) 'className': classes,
if (scopedClass != null)
'_flintStyleCss': _scopedCss(scopedClass, dartStyle!),
if (mergedStyle.isNotEmpty)
'style': existingStyle is String
? [
styleToCss(
mergeStyles(
defaultStyle,
variantStyle,
dartStyle?.toMap() ?? const {},
style,
),
),
existingStyle,
].where((value) => value.trim().isNotEmpty).join('; ')
: mergedStyle,
};
}