master #81

Closed
malo wants to merge 322 commits from master into feat/bloc_layout/new-package
2 changed files with 65 additions and 80 deletions
Showing only changes of commit 93cc5058d1 - Show all commits

View File

@ -66,84 +66,17 @@ class CardWrapper extends StatelessWidget {
child: child, child: child,
); );
Gradient? _cardGradient(BuildContext context) {
if (backgroundColors != null && backgroundColors!.isGradient) {
return LinearGradientHelper.fromMultiColor(backgroundColors!);
} else {
final extensionCardColor =
Theme.of(context).extension<CardThemeExtension>();
if (extensionCardColor != null &&
extensionCardColor.backgroundColors != null &&
extensionCardColor.backgroundColors!.isGradient) {
return LinearGradient(
colors: extensionCardColor.backgroundColors!.colors,
);
}
}
return null;
}
Color? _cardColor(BuildContext context) {
if (backgroundColors != null && backgroundColors!.isColor) {
return backgroundColors!.color;
} else {
final extensionCardColor =
Theme.of(context).extension<CardThemeExtension>();
if (extensionCardColor != null &&
extensionCardColor.backgroundColors != null) {
return extensionCardColor.backgroundColors!.color;
}
}
return Theme.of(context).cardColor;
}
BoxBorder? _boxBorder(BuildContext context) {
if (borderColors != null) {
if (borderColors!.isGradient) {
return GradientBoxBorder(
gradient: LinearGradientHelper.fromMultiColor(borderColors!),
);
} else if (borderColors!.isColor) {
return Border.all(
color: borderColors!.color,
);
}
} else {
final extensionCardColor =
Theme.of(context).extension<CardThemeExtension>();
if (extensionCardColor != null &&
extensionCardColor.borderColors != null) {
if (extensionCardColor.borderColors!.isGradient) {
return GradientBoxBorder(
gradient: LinearGradient(
colors: extensionCardColor.borderColors!.colors,
),
);
} else if (extensionCardColor.backgroundColors!.colors.isNotEmpty) {
return Border.all(
color: extensionCardColor.backgroundColors!.color,
);
}
}
}
return null;
}
List<BoxShadow> _shadow(BuildContext context) { List<BoxShadow> _shadow(BuildContext context) {
final shadows = List<BoxShadow>.empty(growable: true); final themeShadow = ThemeHelper.getThemeElement<BoxShadow, BoxShadow>(
if (shadow != null) { [
shadows.add(shadow!); shadow,
} else { Theme.of(context).extension<CardThemeExtension>()?.shadowColor,
final extensionCardColor = ],
Theme.of(context).extension<CardThemeExtension>(); valueValidator: (shadow) => shadow != null,
if (extensionCardColor != null && transform: (shadow) => shadow,
extensionCardColor.shadowColor != null) { defaultValue: null,
shadows.add(extensionCardColor.shadowColor!); );
} return (themeShadow != null) ? [themeShadow] : [];
}
return shadows;
} }
@override @override
@ -152,9 +85,53 @@ class CardWrapper extends StatelessWidget {
key: _key, key: _key,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: const BorderRadius.all(Radius.circular(12)), borderRadius: const BorderRadius.all(Radius.circular(12)),
gradient: _cardGradient(context), gradient: ThemeHelper.getThemeElement<MultiColor, Gradient>(
color: _cardColor(context), [
border: _boxBorder(context), backgroundColors,
Theme.of(context)
.extension<CardThemeExtension>()
?.backgroundColors,
],
valueValidator: (multiColor) =>
multiColor != null && multiColor.isGradient,
transform: (multiColor) =>
LinearGradientHelper.fromMultiColor(multiColor!),
defaultValue: null,
),
color: ThemeHelper.getThemeElement<MultiColor, Color>(
[
backgroundColors,
Theme.of(context)
.extension<CardThemeExtension>()
?.backgroundColors,
],
valueValidator: (multiColor) =>
multiColor != null && multiColor.isColor,
transform: (multiColor) => multiColor?.color,
defaultValue: Theme.of(context).cardColor,
),
border: ThemeHelper.getThemeElement<MultiColor, BoxBorder>(
[
borderColors,
Theme.of(context).extension<CardThemeExtension>()?.borderColors,
Theme.of(context)
.extension<CardThemeExtension>()
?.backgroundColors,
],
valueValidator: (multiColor) =>
multiColor != null && multiColor.isColor,
transform: (multiColor) {
if (multiColor!.isGradient) {
return GradientBoxBorder(
gradient: LinearGradientHelper.fromMultiColor(multiColor),
);
}
return Border.all(
color: multiColor.color,
);
},
defaultValue: null,
),
boxShadow: _shadow(context), boxShadow: _shadow(context),
), ),
child: (minSize != null && maxSize != null) child: (minSize != null && maxSize != null)

View File

@ -14,7 +14,15 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with super program. If not, see <https://www.gnu.org/licenses/>. // along with super program. If not, see <https://www.gnu.org/licenses/>.
/// A helper class for getting theme elements.
abstract class ThemeHelper { abstract class ThemeHelper {
/// Gets a theme element from a list of styles.
/// Styles are checked in order, and the first one that passes the
/// [valueValidator] is returned.
/// If no style passes the [valueValidator], the [defaultValue] is returned.
/// If [styles] is null or empty, the [defaultValue] is returned.
/// Style elements are transformed using the [transform] function.
static T? getThemeElement<P, T>( static T? getThemeElement<P, T>(
List<P?>? styles, { List<P?>? styles, {
required T? Function(P?)? transform, required T? Function(P?)? transform,