Athena — roomy-mobile/archive/changes/2025-12-28-fix-home-expense-widget-reactivity/tasks/002-update-view-widget.md


status: done

Task: Update HomeView Widget Binding

End Goal

HomeView wraps TUserExpenseSummaryCard in ListenableBuilder and passes all datepicker parameters.

Currently

  • HomeView passes static computed values to TUserExpenseSummaryCard (lines 85-91)
  • No ListenableBuilder wrapping the expense widget
  • Missing datepicker parameters (customDateRangeListenable, preset callbacks, custom range callback)
  • Widget doesn't rebuild when payments change

Should

  • TUserExpenseSummaryCard wrapped in ListenableBuilder listening to model.paymentsListenable
  • All datepicker parameters passed to enable full functionality
  • Widget rebuilds when payments change

Constraints

  • [ ] Wrap ONLY the TUserExpenseSummaryCard (minimal rebuild scope)
  • [ ] Keep TMargin.horizontal wrapper intact
  • [ ] No graph parameters (summary cards only)
  • [ ] Follow existing ValueListenableBuilder patterns in the view

Acceptance Criteria

  • [ ] TUserExpenseSummaryCard is wrapped in ListenableBuilder
  • [ ] ListenableBuilder uses model.paymentsListenable
  • [ ] customDateRangeListenable parameter is passed
  • [ ] onTodayPressed callback is passed with PaymentPeriodFilter.day
  • [ ] onWeekPressed callback is passed with PaymentPeriodFilter.week
  • [ ] onMonthPressed callback is passed with PaymentPeriodFilter.month
  • [ ] onYearPressed callback is passed with PaymentPeriodFilter.year
  • [ ] onCustomRangeSelected callback is passed

Implementation Checklist

  • [x] 2.1 Wrap TUserExpenseSummaryCard in ListenableBuilder
  • [x] 2.2 Set listenable to model.paymentsListenable
  • [x] 2.3 Add customDateRangeListenable: model.customDateRangeListenable
  • [x] 2.4 Add onTodayPressed: () => model.onPresetSelected(PaymentPeriodFilter.day)
  • [x] 2.5 Add onWeekPressed: () => model.onPresetSelected(PaymentPeriodFilter.week)
  • [x] 2.6 Add onMonthPressed: () => model.onPresetSelected(PaymentPeriodFilter.month)
  • [x] 2.7 Add onYearPressed: () => model.onPresetSelected(PaymentPeriodFilter.year)
  • [x] 2.8 Add onCustomRangeSelected: model.onCustomRangeSelected

Notes

Reference payments_view.dart lines 74-115 for the working pattern.

Reacties

Nog geen reacties