Apply a Material 3 seed-green palette and rounded components across the home, inventory, quick-add, quantity picker and variety-detail screens. The full-screen photo viewer can now set any photo as the cover (via attachment sort order) and delete after confirmation. Lot forms and packaging surface as choice chips. Extract About out of Settings into its own screen (app version via package_info_plus, website link). Add es/en strings for the new lot types, presentation, home tagline and About. Update Seedees v2 mockups.
53 lines
2.8 KiB
Dart
53 lines
2.8 KiB
Dart
import 'package:commons_core/commons_core.dart';
|
|
|
|
import '../i18n/strings.g.dart';
|
|
|
|
/// Singular + plural label for a [QuantityKind]. For uncountable *vibe* kinds
|
|
/// (a few, some…) both are the same word.
|
|
(String, String) _unit(Translations t, QuantityKind kind) => switch (kind) {
|
|
QuantityKind.aFew => (t.unit.aFew, t.unit.aFew),
|
|
QuantityKind.some => (t.unit.some, t.unit.some),
|
|
QuantityKind.plenty => (t.unit.plenty, t.unit.plenty),
|
|
QuantityKind.pinch => (t.unit.pinch, t.unit.pinch),
|
|
QuantityKind.handful => (t.unit.handful.singular, t.unit.handful.plural),
|
|
QuantityKind.teaspoon => (t.unit.teaspoon.singular, t.unit.teaspoon.plural),
|
|
QuantityKind.spoon => (t.unit.spoon.singular, t.unit.spoon.plural),
|
|
QuantityKind.cup => (t.unit.cup.singular, t.unit.cup.plural),
|
|
QuantityKind.jar => (t.unit.jar.singular, t.unit.jar.plural),
|
|
QuantityKind.sack => (t.unit.sack.singular, t.unit.sack.plural),
|
|
QuantityKind.packet => (t.unit.packet.singular, t.unit.packet.plural),
|
|
QuantityKind.cob => (t.unit.cob.singular, t.unit.cob.plural),
|
|
QuantityKind.pod => (t.unit.pod.singular, t.unit.pod.plural),
|
|
QuantityKind.ear => (t.unit.ear.singular, t.unit.ear.plural),
|
|
QuantityKind.head => (t.unit.head.singular, t.unit.head.plural),
|
|
QuantityKind.fruit => (t.unit.fruit.singular, t.unit.fruit.plural),
|
|
QuantityKind.bulb => (t.unit.bulb.singular, t.unit.bulb.plural),
|
|
QuantityKind.tuber => (t.unit.tuber.singular, t.unit.tuber.plural),
|
|
QuantityKind.seedHead => (t.unit.seedHead.singular, t.unit.seedHead.plural),
|
|
QuantityKind.bunch => (t.unit.bunch.singular, t.unit.bunch.plural),
|
|
QuantityKind.plant => (t.unit.plant.singular, t.unit.plant.plural),
|
|
QuantityKind.pot => (t.unit.pot.singular, t.unit.pot.plural),
|
|
QuantityKind.tray => (t.unit.tray.singular, t.unit.tray.plural),
|
|
QuantityKind.seedling => (t.unit.seedling.singular, t.unit.seedling.plural),
|
|
QuantityKind.tree => (t.unit.tree.singular, t.unit.tree.plural),
|
|
QuantityKind.cutting => (t.unit.cutting.singular, t.unit.cutting.plural),
|
|
QuantityKind.grams => (t.unit.grams.singular, t.unit.grams.plural),
|
|
QuantityKind.count => (t.unit.count.singular, t.unit.count.plural),
|
|
};
|
|
|
|
/// The unit's singular name — for chips/scale items ("cob", "packet").
|
|
String unitLabel(Translations t, QuantityKind kind) => _unit(t, kind).$1;
|
|
|
|
/// A full, human quantity: "3 cobs", "2 packets", "a few".
|
|
String quantityDisplay(Translations t, Quantity q) {
|
|
final n = q.count;
|
|
final (one, other) = _unit(t, q.kind);
|
|
if (!q.kind.countable || n == null) {
|
|
// Vibe amount, or a countable unit with no number → bare unit name.
|
|
return (n != null && n != 1) ? other : one;
|
|
}
|
|
return '${_formatCount(n)} ${n == 1 ? one : other}';
|
|
}
|
|
|
|
String _formatCount(num n) =>
|
|
n == n.roundToDouble() ? n.toInt().toString() : n.toString();
|