Skip to content

Commit

Permalink
Merge pull request #80 from adsonpleal/add-custom-direction
Browse files Browse the repository at this point in the history
Add custom direction
  • Loading branch information
victoreronmosele committed Apr 9, 2024
2 parents ec14776 + e6f4bdc commit 08fed76
Show file tree
Hide file tree
Showing 19 changed files with 906 additions and 203 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ Flutter Gradient Generator is a web app that generates linear, radial and sweep
- bottom-left
- bottom-center
- bottom-right
- custom

4. **Choose the gradient colors.**

Expand Down
5 changes: 5 additions & 0 deletions lib/data/app_strings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ class AppStrings {
static const colors = 'Colors';
static const colorsAndStops = 'Colors & Stops';
static const random = 'Random';
static const custom = 'Custom';
static const direction = 'Direction';
static const tapToEdit = 'Tap to edit';
static const enterInPercentage = 'Enter in %';
Expand All @@ -25,6 +26,10 @@ class AppStrings {
static const giveFeedback = 'Give Feedback';
static const viewSourceCodeOnGitHub = 'View Source Code On GitHub';
static const downloadGradientAsImage = 'Download Gradient As Image';
static const alignmentX = 'X:';
static const alignmentY = 'Y:';
static const alignment = 'Alignment:';
static const endAlignment = 'End Alignment:';

/// URLs
static const githubUrl =
Expand Down
82 changes: 72 additions & 10 deletions lib/enums/gradient_direction.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,73 @@
enum GradientDirection {
topLeft,
topCenter,
topRight,
centerLeft,
center,
centerRight,
bottomLeft,
bottomCenter,
bottomRight
import 'package:flutter/material.dart';

sealed class GradientDirection {
const GradientDirection();

static const topLeft = GradientDirectionTopLeft._();
static const topCenter = GradientDirectionTopCenter._();
static const topRight = GradientDirectionTopRight._();
static const centerLeft = GradientDirectionCenterLeft._();
static const center = GradientDirectionCenter._();
static const centerRight = GradientDirectionCenterRight._();
static const bottomLeft = GradientDirectionBottomLeft._();
static const bottomCenter = GradientDirectionBottomCenter._();
static const bottomRight = GradientDirectionBottomRight._();
}

class GradientDirectionTopLeft extends GradientDirection {
const GradientDirectionTopLeft._();
}

class GradientDirectionTopCenter extends GradientDirection {
const GradientDirectionTopCenter._();
}

class GradientDirectionTopRight extends GradientDirection {
const GradientDirectionTopRight._();
}

class GradientDirectionCenterLeft extends GradientDirection {
const GradientDirectionCenterLeft._();
}

class GradientDirectionCenter extends GradientDirection {
const GradientDirectionCenter._();
}

class GradientDirectionCenterRight extends GradientDirection {
const GradientDirectionCenterRight._();
}

class GradientDirectionBottomLeft extends GradientDirection {
const GradientDirectionBottomLeft._();
}

class GradientDirectionBottomCenter extends GradientDirection {
const GradientDirectionBottomCenter._();
}

class GradientDirectionBottomRight extends GradientDirection {
const GradientDirectionBottomRight._();
}

class GradientDirectionCustom extends GradientDirection {
const GradientDirectionCustom({
this.alignment = Alignment.center,
this.endAlignment = Alignment.center,
});

final Alignment alignment;
final Alignment endAlignment;

@override
bool operator ==(Object other) {
if (identical(this, other)) return true;

return other is GradientDirectionCustom &&
other.alignment == alignment &&
other.endAlignment == endAlignment;
}

@override
int get hashCode => alignment.hashCode ^ endAlignment.hashCode;
}
3 changes: 3 additions & 0 deletions lib/models/abstract_gradient.dart
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ abstract class AbstractGradient {
///Returns the direction of the gradient
GradientDirection getGradientDirection() => _gradientDirection;

///Converts the current gradient direction to [GradientDirectionCustom]
GradientDirectionCustom gradientDirectionAsCustom();

/// Returns the style of the gradient
GradientStyle getGradientStyle();

Expand Down
97 changes: 31 additions & 66 deletions lib/models/linear_style_gradient.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,75 +24,40 @@ class LinearStyleGradient extends AbstractGradient {
''';

@visibleForTesting
Alignment get beginAlignment {
Alignment alignment;
switch (getGradientDirection()) {
case GradientDirection.topLeft:
alignment = Alignment.topLeft;
break;
case GradientDirection.topCenter:
alignment = Alignment.topCenter;
break;
case GradientDirection.topRight:
alignment = Alignment.topRight;
break;
case GradientDirection.centerLeft:
alignment = Alignment.centerLeft;
break;
case GradientDirection.center:
alignment = Alignment.center;
break;
case GradientDirection.centerRight:
alignment = Alignment.centerRight;
break;
case GradientDirection.bottomLeft:
alignment = Alignment.bottomLeft;
break;
case GradientDirection.bottomCenter:
alignment = Alignment.bottomCenter;
break;
case GradientDirection.bottomRight:
alignment = Alignment.bottomRight;
break;
}

return alignment;
}
Alignment get beginAlignment => switch (getGradientDirection()) {
GradientDirectionTopLeft() => Alignment.topLeft,
GradientDirectionTopCenter() => Alignment.topCenter,
GradientDirectionTopRight() => Alignment.topRight,
GradientDirectionCenterLeft() => Alignment.centerLeft,
GradientDirectionCenter() => Alignment.center,
GradientDirectionCenterRight() => Alignment.centerRight,
GradientDirectionBottomLeft() => Alignment.bottomLeft,
GradientDirectionBottomCenter() => Alignment.bottomCenter,
GradientDirectionBottomRight() => Alignment.bottomRight,
GradientDirectionCustom(alignment: final alignment) => alignment,
};

@visibleForTesting
Alignment get endAlignment {
Alignment alignment;
Alignment get endAlignment => switch (getGradientDirection()) {
GradientDirectionTopLeft() => Alignment.bottomRight,
GradientDirectionTopCenter() => Alignment.bottomCenter,
GradientDirectionTopRight() => Alignment.bottomLeft,
GradientDirectionCenterLeft() => Alignment.centerRight,
GradientDirectionCenter() => Alignment.center,
GradientDirectionCenterRight() => Alignment.centerLeft,
GradientDirectionBottomLeft() => Alignment.topRight,
GradientDirectionBottomCenter() => Alignment.topCenter,
GradientDirectionBottomRight() => Alignment.topLeft,
GradientDirectionCustom(endAlignment: final endAlignment) =>
endAlignment,
};

switch (getGradientDirection()) {
case GradientDirection.topLeft:
alignment = Alignment.bottomRight;
break;
case GradientDirection.topCenter:
alignment = Alignment.bottomCenter;
break;
case GradientDirection.topRight:
alignment = Alignment.bottomLeft;
break;
case GradientDirection.centerLeft:
alignment = Alignment.centerRight;
break;
case GradientDirection.center:
alignment = Alignment.center;
break;
case GradientDirection.centerRight:
alignment = Alignment.centerLeft;
break;
case GradientDirection.bottomLeft:
alignment = Alignment.topRight;
break;
case GradientDirection.bottomCenter:
alignment = Alignment.topCenter;
break;
case GradientDirection.bottomRight:
alignment = Alignment.topLeft;
break;
}
return alignment;
@override
GradientDirectionCustom gradientDirectionAsCustom() {
return GradientDirectionCustom(
alignment: beginAlignment,
endAlignment: endAlignment,
);
}

@override
Expand Down
50 changes: 18 additions & 32 deletions lib/models/radial_style_gradient.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,39 +24,25 @@ class RadialStyleGradient extends AbstractGradient {

@visibleForTesting
Alignment get centerAlignment {
Alignment alignment;

switch (getGradientDirection()) {
case GradientDirection.topLeft:
alignment = Alignment.topLeft;
break;
case GradientDirection.topCenter:
alignment = Alignment.topCenter;
break;
case GradientDirection.topRight:
alignment = Alignment.topRight;
break;
case GradientDirection.centerLeft:
alignment = Alignment.centerLeft;
break;
case GradientDirection.center:
alignment = Alignment.center;
break;
case GradientDirection.centerRight:
alignment = Alignment.centerRight;
break;
case GradientDirection.bottomLeft:
alignment = Alignment.bottomLeft;
break;
case GradientDirection.bottomCenter:
alignment = Alignment.bottomCenter;
break;
case GradientDirection.bottomRight:
alignment = Alignment.bottomRight;
break;
}
return switch (getGradientDirection()) {
GradientDirectionTopLeft() => Alignment.topLeft,
GradientDirectionTopCenter() => Alignment.topCenter,
GradientDirectionTopRight() => Alignment.topRight,
GradientDirectionCenterLeft() => Alignment.centerLeft,
GradientDirectionCenter() => Alignment.center,
GradientDirectionCenterRight() => Alignment.centerRight,
GradientDirectionBottomLeft() => Alignment.bottomLeft,
GradientDirectionBottomCenter() => Alignment.bottomCenter,
GradientDirectionBottomRight() => Alignment.bottomRight,
GradientDirectionCustom(alignment: final alignment) => alignment,
};
}

return alignment;
@override
GradientDirectionCustom gradientDirectionAsCustom() {
return GradientDirectionCustom(
alignment: centerAlignment,
);
}

@override
Expand Down
50 changes: 18 additions & 32 deletions lib/models/sweep_style_gradient.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,39 +24,25 @@ class SweepStyleGradient extends AbstractGradient {

@visibleForTesting
Alignment get centerAlignment {
Alignment alignment;

switch (getGradientDirection()) {
case GradientDirection.topLeft:
alignment = Alignment.topLeft;
break;
case GradientDirection.topCenter:
alignment = Alignment.topCenter;
break;
case GradientDirection.topRight:
alignment = Alignment.topRight;
break;
case GradientDirection.centerLeft:
alignment = Alignment.centerLeft;
break;
case GradientDirection.center:
alignment = Alignment.center;
break;
case GradientDirection.centerRight:
alignment = Alignment.centerRight;
break;
case GradientDirection.bottomLeft:
alignment = Alignment.bottomLeft;
break;
case GradientDirection.bottomCenter:
alignment = Alignment.bottomCenter;
break;
case GradientDirection.bottomRight:
alignment = Alignment.bottomRight;
break;
}
return switch (getGradientDirection()) {
GradientDirectionTopLeft() => Alignment.topLeft,
GradientDirectionTopCenter() => Alignment.topCenter,
GradientDirectionTopRight() => Alignment.topRight,
GradientDirectionCenterLeft() => Alignment.centerLeft,
GradientDirectionCenter() => Alignment.center,
GradientDirectionCenterRight() => Alignment.centerRight,
GradientDirectionBottomLeft() => Alignment.bottomLeft,
GradientDirectionBottomCenter() => Alignment.bottomCenter,
GradientDirectionBottomRight() => Alignment.bottomRight,
GradientDirectionCustom(alignment: final alignment) => alignment,
};
}

return alignment;
@override
GradientDirectionCustom gradientDirectionAsCustom() {
return GradientDirectionCustom(
alignment: centerAlignment,
);
}

@override
Expand Down
Loading

0 comments on commit 08fed76

Please sign in to comment.