2026-04-15 09:26:40 -05:00
|
|
|
import 'package:flutter/material.dart';
|
2026-08-10 14:12:45 -07:00
|
|
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
2026-04-15 09:26:40 -05:00
|
|
|
|
2026-08-10 14:12:45 -07:00
|
|
|
part 'aspect_ratios.freezed.dart';
|
2026-07-07 12:05:50 -05:00
|
|
|
|
2026-08-10 14:12:45 -07:00
|
|
|
@freezed
|
|
|
|
|
abstract class CropAspectRatio with _$CropAspectRatio {
|
|
|
|
|
const CropAspectRatio._();
|
2026-07-07 12:05:50 -05:00
|
|
|
|
2026-08-10 14:12:45 -07:00
|
|
|
const factory CropAspectRatio({int? numerator, int? denominator, String? customLabel, IconData? icon}) =
|
|
|
|
|
_CropAspectRatio;
|
2026-07-07 12:05:50 -05:00
|
|
|
|
|
|
|
|
static const free = CropAspectRatio(customLabel: "Free", icon: Icons.crop_free);
|
|
|
|
|
static const original = CropAspectRatio(customLabel: "Original", icon: Icons.crop_original);
|
|
|
|
|
|
|
|
|
|
String get label {
|
|
|
|
|
return customLabel ?? (numerator != null && denominator != null ? '$numerator:$denominator' : 'Free');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool get hasFlippedVariant => numerator != denominator;
|
|
|
|
|
double? get ratio => (numerator != null && denominator != null) ? numerator! / denominator! : null;
|
|
|
|
|
|
|
|
|
|
CropAspectRatio get flipped {
|
|
|
|
|
return CropAspectRatio(numerator: denominator, denominator: numerator, customLabel: customLabel, icon: icon);
|
|
|
|
|
}
|
2026-04-15 09:26:40 -05:00
|
|
|
}
|
2026-07-07 12:05:50 -05:00
|
|
|
|
2026-07-30 01:56:46 -07:00
|
|
|
const aspectRatioFree = CropAspectRatio.free;
|
|
|
|
|
const aspectRatioOriginal = CropAspectRatio.original;
|
2026-07-07 12:05:50 -05:00
|
|
|
|
|
|
|
|
final aspectRatioPresets = [
|
|
|
|
|
CropAspectRatio.free,
|
|
|
|
|
CropAspectRatio.original,
|
|
|
|
|
|
|
|
|
|
const CropAspectRatio(numerator: 1, denominator: 1),
|
|
|
|
|
|
|
|
|
|
// lanscape
|
|
|
|
|
const CropAspectRatio(numerator: 16, denominator: 9),
|
|
|
|
|
const CropAspectRatio(numerator: 3, denominator: 2),
|
|
|
|
|
const CropAspectRatio(numerator: 7, denominator: 5),
|
|
|
|
|
const CropAspectRatio(numerator: 4, denominator: 3),
|
|
|
|
|
|
|
|
|
|
// portrait
|
|
|
|
|
const CropAspectRatio(numerator: 16, denominator: 9).flipped,
|
|
|
|
|
const CropAspectRatio(numerator: 3, denominator: 2).flipped,
|
|
|
|
|
const CropAspectRatio(numerator: 7, denominator: 5).flipped,
|
|
|
|
|
const CropAspectRatio(numerator: 4, denominator: 3).flipped,
|
|
|
|
|
];
|