Add Flutter companion app skeleton with local meal logging
Milestone 1 of the diet-app-as-wise-balloon plan: a phone-native way to
log meals away from the PC, sharing the exact on-disk JSON shape
diet_guard already uses (same field names, no translation layer).
- lib/models/: 1:1 Dart mirrors of the Python dataclasses (Nutrition,
FoodEntry, MealItem, FoodBankRecord, Slot), including the per-100g/
amount-eaten portion scaling that matches _resolve.resolve_nutrition's
semantics exactly.
- lib/services/log_storage_service.dart: plain-JSON persistence to
food_log.json's exact shape (no sqflite -- the canonical format
already is this JSON).
- lib/services/foodbank_service.dart: ports _foodbank.py's upsert/fuzzy
search logic for autocomplete.
- lib/screens/: log_meal_screen.dart (single-item logging) and
meal_builder_screen.dart (composite multi-item meals, logging full
per-component macros via the new components field).
Verified end-to-end on a physical device (BL9000): built, installed,
logged a real meal through the UI. 77 Flutter tests passing, `flutter
analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:22:42 +02:00
|
|
|
# Generated by pub
|
|
|
|
|
# See https://dart.dev/tools/pub/glossary#lockfile
|
|
|
|
|
packages:
|
|
|
|
|
args:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: args
|
|
|
|
|
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.7.0"
|
|
|
|
|
async:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: async
|
|
|
|
|
sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.13.1"
|
|
|
|
|
boolean_selector:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: boolean_selector
|
|
|
|
|
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.2"
|
|
|
|
|
characters:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: characters
|
|
|
|
|
sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.4.1"
|
|
|
|
|
clock:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: clock
|
|
|
|
|
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.2"
|
|
|
|
|
code_assets:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: code_assets
|
|
|
|
|
sha256: bf394f466ba9205f1812a0433b392d6af280f155f56651eda7c18cc32ed493b8
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.2.1"
|
|
|
|
|
collection:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: collection
|
|
|
|
|
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.19.1"
|
Add photo attach, full-size viewer, and a minimal history screen
Milestone 2 of the diet-app-as-wise-balloon plan, plus feedback from
manually testing it on-device:
- PhotoAttachService wraps image_picker and copies the picked photo into
<app documents>/images/<uuid>.<ext>, so the file survives after the
picker's own (possibly cache-cleared) temp copy is gone. Phone-local
only, per the sync plan: imagePath is never synced.
- PhotoAttachField is a shared attach/preview/remove widget, used
identically by both the single-item and composite-meal logging
screens, so logging a multi-item meal can now carry a photo too.
- PhotoViewerScreen gives a full-screen, pinch-to-zoom view of an
attached photo -- the 64x64 inline thumbnail was too small to
actually check the photo.
- HistoryScreen lists every logged entry across all days, newest first,
with a thumbnail when one is attached. There was previously no way to
confirm what got logged (or whether a photo actually attached) short
of inspecting food_log.json directly.
Verified on a physical device (BL9000): built, installed, and the user
confirmed the photo-attach flow logs a real entry with a real photo,
visible afterward in the new history list. 88 Flutter tests passing,
`flutter analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:57:58 +02:00
|
|
|
cross_file:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: cross_file
|
|
|
|
|
sha256: "28bb3ae56f117b5aec029d702a90f57d285cd975c3c5c281eaca38dbc47c5937"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.3.5+2"
|
Add Flutter companion app skeleton with local meal logging
Milestone 1 of the diet-app-as-wise-balloon plan: a phone-native way to
log meals away from the PC, sharing the exact on-disk JSON shape
diet_guard already uses (same field names, no translation layer).
- lib/models/: 1:1 Dart mirrors of the Python dataclasses (Nutrition,
FoodEntry, MealItem, FoodBankRecord, Slot), including the per-100g/
amount-eaten portion scaling that matches _resolve.resolve_nutrition's
semantics exactly.
- lib/services/log_storage_service.dart: plain-JSON persistence to
food_log.json's exact shape (no sqflite -- the canonical format
already is this JSON).
- lib/services/foodbank_service.dart: ports _foodbank.py's upsert/fuzzy
search logic for autocomplete.
- lib/screens/: log_meal_screen.dart (single-item logging) and
meal_builder_screen.dart (composite multi-item meals, logging full
per-component macros via the new components field).
Verified end-to-end on a physical device (BL9000): built, installed,
logged a real meal through the UI. 77 Flutter tests passing, `flutter
analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:22:42 +02:00
|
|
|
crypto:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: crypto
|
|
|
|
|
sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.7"
|
Add OAuth device flow, background notifications, and fix AGP9 release crash (Milestones 3–4)
M3 – GitHub OAuth device flow: replace PAT-paste with a guided "Connect
GitHub" button that runs the device-code flow; tapping with no client id
now opens a setup dialog (instructions + inline paste field) rather than
a buried inline hint. Bakes in the app's own OAuth App client id so fresh
installs work with zero manual config. Auto-syncs immediately after
connect. Verified end-to-end on the real phone: OAuth flow → token saved
→ PC's 48-entry log merged in (confirmed via food-bank vs manual source
labels in History).
M4 – Background meal-slot notifications: WorkManager periodic task (15 min
floor) checks for overdue slots and posts/cancels notifications via
flutter_local_notifications. New permissions: POST_NOTIFICATIONS,
WAKE_LOCK, RECEIVE_BOOT_COMPLETED, REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
INTERNET (was missing — latent sync bug). "Disable battery optimization"
button in Settings. Verified on real phone: WorkManager registered, forced
run posted a real notification ("Meal not logged / You haven't logged your
16:00 meal yet."), isolated to background path (only caller is the
WorkManager dispatcher, not any foreground lifecycle hook).
AGP9 release crash fix: AGP 9 defaults isMinifyEnabled/isShrinkResources
to true for release even with no proguard config; R8 stripped
WorkDatabase_Impl's reflection-only constructor, crashing every launch
with NoSuchMethodException. Explicitly disabled both flags in
build.gradle.kts. Verified via dexdump (constructor present) and on-device
launch (no crash). Proper R8 keep rules are the long-term fix; tracked.
177 tests, flutter analyze clean.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SWPUBzE24Ls9i9GMRwXnnn
2026-06-25 17:29:23 +02:00
|
|
|
dbus:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: dbus
|
|
|
|
|
sha256: "792974a4007974fbc5c1b5433eb2330a9db3e368c3f906253af4c007d0f49a91"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.7.13"
|
Add Flutter companion app skeleton with local meal logging
Milestone 1 of the diet-app-as-wise-balloon plan: a phone-native way to
log meals away from the PC, sharing the exact on-disk JSON shape
diet_guard already uses (same field names, no translation layer).
- lib/models/: 1:1 Dart mirrors of the Python dataclasses (Nutrition,
FoodEntry, MealItem, FoodBankRecord, Slot), including the per-100g/
amount-eaten portion scaling that matches _resolve.resolve_nutrition's
semantics exactly.
- lib/services/log_storage_service.dart: plain-JSON persistence to
food_log.json's exact shape (no sqflite -- the canonical format
already is this JSON).
- lib/services/foodbank_service.dart: ports _foodbank.py's upsert/fuzzy
search logic for autocomplete.
- lib/screens/: log_meal_screen.dart (single-item logging) and
meal_builder_screen.dart (composite multi-item meals, logging full
per-component macros via the new components field).
Verified end-to-end on a physical device (BL9000): built, installed,
logged a real meal through the UI. 77 Flutter tests passing, `flutter
analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:22:42 +02:00
|
|
|
fake_async:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: fake_async
|
|
|
|
|
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.3.3"
|
|
|
|
|
ffi:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: ffi
|
|
|
|
|
sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.0"
|
2026-06-22 22:42:27 +02:00
|
|
|
ffi_leak_tracker:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: ffi_leak_tracker
|
|
|
|
|
sha256: "4093d4ef9ca06ffe2786e73bfb25e22aa92112b9bb4ec941f11e3e6b61489a97"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.1.2"
|
|
|
|
|
file:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file
|
|
|
|
|
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "7.0.1"
|
Add photo attach, full-size viewer, and a minimal history screen
Milestone 2 of the diet-app-as-wise-balloon plan, plus feedback from
manually testing it on-device:
- PhotoAttachService wraps image_picker and copies the picked photo into
<app documents>/images/<uuid>.<ext>, so the file survives after the
picker's own (possibly cache-cleared) temp copy is gone. Phone-local
only, per the sync plan: imagePath is never synced.
- PhotoAttachField is a shared attach/preview/remove widget, used
identically by both the single-item and composite-meal logging
screens, so logging a multi-item meal can now carry a photo too.
- PhotoViewerScreen gives a full-screen, pinch-to-zoom view of an
attached photo -- the 64x64 inline thumbnail was too small to
actually check the photo.
- HistoryScreen lists every logged entry across all days, newest first,
with a thumbnail when one is attached. There was previously no way to
confirm what got logged (or whether a photo actually attached) short
of inspecting food_log.json directly.
Verified on a physical device (BL9000): built, installed, and the user
confirmed the photo-attach flow logs a real entry with a real photo,
visible afterward in the new history list. 88 Flutter tests passing,
`flutter analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:57:58 +02:00
|
|
|
file_selector_linux:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_selector_linux
|
|
|
|
|
sha256: "2567f398e06ac72dcf2e98a0c95df2a9edd03c2c2e0cacd4780f20cdf56263a0"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.9.4"
|
|
|
|
|
file_selector_macos:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_selector_macos
|
|
|
|
|
sha256: "5e0bbe9c312416f1787a68259ea1505b52f258c587f12920422671807c4d618a"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.9.5"
|
|
|
|
|
file_selector_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_selector_platform_interface
|
|
|
|
|
sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.7.0"
|
|
|
|
|
file_selector_windows:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: file_selector_windows
|
|
|
|
|
sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.9.3+5"
|
Add Flutter companion app skeleton with local meal logging
Milestone 1 of the diet-app-as-wise-balloon plan: a phone-native way to
log meals away from the PC, sharing the exact on-disk JSON shape
diet_guard already uses (same field names, no translation layer).
- lib/models/: 1:1 Dart mirrors of the Python dataclasses (Nutrition,
FoodEntry, MealItem, FoodBankRecord, Slot), including the per-100g/
amount-eaten portion scaling that matches _resolve.resolve_nutrition's
semantics exactly.
- lib/services/log_storage_service.dart: plain-JSON persistence to
food_log.json's exact shape (no sqflite -- the canonical format
already is this JSON).
- lib/services/foodbank_service.dart: ports _foodbank.py's upsert/fuzzy
search logic for autocomplete.
- lib/screens/: log_meal_screen.dart (single-item logging) and
meal_builder_screen.dart (composite multi-item meals, logging full
per-component macros via the new components field).
Verified end-to-end on a physical device (BL9000): built, installed,
logged a real meal through the UI. 77 Flutter tests passing, `flutter
analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:22:42 +02:00
|
|
|
fixnum:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: fixnum
|
|
|
|
|
sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.1"
|
|
|
|
|
flutter:
|
|
|
|
|
dependency: "direct main"
|
|
|
|
|
description: flutter
|
|
|
|
|
source: sdk
|
|
|
|
|
version: "0.0.0"
|
Add OAuth device flow, background notifications, and fix AGP9 release crash (Milestones 3–4)
M3 – GitHub OAuth device flow: replace PAT-paste with a guided "Connect
GitHub" button that runs the device-code flow; tapping with no client id
now opens a setup dialog (instructions + inline paste field) rather than
a buried inline hint. Bakes in the app's own OAuth App client id so fresh
installs work with zero manual config. Auto-syncs immediately after
connect. Verified end-to-end on the real phone: OAuth flow → token saved
→ PC's 48-entry log merged in (confirmed via food-bank vs manual source
labels in History).
M4 – Background meal-slot notifications: WorkManager periodic task (15 min
floor) checks for overdue slots and posts/cancels notifications via
flutter_local_notifications. New permissions: POST_NOTIFICATIONS,
WAKE_LOCK, RECEIVE_BOOT_COMPLETED, REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
INTERNET (was missing — latent sync bug). "Disable battery optimization"
button in Settings. Verified on real phone: WorkManager registered, forced
run posted a real notification ("Meal not logged / You haven't logged your
16:00 meal yet."), isolated to background path (only caller is the
WorkManager dispatcher, not any foreground lifecycle hook).
AGP9 release crash fix: AGP 9 defaults isMinifyEnabled/isShrinkResources
to true for release even with no proguard config; R8 stripped
WorkDatabase_Impl's reflection-only constructor, crashing every launch
with NoSuchMethodException. Explicitly disabled both flags in
build.gradle.kts. Verified via dexdump (constructor present) and on-device
launch (no crash). Proper R8 keep rules are the long-term fix; tracked.
177 tests, flutter analyze clean.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SWPUBzE24Ls9i9GMRwXnnn
2026-06-25 17:29:23 +02:00
|
|
|
flutter_local_notifications:
|
|
|
|
|
dependency: "direct main"
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_local_notifications
|
|
|
|
|
sha256: a0d7141f14cabcee42967470a858dfc99dd6cfb70d3cab404bacfcafa9e84e70
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "22.0.1"
|
|
|
|
|
flutter_local_notifications_linux:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_local_notifications_linux
|
|
|
|
|
sha256: "9ca97e63776f29ab1b955725c09999fc2c150523269db150c39274f2a43c5a8b"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "8.0.1"
|
|
|
|
|
flutter_local_notifications_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_local_notifications_platform_interface
|
|
|
|
|
sha256: ff0013eae795e8dc8fad4a8992a209e64d3ba2fbd8bf5e43c36bf448f95bd814
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "12.0.0"
|
|
|
|
|
flutter_local_notifications_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_local_notifications_web
|
|
|
|
|
sha256: "516afaf97a2d1e67a036c6617321b00d205d72f7a67b6eccf936cd565f985878"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.0"
|
|
|
|
|
flutter_local_notifications_windows:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_local_notifications_windows
|
|
|
|
|
sha256: "6f43bdd03b171b7a90f22647506fea33e2bb12294b7c7c7a3d690e960a382945"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.1.1"
|
Add photo attach, full-size viewer, and a minimal history screen
Milestone 2 of the diet-app-as-wise-balloon plan, plus feedback from
manually testing it on-device:
- PhotoAttachService wraps image_picker and copies the picked photo into
<app documents>/images/<uuid>.<ext>, so the file survives after the
picker's own (possibly cache-cleared) temp copy is gone. Phone-local
only, per the sync plan: imagePath is never synced.
- PhotoAttachField is a shared attach/preview/remove widget, used
identically by both the single-item and composite-meal logging
screens, so logging a multi-item meal can now carry a photo too.
- PhotoViewerScreen gives a full-screen, pinch-to-zoom view of an
attached photo -- the 64x64 inline thumbnail was too small to
actually check the photo.
- HistoryScreen lists every logged entry across all days, newest first,
with a thumbnail when one is attached. There was previously no way to
confirm what got logged (or whether a photo actually attached) short
of inspecting food_log.json directly.
Verified on a physical device (BL9000): built, installed, and the user
confirmed the photo-attach flow logs a real entry with a real photo,
visible afterward in the new history list. 88 Flutter tests passing,
`flutter analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:57:58 +02:00
|
|
|
flutter_plugin_android_lifecycle:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_plugin_android_lifecycle
|
|
|
|
|
sha256: "3854fe5e3bff0b113c658f260b90c95dea17c92db0f2addeac2e343dd9969785"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.35"
|
2026-06-22 22:42:27 +02:00
|
|
|
flutter_secure_storage:
|
|
|
|
|
dependency: "direct main"
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_secure_storage
|
|
|
|
|
sha256: "7686b1d6a29985dcbb808c59518226e603e3bfa7c0ddfd1a0d00e4cda77c868e"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "10.3.1"
|
|
|
|
|
flutter_secure_storage_darwin:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_secure_storage_darwin
|
|
|
|
|
sha256: "82329fa5cdf343773b1b6897dea959105a29f092454259edff92f9f6637e8149"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.3.2"
|
|
|
|
|
flutter_secure_storage_linux:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_secure_storage_linux
|
|
|
|
|
sha256: a5f35ddab43cf5c8215d2feb4ce1957851f28c5c37e6f04335066a0602087bf5
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.1"
|
|
|
|
|
flutter_secure_storage_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_secure_storage_platform_interface
|
|
|
|
|
sha256: "8ceea1223bee3c6ac1a22dabd8feefc550e4729b3675de4b5900f55afcb435d6"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.1"
|
|
|
|
|
flutter_secure_storage_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_secure_storage_web
|
|
|
|
|
sha256: "073a62b3aeb866ab4ce795f960413948e51e5a42a9b0c8333b6daf5bb3208a1c"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.1"
|
|
|
|
|
flutter_secure_storage_windows:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: flutter_secure_storage_windows
|
|
|
|
|
sha256: "471951813a97006d899db4948acc654a4f28c440083ea08178935ce20b173ec1"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.2.2"
|
Add Flutter companion app skeleton with local meal logging
Milestone 1 of the diet-app-as-wise-balloon plan: a phone-native way to
log meals away from the PC, sharing the exact on-disk JSON shape
diet_guard already uses (same field names, no translation layer).
- lib/models/: 1:1 Dart mirrors of the Python dataclasses (Nutrition,
FoodEntry, MealItem, FoodBankRecord, Slot), including the per-100g/
amount-eaten portion scaling that matches _resolve.resolve_nutrition's
semantics exactly.
- lib/services/log_storage_service.dart: plain-JSON persistence to
food_log.json's exact shape (no sqflite -- the canonical format
already is this JSON).
- lib/services/foodbank_service.dart: ports _foodbank.py's upsert/fuzzy
search logic for autocomplete.
- lib/screens/: log_meal_screen.dart (single-item logging) and
meal_builder_screen.dart (composite multi-item meals, logging full
per-component macros via the new components field).
Verified end-to-end on a physical device (BL9000): built, installed,
logged a real meal through the UI. 77 Flutter tests passing, `flutter
analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:22:42 +02:00
|
|
|
flutter_test:
|
|
|
|
|
dependency: "direct dev"
|
|
|
|
|
description: flutter
|
|
|
|
|
source: sdk
|
|
|
|
|
version: "0.0.0"
|
Add photo attach, full-size viewer, and a minimal history screen
Milestone 2 of the diet-app-as-wise-balloon plan, plus feedback from
manually testing it on-device:
- PhotoAttachService wraps image_picker and copies the picked photo into
<app documents>/images/<uuid>.<ext>, so the file survives after the
picker's own (possibly cache-cleared) temp copy is gone. Phone-local
only, per the sync plan: imagePath is never synced.
- PhotoAttachField is a shared attach/preview/remove widget, used
identically by both the single-item and composite-meal logging
screens, so logging a multi-item meal can now carry a photo too.
- PhotoViewerScreen gives a full-screen, pinch-to-zoom view of an
attached photo -- the 64x64 inline thumbnail was too small to
actually check the photo.
- HistoryScreen lists every logged entry across all days, newest first,
with a thumbnail when one is attached. There was previously no way to
confirm what got logged (or whether a photo actually attached) short
of inspecting food_log.json directly.
Verified on a physical device (BL9000): built, installed, and the user
confirmed the photo-attach flow logs a real entry with a real photo,
visible afterward in the new history list. 88 Flutter tests passing,
`flutter analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:57:58 +02:00
|
|
|
flutter_web_plugins:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description: flutter
|
|
|
|
|
source: sdk
|
|
|
|
|
version: "0.0.0"
|
Add Flutter companion app skeleton with local meal logging
Milestone 1 of the diet-app-as-wise-balloon plan: a phone-native way to
log meals away from the PC, sharing the exact on-disk JSON shape
diet_guard already uses (same field names, no translation layer).
- lib/models/: 1:1 Dart mirrors of the Python dataclasses (Nutrition,
FoodEntry, MealItem, FoodBankRecord, Slot), including the per-100g/
amount-eaten portion scaling that matches _resolve.resolve_nutrition's
semantics exactly.
- lib/services/log_storage_service.dart: plain-JSON persistence to
food_log.json's exact shape (no sqflite -- the canonical format
already is this JSON).
- lib/services/foodbank_service.dart: ports _foodbank.py's upsert/fuzzy
search logic for autocomplete.
- lib/screens/: log_meal_screen.dart (single-item logging) and
meal_builder_screen.dart (composite multi-item meals, logging full
per-component macros via the new components field).
Verified end-to-end on a physical device (BL9000): built, installed,
logged a real meal through the UI. 77 Flutter tests passing, `flutter
analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:22:42 +02:00
|
|
|
hooks:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: hooks
|
|
|
|
|
sha256: "9a62a50b50b769a737bc0a8ff381f333529df3ab746b2f6b02e83760231455ba"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.2"
|
Add photo attach, full-size viewer, and a minimal history screen
Milestone 2 of the diet-app-as-wise-balloon plan, plus feedback from
manually testing it on-device:
- PhotoAttachService wraps image_picker and copies the picked photo into
<app documents>/images/<uuid>.<ext>, so the file survives after the
picker's own (possibly cache-cleared) temp copy is gone. Phone-local
only, per the sync plan: imagePath is never synced.
- PhotoAttachField is a shared attach/preview/remove widget, used
identically by both the single-item and composite-meal logging
screens, so logging a multi-item meal can now carry a photo too.
- PhotoViewerScreen gives a full-screen, pinch-to-zoom view of an
attached photo -- the 64x64 inline thumbnail was too small to
actually check the photo.
- HistoryScreen lists every logged entry across all days, newest first,
with a thumbnail when one is attached. There was previously no way to
confirm what got logged (or whether a photo actually attached) short
of inspecting food_log.json directly.
Verified on a physical device (BL9000): built, installed, and the user
confirmed the photo-attach flow logs a real entry with a real photo,
visible afterward in the new history list. 88 Flutter tests passing,
`flutter analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:57:58 +02:00
|
|
|
http:
|
2026-06-22 22:42:27 +02:00
|
|
|
dependency: "direct main"
|
Add photo attach, full-size viewer, and a minimal history screen
Milestone 2 of the diet-app-as-wise-balloon plan, plus feedback from
manually testing it on-device:
- PhotoAttachService wraps image_picker and copies the picked photo into
<app documents>/images/<uuid>.<ext>, so the file survives after the
picker's own (possibly cache-cleared) temp copy is gone. Phone-local
only, per the sync plan: imagePath is never synced.
- PhotoAttachField is a shared attach/preview/remove widget, used
identically by both the single-item and composite-meal logging
screens, so logging a multi-item meal can now carry a photo too.
- PhotoViewerScreen gives a full-screen, pinch-to-zoom view of an
attached photo -- the 64x64 inline thumbnail was too small to
actually check the photo.
- HistoryScreen lists every logged entry across all days, newest first,
with a thumbnail when one is attached. There was previously no way to
confirm what got logged (or whether a photo actually attached) short
of inspecting food_log.json directly.
Verified on a physical device (BL9000): built, installed, and the user
confirmed the photo-attach flow logs a real entry with a real photo,
visible afterward in the new history list. 88 Flutter tests passing,
`flutter analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:57:58 +02:00
|
|
|
description:
|
|
|
|
|
name: http
|
|
|
|
|
sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.6.0"
|
|
|
|
|
http_parser:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: http_parser
|
|
|
|
|
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.1.2"
|
|
|
|
|
image_picker:
|
|
|
|
|
dependency: "direct main"
|
|
|
|
|
description:
|
|
|
|
|
name: image_picker
|
|
|
|
|
sha256: "91c025426c2881c551100bce834e201c835a170151545f58d17da5180ca7d9ac"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.2.2"
|
|
|
|
|
image_picker_android:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: image_picker_android
|
|
|
|
|
sha256: "6f3a1995eafb000333174fae92202622033b0ee7fd917a6cd3730295264df84a"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.8.13+19"
|
|
|
|
|
image_picker_for_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: image_picker_for_web
|
|
|
|
|
sha256: "66257a3191ab360d23a55c8241c91a6e329d31e94efa7be9cf7a212e65850214"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.1.1"
|
|
|
|
|
image_picker_ios:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: image_picker_ios
|
|
|
|
|
sha256: b9c4a438a9ff4f60808c9cf0039b93a42bb6c2211ef6ebb647394b2b3fa84588
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.8.13+6"
|
|
|
|
|
image_picker_linux:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: image_picker_linux
|
|
|
|
|
sha256: "1f81c5f2046b9ab724f85523e4af65be1d47b038160a8c8deed909762c308ed4"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.2.2"
|
|
|
|
|
image_picker_macos:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: image_picker_macos
|
|
|
|
|
sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.2.2+1"
|
|
|
|
|
image_picker_platform_interface:
|
|
|
|
|
dependency: "direct dev"
|
|
|
|
|
description:
|
|
|
|
|
name: image_picker_platform_interface
|
|
|
|
|
sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.11.1"
|
|
|
|
|
image_picker_windows:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: image_picker_windows
|
|
|
|
|
sha256: d248c86554a72b5495a31c56f060cf73a41c7ff541689327b1a7dbccc33adfae
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.2.2"
|
Add Flutter companion app skeleton with local meal logging
Milestone 1 of the diet-app-as-wise-balloon plan: a phone-native way to
log meals away from the PC, sharing the exact on-disk JSON shape
diet_guard already uses (same field names, no translation layer).
- lib/models/: 1:1 Dart mirrors of the Python dataclasses (Nutrition,
FoodEntry, MealItem, FoodBankRecord, Slot), including the per-100g/
amount-eaten portion scaling that matches _resolve.resolve_nutrition's
semantics exactly.
- lib/services/log_storage_service.dart: plain-JSON persistence to
food_log.json's exact shape (no sqflite -- the canonical format
already is this JSON).
- lib/services/foodbank_service.dart: ports _foodbank.py's upsert/fuzzy
search logic for autocomplete.
- lib/screens/: log_meal_screen.dart (single-item logging) and
meal_builder_screen.dart (composite multi-item meals, logging full
per-component macros via the new components field).
Verified end-to-end on a physical device (BL9000): built, installed,
logged a real meal through the UI. 77 Flutter tests passing, `flutter
analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:22:42 +02:00
|
|
|
jni:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: jni
|
|
|
|
|
sha256: c2230682d5bc2362c1c9e8d3c7f406d9cbba23ab3f2e203a025dd47e0fb2e68f
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.0"
|
|
|
|
|
jni_flutter:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: jni_flutter
|
|
|
|
|
sha256: "8b59e590786050b1cd866677dddaf76b1ade5e7bc751abe04b86e84d379d3ba6"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.0.1"
|
|
|
|
|
leak_tracker:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: leak_tracker
|
|
|
|
|
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "11.0.2"
|
|
|
|
|
leak_tracker_flutter_testing:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: leak_tracker_flutter_testing
|
|
|
|
|
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.10"
|
|
|
|
|
leak_tracker_testing:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: leak_tracker_testing
|
|
|
|
|
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.0.2"
|
|
|
|
|
logging:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: logging
|
|
|
|
|
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.3.0"
|
|
|
|
|
matcher:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: matcher
|
|
|
|
|
sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.12.19"
|
|
|
|
|
material_color_utilities:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: material_color_utilities
|
|
|
|
|
sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.13.0"
|
|
|
|
|
meta:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: meta
|
|
|
|
|
sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.18.0"
|
Add photo attach, full-size viewer, and a minimal history screen
Milestone 2 of the diet-app-as-wise-balloon plan, plus feedback from
manually testing it on-device:
- PhotoAttachService wraps image_picker and copies the picked photo into
<app documents>/images/<uuid>.<ext>, so the file survives after the
picker's own (possibly cache-cleared) temp copy is gone. Phone-local
only, per the sync plan: imagePath is never synced.
- PhotoAttachField is a shared attach/preview/remove widget, used
identically by both the single-item and composite-meal logging
screens, so logging a multi-item meal can now carry a photo too.
- PhotoViewerScreen gives a full-screen, pinch-to-zoom view of an
attached photo -- the 64x64 inline thumbnail was too small to
actually check the photo.
- HistoryScreen lists every logged entry across all days, newest first,
with a thumbnail when one is attached. There was previously no way to
confirm what got logged (or whether a photo actually attached) short
of inspecting food_log.json directly.
Verified on a physical device (BL9000): built, installed, and the user
confirmed the photo-attach flow logs a real entry with a real photo,
visible afterward in the new history list. 88 Flutter tests passing,
`flutter analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:57:58 +02:00
|
|
|
mime:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: mime
|
|
|
|
|
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.0.0"
|
Add Flutter companion app skeleton with local meal logging
Milestone 1 of the diet-app-as-wise-balloon plan: a phone-native way to
log meals away from the PC, sharing the exact on-disk JSON shape
diet_guard already uses (same field names, no translation layer).
- lib/models/: 1:1 Dart mirrors of the Python dataclasses (Nutrition,
FoodEntry, MealItem, FoodBankRecord, Slot), including the per-100g/
amount-eaten portion scaling that matches _resolve.resolve_nutrition's
semantics exactly.
- lib/services/log_storage_service.dart: plain-JSON persistence to
food_log.json's exact shape (no sqflite -- the canonical format
already is this JSON).
- lib/services/foodbank_service.dart: ports _foodbank.py's upsert/fuzzy
search logic for autocomplete.
- lib/screens/: log_meal_screen.dart (single-item logging) and
meal_builder_screen.dart (composite multi-item meals, logging full
per-component macros via the new components field).
Verified end-to-end on a physical device (BL9000): built, installed,
logged a real meal through the UI. 77 Flutter tests passing, `flutter
analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:22:42 +02:00
|
|
|
objective_c:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: objective_c
|
|
|
|
|
sha256: "6cb691c686fa2838c6deb34980d426145c2a5d537491cb83d463c33cdbc726ed"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "9.4.1"
|
|
|
|
|
package_config:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: package_config
|
|
|
|
|
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.0"
|
|
|
|
|
path:
|
|
|
|
|
dependency: "direct main"
|
|
|
|
|
description:
|
|
|
|
|
name: path
|
|
|
|
|
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.9.1"
|
|
|
|
|
path_provider:
|
|
|
|
|
dependency: "direct main"
|
|
|
|
|
description:
|
|
|
|
|
name: path_provider
|
|
|
|
|
sha256: a7f4874f987173da295a61c181b8ee71dab59b332a486b391babf26a1b884825
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.6"
|
|
|
|
|
path_provider_android:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: path_provider_android
|
|
|
|
|
sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.3.1"
|
|
|
|
|
path_provider_foundation:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: path_provider_foundation
|
|
|
|
|
sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.6.0"
|
|
|
|
|
path_provider_linux:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: path_provider_linux
|
|
|
|
|
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.1"
|
|
|
|
|
path_provider_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: path_provider_platform_interface
|
|
|
|
|
sha256: "484838772624c3a4b94f1e44a3e19897fee738f2d5c4ce448443b0417f7c9dda"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.3"
|
|
|
|
|
path_provider_windows:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: path_provider_windows
|
|
|
|
|
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.3.0"
|
Add OAuth device flow, background notifications, and fix AGP9 release crash (Milestones 3–4)
M3 – GitHub OAuth device flow: replace PAT-paste with a guided "Connect
GitHub" button that runs the device-code flow; tapping with no client id
now opens a setup dialog (instructions + inline paste field) rather than
a buried inline hint. Bakes in the app's own OAuth App client id so fresh
installs work with zero manual config. Auto-syncs immediately after
connect. Verified end-to-end on the real phone: OAuth flow → token saved
→ PC's 48-entry log merged in (confirmed via food-bank vs manual source
labels in History).
M4 – Background meal-slot notifications: WorkManager periodic task (15 min
floor) checks for overdue slots and posts/cancels notifications via
flutter_local_notifications. New permissions: POST_NOTIFICATIONS,
WAKE_LOCK, RECEIVE_BOOT_COMPLETED, REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
INTERNET (was missing — latent sync bug). "Disable battery optimization"
button in Settings. Verified on real phone: WorkManager registered, forced
run posted a real notification ("Meal not logged / You haven't logged your
16:00 meal yet."), isolated to background path (only caller is the
WorkManager dispatcher, not any foreground lifecycle hook).
AGP9 release crash fix: AGP 9 defaults isMinifyEnabled/isShrinkResources
to true for release even with no proguard config; R8 stripped
WorkDatabase_Impl's reflection-only constructor, crashing every launch
with NoSuchMethodException. Explicitly disabled both flags in
build.gradle.kts. Verified via dexdump (constructor present) and on-device
launch (no crash). Proper R8 keep rules are the long-term fix; tracked.
177 tests, flutter analyze clean.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SWPUBzE24Ls9i9GMRwXnnn
2026-06-25 17:29:23 +02:00
|
|
|
permission_handler:
|
|
|
|
|
dependency: "direct main"
|
|
|
|
|
description:
|
|
|
|
|
name: permission_handler
|
|
|
|
|
sha256: fe54465bcc62a4564c6e4db337bbaded6c0c0fa6e10487414436d163114784f6
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "12.0.3"
|
|
|
|
|
permission_handler_android:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: permission_handler_android
|
|
|
|
|
sha256: "1e3bc410ca1bf84662104b100eb126e066cb55791b7451307f9708d4007350e6"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "13.0.1"
|
|
|
|
|
permission_handler_apple:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: permission_handler_apple
|
|
|
|
|
sha256: "79dfa1df734798aa3cfdad166d3a3698c206d8813de13516ea1071b5d7e2f420"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "9.4.10"
|
|
|
|
|
permission_handler_html:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: permission_handler_html
|
|
|
|
|
sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.1.3+5"
|
|
|
|
|
permission_handler_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: permission_handler_platform_interface
|
|
|
|
|
sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.3.0"
|
|
|
|
|
permission_handler_windows:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: permission_handler_windows
|
|
|
|
|
sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.2.1"
|
|
|
|
|
petitparser:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: petitparser
|
|
|
|
|
sha256: "91bd59303e9f769f108f8df05e371341b15d59e995e6806aefab827b58336675"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "7.0.2"
|
Add Flutter companion app skeleton with local meal logging
Milestone 1 of the diet-app-as-wise-balloon plan: a phone-native way to
log meals away from the PC, sharing the exact on-disk JSON shape
diet_guard already uses (same field names, no translation layer).
- lib/models/: 1:1 Dart mirrors of the Python dataclasses (Nutrition,
FoodEntry, MealItem, FoodBankRecord, Slot), including the per-100g/
amount-eaten portion scaling that matches _resolve.resolve_nutrition's
semantics exactly.
- lib/services/log_storage_service.dart: plain-JSON persistence to
food_log.json's exact shape (no sqflite -- the canonical format
already is this JSON).
- lib/services/foodbank_service.dart: ports _foodbank.py's upsert/fuzzy
search logic for autocomplete.
- lib/screens/: log_meal_screen.dart (single-item logging) and
meal_builder_screen.dart (composite multi-item meals, logging full
per-component macros via the new components field).
Verified end-to-end on a physical device (BL9000): built, installed,
logged a real meal through the UI. 77 Flutter tests passing, `flutter
analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:22:42 +02:00
|
|
|
platform:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: platform
|
|
|
|
|
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.1.6"
|
|
|
|
|
plugin_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: plugin_platform_interface
|
|
|
|
|
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.8"
|
|
|
|
|
pub_semver:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: pub_semver
|
|
|
|
|
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.0"
|
|
|
|
|
record_use:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: record_use
|
|
|
|
|
sha256: "2551bd8eecfe95d14ae75f6021ad0248be5c27f138c2ec12fcb52b500b3ba1ed"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.6.0"
|
2026-06-22 22:42:27 +02:00
|
|
|
shared_preferences:
|
|
|
|
|
dependency: "direct main"
|
|
|
|
|
description:
|
|
|
|
|
name: shared_preferences
|
|
|
|
|
sha256: c3025c5534b01739267eb7d76959bbc25a6d10f6988e1c2a3036940133dd10bf
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.5.5"
|
|
|
|
|
shared_preferences_android:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: shared_preferences_android
|
|
|
|
|
sha256: "93ae5884a9df5d3bb696825bceb3a17590754548b5d740eba51500afc8d088f5"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.4.26"
|
|
|
|
|
shared_preferences_foundation:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: shared_preferences_foundation
|
|
|
|
|
sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.5.6"
|
|
|
|
|
shared_preferences_linux:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: shared_preferences_linux
|
|
|
|
|
sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.4.1"
|
|
|
|
|
shared_preferences_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: shared_preferences_platform_interface
|
|
|
|
|
sha256: "649dc798a33931919ea356c4305c2d1f81619ea6e92244070b520187b5140ef9"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.4.2"
|
|
|
|
|
shared_preferences_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: shared_preferences_web
|
|
|
|
|
sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.4.3"
|
|
|
|
|
shared_preferences_windows:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: shared_preferences_windows
|
|
|
|
|
sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.4.1"
|
Add Flutter companion app skeleton with local meal logging
Milestone 1 of the diet-app-as-wise-balloon plan: a phone-native way to
log meals away from the PC, sharing the exact on-disk JSON shape
diet_guard already uses (same field names, no translation layer).
- lib/models/: 1:1 Dart mirrors of the Python dataclasses (Nutrition,
FoodEntry, MealItem, FoodBankRecord, Slot), including the per-100g/
amount-eaten portion scaling that matches _resolve.resolve_nutrition's
semantics exactly.
- lib/services/log_storage_service.dart: plain-JSON persistence to
food_log.json's exact shape (no sqflite -- the canonical format
already is this JSON).
- lib/services/foodbank_service.dart: ports _foodbank.py's upsert/fuzzy
search logic for autocomplete.
- lib/screens/: log_meal_screen.dart (single-item logging) and
meal_builder_screen.dart (composite multi-item meals, logging full
per-component macros via the new components field).
Verified end-to-end on a physical device (BL9000): built, installed,
logged a real meal through the UI. 77 Flutter tests passing, `flutter
analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:22:42 +02:00
|
|
|
sky_engine:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description: flutter
|
|
|
|
|
source: sdk
|
|
|
|
|
version: "0.0.0"
|
|
|
|
|
source_span:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: source_span
|
|
|
|
|
sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.10.2"
|
|
|
|
|
stack_trace:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: stack_trace
|
|
|
|
|
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.12.1"
|
|
|
|
|
stream_channel:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: stream_channel
|
|
|
|
|
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.1.4"
|
|
|
|
|
string_scanner:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: string_scanner
|
|
|
|
|
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.4.1"
|
|
|
|
|
term_glyph:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: term_glyph
|
|
|
|
|
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.2.2"
|
|
|
|
|
test_api:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: test_api
|
|
|
|
|
sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.7.11"
|
Add OAuth device flow, background notifications, and fix AGP9 release crash (Milestones 3–4)
M3 – GitHub OAuth device flow: replace PAT-paste with a guided "Connect
GitHub" button that runs the device-code flow; tapping with no client id
now opens a setup dialog (instructions + inline paste field) rather than
a buried inline hint. Bakes in the app's own OAuth App client id so fresh
installs work with zero manual config. Auto-syncs immediately after
connect. Verified end-to-end on the real phone: OAuth flow → token saved
→ PC's 48-entry log merged in (confirmed via food-bank vs manual source
labels in History).
M4 – Background meal-slot notifications: WorkManager periodic task (15 min
floor) checks for overdue slots and posts/cancels notifications via
flutter_local_notifications. New permissions: POST_NOTIFICATIONS,
WAKE_LOCK, RECEIVE_BOOT_COMPLETED, REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
INTERNET (was missing — latent sync bug). "Disable battery optimization"
button in Settings. Verified on real phone: WorkManager registered, forced
run posted a real notification ("Meal not logged / You haven't logged your
16:00 meal yet."), isolated to background path (only caller is the
WorkManager dispatcher, not any foreground lifecycle hook).
AGP9 release crash fix: AGP 9 defaults isMinifyEnabled/isShrinkResources
to true for release even with no proguard config; R8 stripped
WorkDatabase_Impl's reflection-only constructor, crashing every launch
with NoSuchMethodException. Explicitly disabled both flags in
build.gradle.kts. Verified via dexdump (constructor present) and on-device
launch (no crash). Proper R8 keep rules are the long-term fix; tracked.
177 tests, flutter analyze clean.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SWPUBzE24Ls9i9GMRwXnnn
2026-06-25 17:29:23 +02:00
|
|
|
timezone:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: timezone
|
|
|
|
|
sha256: "784a5e34d2eb62e1326f24d6f600aaaee452eb8ca8ef2f384a59244e292d158b"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.11.0"
|
Add Flutter companion app skeleton with local meal logging
Milestone 1 of the diet-app-as-wise-balloon plan: a phone-native way to
log meals away from the PC, sharing the exact on-disk JSON shape
diet_guard already uses (same field names, no translation layer).
- lib/models/: 1:1 Dart mirrors of the Python dataclasses (Nutrition,
FoodEntry, MealItem, FoodBankRecord, Slot), including the per-100g/
amount-eaten portion scaling that matches _resolve.resolve_nutrition's
semantics exactly.
- lib/services/log_storage_service.dart: plain-JSON persistence to
food_log.json's exact shape (no sqflite -- the canonical format
already is this JSON).
- lib/services/foodbank_service.dart: ports _foodbank.py's upsert/fuzzy
search logic for autocomplete.
- lib/screens/: log_meal_screen.dart (single-item logging) and
meal_builder_screen.dart (composite multi-item meals, logging full
per-component macros via the new components field).
Verified end-to-end on a physical device (BL9000): built, installed,
logged a real meal through the UI. 77 Flutter tests passing, `flutter
analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:22:42 +02:00
|
|
|
typed_data:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: typed_data
|
|
|
|
|
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.4.0"
|
Add OAuth device flow, background notifications, and fix AGP9 release crash (Milestones 3–4)
M3 – GitHub OAuth device flow: replace PAT-paste with a guided "Connect
GitHub" button that runs the device-code flow; tapping with no client id
now opens a setup dialog (instructions + inline paste field) rather than
a buried inline hint. Bakes in the app's own OAuth App client id so fresh
installs work with zero manual config. Auto-syncs immediately after
connect. Verified end-to-end on the real phone: OAuth flow → token saved
→ PC's 48-entry log merged in (confirmed via food-bank vs manual source
labels in History).
M4 – Background meal-slot notifications: WorkManager periodic task (15 min
floor) checks for overdue slots and posts/cancels notifications via
flutter_local_notifications. New permissions: POST_NOTIFICATIONS,
WAKE_LOCK, RECEIVE_BOOT_COMPLETED, REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
INTERNET (was missing — latent sync bug). "Disable battery optimization"
button in Settings. Verified on real phone: WorkManager registered, forced
run posted a real notification ("Meal not logged / You haven't logged your
16:00 meal yet."), isolated to background path (only caller is the
WorkManager dispatcher, not any foreground lifecycle hook).
AGP9 release crash fix: AGP 9 defaults isMinifyEnabled/isShrinkResources
to true for release even with no proguard config; R8 stripped
WorkDatabase_Impl's reflection-only constructor, crashing every launch
with NoSuchMethodException. Explicitly disabled both flags in
build.gradle.kts. Verified via dexdump (constructor present) and on-device
launch (no crash). Proper R8 keep rules are the long-term fix; tracked.
177 tests, flutter analyze clean.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SWPUBzE24Ls9i9GMRwXnnn
2026-06-25 17:29:23 +02:00
|
|
|
url_launcher:
|
|
|
|
|
dependency: "direct main"
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher
|
|
|
|
|
sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.3.2"
|
|
|
|
|
url_launcher_android:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher_android
|
|
|
|
|
sha256: b413d49b73867ac08dd2f9890efd3cc11f2a0e577618d50843440a1fb3776c32
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.3.32"
|
|
|
|
|
url_launcher_ios:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher_ios
|
|
|
|
|
sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.4.1"
|
|
|
|
|
url_launcher_linux:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher_linux
|
|
|
|
|
sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.2.2"
|
|
|
|
|
url_launcher_macos:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher_macos
|
|
|
|
|
sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.2.5"
|
|
|
|
|
url_launcher_platform_interface:
|
|
|
|
|
dependency: "direct dev"
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher_platform_interface
|
|
|
|
|
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.3.2"
|
|
|
|
|
url_launcher_web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher_web
|
|
|
|
|
sha256: "85c81589622fbc87c1c683aaea164d3604a7777495a79d91e39ffcdec39ddb34"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.4.3"
|
|
|
|
|
url_launcher_windows:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: url_launcher_windows
|
|
|
|
|
sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.1.5"
|
Add Flutter companion app skeleton with local meal logging
Milestone 1 of the diet-app-as-wise-balloon plan: a phone-native way to
log meals away from the PC, sharing the exact on-disk JSON shape
diet_guard already uses (same field names, no translation layer).
- lib/models/: 1:1 Dart mirrors of the Python dataclasses (Nutrition,
FoodEntry, MealItem, FoodBankRecord, Slot), including the per-100g/
amount-eaten portion scaling that matches _resolve.resolve_nutrition's
semantics exactly.
- lib/services/log_storage_service.dart: plain-JSON persistence to
food_log.json's exact shape (no sqflite -- the canonical format
already is this JSON).
- lib/services/foodbank_service.dart: ports _foodbank.py's upsert/fuzzy
search logic for autocomplete.
- lib/screens/: log_meal_screen.dart (single-item logging) and
meal_builder_screen.dart (composite multi-item meals, logging full
per-component macros via the new components field).
Verified end-to-end on a physical device (BL9000): built, installed,
logged a real meal through the UI. 77 Flutter tests passing, `flutter
analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:22:42 +02:00
|
|
|
uuid:
|
|
|
|
|
dependency: "direct main"
|
|
|
|
|
description:
|
|
|
|
|
name: uuid
|
|
|
|
|
sha256: "1fef9e8e11e2991bb773070d4656b7bd5d850967a2456cfc83cf47925ba79489"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "4.5.3"
|
|
|
|
|
vector_math:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: vector_math
|
|
|
|
|
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "2.2.0"
|
|
|
|
|
very_good_analysis:
|
|
|
|
|
dependency: "direct dev"
|
|
|
|
|
description:
|
|
|
|
|
name: very_good_analysis
|
|
|
|
|
sha256: "481af67ab5877af20325251dc215a4ebac7666a1c8cf09198ffd457bc612b33d"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "10.3.0"
|
|
|
|
|
vm_service:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: vm_service
|
|
|
|
|
sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "15.2.0"
|
Add photo attach, full-size viewer, and a minimal history screen
Milestone 2 of the diet-app-as-wise-balloon plan, plus feedback from
manually testing it on-device:
- PhotoAttachService wraps image_picker and copies the picked photo into
<app documents>/images/<uuid>.<ext>, so the file survives after the
picker's own (possibly cache-cleared) temp copy is gone. Phone-local
only, per the sync plan: imagePath is never synced.
- PhotoAttachField is a shared attach/preview/remove widget, used
identically by both the single-item and composite-meal logging
screens, so logging a multi-item meal can now carry a photo too.
- PhotoViewerScreen gives a full-screen, pinch-to-zoom view of an
attached photo -- the 64x64 inline thumbnail was too small to
actually check the photo.
- HistoryScreen lists every logged entry across all days, newest first,
with a thumbnail when one is attached. There was previously no way to
confirm what got logged (or whether a photo actually attached) short
of inspecting food_log.json directly.
Verified on a physical device (BL9000): built, installed, and the user
confirmed the photo-attach flow logs a real entry with a real photo,
visible afterward in the new history list. 88 Flutter tests passing,
`flutter analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:57:58 +02:00
|
|
|
web:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: web
|
|
|
|
|
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.1"
|
2026-06-22 22:42:27 +02:00
|
|
|
win32:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: win32
|
|
|
|
|
sha256: ba6f4bba816c8d7e3c1580e170f3786d216951cc6b94babc3b814c08d2cb2738
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "6.3.0"
|
Add OAuth device flow, background notifications, and fix AGP9 release crash (Milestones 3–4)
M3 – GitHub OAuth device flow: replace PAT-paste with a guided "Connect
GitHub" button that runs the device-code flow; tapping with no client id
now opens a setup dialog (instructions + inline paste field) rather than
a buried inline hint. Bakes in the app's own OAuth App client id so fresh
installs work with zero manual config. Auto-syncs immediately after
connect. Verified end-to-end on the real phone: OAuth flow → token saved
→ PC's 48-entry log merged in (confirmed via food-bank vs manual source
labels in History).
M4 – Background meal-slot notifications: WorkManager periodic task (15 min
floor) checks for overdue slots and posts/cancels notifications via
flutter_local_notifications. New permissions: POST_NOTIFICATIONS,
WAKE_LOCK, RECEIVE_BOOT_COMPLETED, REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
INTERNET (was missing — latent sync bug). "Disable battery optimization"
button in Settings. Verified on real phone: WorkManager registered, forced
run posted a real notification ("Meal not logged / You haven't logged your
16:00 meal yet."), isolated to background path (only caller is the
WorkManager dispatcher, not any foreground lifecycle hook).
AGP9 release crash fix: AGP 9 defaults isMinifyEnabled/isShrinkResources
to true for release even with no proguard config; R8 stripped
WorkDatabase_Impl's reflection-only constructor, crashing every launch
with NoSuchMethodException. Explicitly disabled both flags in
build.gradle.kts. Verified via dexdump (constructor present) and on-device
launch (no crash). Proper R8 keep rules are the long-term fix; tracked.
177 tests, flutter analyze clean.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SWPUBzE24Ls9i9GMRwXnnn
2026-06-25 17:29:23 +02:00
|
|
|
workmanager:
|
|
|
|
|
dependency: "direct main"
|
|
|
|
|
description:
|
|
|
|
|
name: workmanager
|
|
|
|
|
sha256: "065673b2a465865183093806925419d311a9a5e0995aa74ccf8920fd695e2d10"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.9.0+3"
|
|
|
|
|
workmanager_android:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: workmanager_android
|
|
|
|
|
sha256: "9ae744db4ef891f5fcd2fb8671fccc712f4f96489a487a1411e0c8675e5e8cb7"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.9.0+2"
|
|
|
|
|
workmanager_apple:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: workmanager_apple
|
|
|
|
|
sha256: "1cc12ae3cbf5535e72f7ba4fde0c12dd11b757caf493a28e22d684052701f2ca"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.9.1+2"
|
|
|
|
|
workmanager_platform_interface:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: workmanager_platform_interface
|
|
|
|
|
sha256: f40422f10b970c67abb84230b44da22b075147637532ac501729256fcea10a47
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "0.9.1+1"
|
Add Flutter companion app skeleton with local meal logging
Milestone 1 of the diet-app-as-wise-balloon plan: a phone-native way to
log meals away from the PC, sharing the exact on-disk JSON shape
diet_guard already uses (same field names, no translation layer).
- lib/models/: 1:1 Dart mirrors of the Python dataclasses (Nutrition,
FoodEntry, MealItem, FoodBankRecord, Slot), including the per-100g/
amount-eaten portion scaling that matches _resolve.resolve_nutrition's
semantics exactly.
- lib/services/log_storage_service.dart: plain-JSON persistence to
food_log.json's exact shape (no sqflite -- the canonical format
already is this JSON).
- lib/services/foodbank_service.dart: ports _foodbank.py's upsert/fuzzy
search logic for autocomplete.
- lib/screens/: log_meal_screen.dart (single-item logging) and
meal_builder_screen.dart (composite multi-item meals, logging full
per-component macros via the new components field).
Verified end-to-end on a physical device (BL9000): built, installed,
logged a real meal through the UI. 77 Flutter tests passing, `flutter
analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:22:42 +02:00
|
|
|
xdg_directories:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: xdg_directories
|
|
|
|
|
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "1.1.0"
|
Add OAuth device flow, background notifications, and fix AGP9 release crash (Milestones 3–4)
M3 – GitHub OAuth device flow: replace PAT-paste with a guided "Connect
GitHub" button that runs the device-code flow; tapping with no client id
now opens a setup dialog (instructions + inline paste field) rather than
a buried inline hint. Bakes in the app's own OAuth App client id so fresh
installs work with zero manual config. Auto-syncs immediately after
connect. Verified end-to-end on the real phone: OAuth flow → token saved
→ PC's 48-entry log merged in (confirmed via food-bank vs manual source
labels in History).
M4 – Background meal-slot notifications: WorkManager periodic task (15 min
floor) checks for overdue slots and posts/cancels notifications via
flutter_local_notifications. New permissions: POST_NOTIFICATIONS,
WAKE_LOCK, RECEIVE_BOOT_COMPLETED, REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
INTERNET (was missing — latent sync bug). "Disable battery optimization"
button in Settings. Verified on real phone: WorkManager registered, forced
run posted a real notification ("Meal not logged / You haven't logged your
16:00 meal yet."), isolated to background path (only caller is the
WorkManager dispatcher, not any foreground lifecycle hook).
AGP9 release crash fix: AGP 9 defaults isMinifyEnabled/isShrinkResources
to true for release even with no proguard config; R8 stripped
WorkDatabase_Impl's reflection-only constructor, crashing every launch
with NoSuchMethodException. Explicitly disabled both flags in
build.gradle.kts. Verified via dexdump (constructor present) and on-device
launch (no crash). Proper R8 keep rules are the long-term fix; tracked.
177 tests, flutter analyze clean.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SWPUBzE24Ls9i9GMRwXnnn
2026-06-25 17:29:23 +02:00
|
|
|
xml:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: xml
|
|
|
|
|
sha256: "67f0aff7be013d107995e9b75bf4e7f2c3ef2dfdb2c8e68024bba0a7fd5756a4"
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "7.0.1"
|
Add Flutter companion app skeleton with local meal logging
Milestone 1 of the diet-app-as-wise-balloon plan: a phone-native way to
log meals away from the PC, sharing the exact on-disk JSON shape
diet_guard already uses (same field names, no translation layer).
- lib/models/: 1:1 Dart mirrors of the Python dataclasses (Nutrition,
FoodEntry, MealItem, FoodBankRecord, Slot), including the per-100g/
amount-eaten portion scaling that matches _resolve.resolve_nutrition's
semantics exactly.
- lib/services/log_storage_service.dart: plain-JSON persistence to
food_log.json's exact shape (no sqflite -- the canonical format
already is this JSON).
- lib/services/foodbank_service.dart: ports _foodbank.py's upsert/fuzzy
search logic for autocomplete.
- lib/screens/: log_meal_screen.dart (single-item logging) and
meal_builder_screen.dart (composite multi-item meals, logging full
per-component macros via the new components field).
Verified end-to-end on a physical device (BL9000): built, installed,
logged a real meal through the UI. 77 Flutter tests passing, `flutter
analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:22:42 +02:00
|
|
|
yaml:
|
|
|
|
|
dependency: transitive
|
|
|
|
|
description:
|
|
|
|
|
name: yaml
|
|
|
|
|
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
|
|
|
|
|
url: "https://pub.dev"
|
|
|
|
|
source: hosted
|
|
|
|
|
version: "3.1.3"
|
|
|
|
|
sdks:
|
|
|
|
|
dart: ">=3.12.2 <4.0.0"
|
Add photo attach, full-size viewer, and a minimal history screen
Milestone 2 of the diet-app-as-wise-balloon plan, plus feedback from
manually testing it on-device:
- PhotoAttachService wraps image_picker and copies the picked photo into
<app documents>/images/<uuid>.<ext>, so the file survives after the
picker's own (possibly cache-cleared) temp copy is gone. Phone-local
only, per the sync plan: imagePath is never synced.
- PhotoAttachField is a shared attach/preview/remove widget, used
identically by both the single-item and composite-meal logging
screens, so logging a multi-item meal can now carry a photo too.
- PhotoViewerScreen gives a full-screen, pinch-to-zoom view of an
attached photo -- the 64x64 inline thumbnail was too small to
actually check the photo.
- HistoryScreen lists every logged entry across all days, newest first,
with a thumbnail when one is attached. There was previously no way to
confirm what got logged (or whether a photo actually attached) short
of inspecting food_log.json directly.
Verified on a physical device (BL9000): built, installed, and the user
confirmed the photo-attach flow logs a real entry with a real photo,
visible afterward in the new history list. 88 Flutter tests passing,
`flutter analyze` clean against very_good_analysis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:57:58 +02:00
|
|
|
flutter: ">=3.44.0"
|