Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 8 additions & 94 deletions packages/mix/lib/src/modifiers/align_modifier.dart
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:mix_annotations/mix_annotations.dart';

import '../core/helpers.dart';
import '../core/widget_modifier.dart';
import '../core/prop.dart';
import '../core/style.dart';

part 'align_modifier.g.dart';

/// Modifier that aligns its child within the available space.
///
/// Wraps the child in an [Align] widget with the specified alignment and size factors.
@MixableModifier()
final class AlignModifier extends WidgetModifier<AlignModifier>
with Diagnosticable {
with Diagnosticable, _$AlignModifierMethods {
@override
final AlignmentGeometry alignment;
@override
final double? widthFactor;
@override
final double? heightFactor;

const AlignModifier({
Expand All @@ -21,42 +28,6 @@ final class AlignModifier extends WidgetModifier<AlignModifier>
this.heightFactor,
}) : alignment = alignment ?? Alignment.center;

@override
AlignModifier copyWith({
AlignmentGeometry? alignment,
double? widthFactor,
double? heightFactor,
}) {
return AlignModifier(
alignment: alignment ?? this.alignment,
widthFactor: widthFactor ?? this.widthFactor,
heightFactor: heightFactor ?? this.heightFactor,
);
}

@override
AlignModifier lerp(AlignModifier? other, double t) {
if (other == null) return this;

return AlignModifier(
alignment: MixOps.lerp(alignment, other.alignment, t)!,
widthFactor: MixOps.lerp(widthFactor, other.widthFactor, t),
heightFactor: MixOps.lerp(heightFactor, other.heightFactor, t),
);
}

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties
..add(DiagnosticsProperty('alignment', alignment))
..add(DoubleProperty('widthFactor', widthFactor))
..add(DoubleProperty('heightFactor', heightFactor));
}

@override
List<Object?> get props => [alignment, widthFactor, heightFactor];

@override
Widget build(Widget child) {
return Align(
Expand All @@ -67,60 +38,3 @@ final class AlignModifier extends WidgetModifier<AlignModifier>
);
}
}

/// Mix class for applying alignment modifications.
///
/// This class allows for mixing and resolving alignment properties.
class AlignModifierMix extends ModifierMix<AlignModifier> with Diagnosticable {
final Prop<AlignmentGeometry>? alignment;
final Prop<double>? widthFactor;
final Prop<double>? heightFactor;

const AlignModifierMix.create({
this.alignment,
this.widthFactor,
this.heightFactor,
});

AlignModifierMix({
AlignmentGeometry? alignment,
double? widthFactor,
double? heightFactor,
}) : this.create(
alignment: Prop.maybe(alignment),
widthFactor: Prop.maybe(widthFactor),
heightFactor: Prop.maybe(heightFactor),
);

@override
AlignModifier resolve(BuildContext context) {
return AlignModifier(
alignment: MixOps.resolve(context, alignment),
widthFactor: MixOps.resolve(context, widthFactor),
heightFactor: MixOps.resolve(context, heightFactor),
);
}

@override
AlignModifierMix merge(AlignModifierMix? other) {
if (other == null) return this;

return AlignModifierMix.create(
alignment: MixOps.merge(alignment, other.alignment),
widthFactor: MixOps.merge(widthFactor, other.widthFactor),
heightFactor: MixOps.merge(heightFactor, other.heightFactor),
);
}

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties
..add(DiagnosticsProperty('alignment', alignment))
..add(DiagnosticsProperty('widthFactor', widthFactor))
..add(DiagnosticsProperty('heightFactor', heightFactor));
}

@override
List<Object?> get props => [alignment, widthFactor, heightFactor];
}
103 changes: 103 additions & 0 deletions packages/mix/lib/src/modifiers/align_modifier.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

64 changes: 6 additions & 58 deletions packages/mix/lib/src/modifiers/aspect_ratio_modifier.dart
Original file line number Diff line number Diff line change
@@ -1,80 +1,28 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:mix_annotations/mix_annotations.dart';

import '../core/helpers.dart';
import '../core/widget_modifier.dart';
import '../core/prop.dart';
import '../core/style.dart';

part 'aspect_ratio_modifier.g.dart';

/// Modifier that constrains its child to a specific aspect ratio.
///
/// Wraps the child in an [AspectRatio] widget with the specified ratio.
@MixableModifier()
final class AspectRatioModifier extends WidgetModifier<AspectRatioModifier>
with Diagnosticable {
with Diagnosticable, _$AspectRatioModifierMethods {
@override
final double aspectRatio;

const AspectRatioModifier([double? aspectRatio])
: aspectRatio = aspectRatio ?? 1.0;

@override
AspectRatioModifier copyWith({double? aspectRatio}) {
return AspectRatioModifier(aspectRatio ?? this.aspectRatio);
}

@override
AspectRatioModifier lerp(AspectRatioModifier? other, double t) {
if (other == null) return this;

return AspectRatioModifier(MixOps.lerp(aspectRatio, other.aspectRatio, t)!);
}

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(DoubleProperty('aspectRatio', aspectRatio));
}

@override
List<Object?> get props => [aspectRatio];

@override
Widget build(Widget child) {
return AspectRatio(aspectRatio: aspectRatio, child: child);
}
}

/// Mix class for applying aspect ratio modifications.
///
/// This class allows for mixing and resolving aspect ratio properties.
class AspectRatioModifierMix extends ModifierMix<AspectRatioModifier>
with Diagnosticable {
final Prop<double>? aspectRatio;

const AspectRatioModifierMix.create({this.aspectRatio});

AspectRatioModifierMix({double? aspectRatio})
: this.create(aspectRatio: Prop.maybe(aspectRatio));

@override
AspectRatioModifier resolve(BuildContext context) {
return AspectRatioModifier(MixOps.resolve(context, aspectRatio));
}

@override
AspectRatioModifierMix merge(AspectRatioModifierMix? other) {
if (other == null) return this;

return AspectRatioModifierMix.create(
aspectRatio: MixOps.merge(aspectRatio, other.aspectRatio),
);
}

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(DiagnosticsProperty('aspectRatio', aspectRatio));
}

@override
List<Object?> get props => [aspectRatio];
}
66 changes: 66 additions & 0 deletions packages/mix/lib/src/modifiers/aspect_ratio_modifier.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading