Enhance AppSettings and RentController to manage not-occupied months, add lifetime summary to SettingsScreen, and update tests for compatibility

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-03-20 10:57:57 +01:00
parent 67af59bd0d
commit 9c4e275ff7
6 changed files with 228 additions and 31 deletions
+16 -20
View File
@@ -34,6 +34,12 @@ class HomeScreen extends StatelessWidget {
selected: current == PaymentStatus.notPaid,
onTap: () => Navigator.of(context).pop(PaymentStatus.notPaid),
),
ListTile(
title: const Text('Not occupied'),
selected: current == PaymentStatus.notOccupied,
onTap: () =>
Navigator.of(context).pop(PaymentStatus.notOccupied),
),
ListTile(
title: const Text('Pending'),
selected: current == PaymentStatus.pending,
@@ -91,20 +97,6 @@ class HomeScreen extends StatelessWidget {
RentController controller,
RentTableRow row,
) async {
if (row.status == PaymentStatus.notOccupied) {
if (!context.mounted) {
return;
}
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text(
'Use Settings -> Unit occupied to manage not-occupied months.',
),
),
);
return;
}
final nextStatus = await _showStatusPicker(context, row.status);
if (!context.mounted) {
return;
@@ -114,8 +106,9 @@ class HomeScreen extends StatelessWidget {
}
double? paidUsd;
if (nextStatus == PaymentStatus.onTime ||
nextStatus == PaymentStatus.late) {
if (nextStatus == PaymentStatus.onTime) {
paidUsd = controller.settings.rentUsd;
} else if (nextStatus == PaymentStatus.late) {
paidUsd = await _showPaidUsdDialog(
context,
initialValue: row.usdAmount ?? controller.settings.rentUsd,
@@ -186,8 +179,11 @@ class HomeScreen extends StatelessWidget {
children: <Widget>[
_YearSwitcher(
year: controller.selectedYear,
onPrevious: () =>
controller.selectYear(controller.selectedYear - 1),
onPrevious: controller.canSelectPreviousYear
? () => controller.selectYear(
controller.selectedYear - 1,
)
: null,
onNext: controller.selectedYear < DateTime.now().year
? () => controller.selectYear(
controller.selectedYear + 1,
@@ -282,7 +278,7 @@ class HomeScreen extends StatelessWidget {
'Total: ${usdCurrency.format(totalUsd)} | ${sekCurrency.format(totalSek)}',
style: Theme.of(context).textTheme.titleMedium,
),
const SizedBox(height: 12),
FilledButton.icon(
onPressed: () async {
await controller.markCurrentMonthPaidManually();
@@ -337,7 +333,7 @@ class _YearSwitcher extends StatelessWidget {
});
final int year;
final VoidCallback onPrevious;
final VoidCallback? onPrevious;
final VoidCallback? onNext;
@override