From cce878ccaa348661c92030dc75094e94d728ea50 Mon Sep 17 00:00:00 2001 From: Hyperling Date: Thu, 27 Mar 2025 12:15:55 -0700 Subject: [PATCH] Made the input dialog fully item type aware. Fixes issue #1, now all item types can have an item of the same name (such as "Test") rather than only checking the Expense table for the name. --- lib/pages/tracked_item.dart | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/lib/pages/tracked_item.dart b/lib/pages/tracked_item.dart index fd83bf6..7b22af1 100644 --- a/lib/pages/tracked_item.dart +++ b/lib/pages/tracked_item.dart @@ -297,6 +297,21 @@ class _TrackedItemInputDialogState extends State { String amountText = widget.amountText != null ? widget.amountText! : TrackedItem.amountText; + Future> items; + switch (_type) { + case ItemType.expense: + items = DatabaseHelper.instance.getExpenses(); + break; + case ItemType.income: + items = DatabaseHelper.instance.getIncomes(); + break; + case ItemType.asset: + items = DatabaseHelper.instance.getAssets(); + break; + default: + throw UnimplementedError("Cannot find unimplemented type."); + } + return Column( // prevent AlertDialog from taking full vertical height. mainAxisSize: MainAxisSize.min, @@ -336,15 +351,15 @@ class _TrackedItemInputDialogState extends State { ? Text("New ${_type!.title}") : Text("Edit ${_type!.title}"), ), - content: FutureBuilder>( + content: FutureBuilder>( // TODO / TBD -- This should no longer only be Expenses. - future: DatabaseHelper.instance.getExpenses(), + future: items, builder: (BuildContext context, - AsyncSnapshot> snapshot) { + AsyncSnapshot> snapshot) { if (!snapshot.hasData) { return Center(child: Text('Loading...')); } - List expenses = snapshot.data!; + List expenses = snapshot.data!; return Form( key: _formKey, child: Column( @@ -392,7 +407,16 @@ class _TrackedItemInputDialogState extends State { return "$amountText must be a valid number."; } if (double.parse(value) < 0) { - return "Please use the Income page rather than having negative expenses."; + switch (_type) { + case ItemType.expense: + return "Please use the Income page."; + + case ItemType.income: + return "Please use the Expense page."; + + default: + break; + } } if (double.parse(value) < 0.01) { return "$amountText must be one hundreth (0.01) or higher.";