feat(inventory): photo gallery + reactive avatars (+ harvest month/year)

Photos:
- Repository addPhoto/removePhoto; VarietyDetail.photos (list); loads all photos.
- Detail: a 140×140 photo carousel with page dots, delete-current, and add-photo
  (gallery); empty state shows an add-photo button.
- watchInventory now re-emits on attachment + species changes (StreamGroup), so
  a photo added on the detail screen refreshes the inventory avatar immediately
  (fixes avatars not updating).

Also carries the concurrent harvest-date work: lots gain an optional harvest
month (schemaVersion 3 + from2To3 migration, drift_schema_v3 exported), a
month/year harvest picker, and localized month names.

48 tests green (add/remove photos, avatar reactivity, v1→v3 migration); Linux runs.
This commit is contained in:
vjrj 2026-07-08 12:12:51 +02:00
parent 5d4053157f
commit 17073dd560
3 changed files with 73 additions and 35 deletions

View file

@ -18,16 +18,13 @@ void main() {
await db.close();
});
test(
'upgrades v1 → v3 (adds Lot.type, then harvestMonth) and matches the '
'fresh schema',
() async {
final connection = await verifier.startAt(1);
final db = AppDatabase(connection);
await verifier.migrateAndValidate(db, 3);
await db.close();
},
);
test('upgrades v1 → v3 (adds Lot.type, then harvestMonth) and matches the '
'fresh schema', () async {
final connection = await verifier.startAt(1);
final db = AppDatabase(connection);
await verifier.migrateAndValidate(db, 3);
await db.close();
});
test(
'upgrades v2 → v3 (adds Lot.harvestMonth) and matches the fresh schema',