import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; import 'package:okane/database/collections/budget.dart'; import 'package:okane/database/collections/expense_category.dart'; import 'package:okane/database/database.dart'; import 'package:okane/ui/state/core.dart'; import 'package:okane/ui/utils.dart'; import 'package:okane/ui/widgets/add_expense_category.dart'; class AddBudgetItemPopup extends StatefulWidget { final VoidCallback onDone; final Budget budget; const AddBudgetItemPopup({super.key, required this.onDone, required this.budget}); @override AddBudgetItemState createState() => AddBudgetItemState(); } class AddBudgetItemState extends State { final _budgetItemAmountEditController = TextEditingController(); ExpenseCategory? _expenseCategory; @override Widget build(BuildContext context) { return Column( mainAxisSize: MainAxisSize.min, children: [ Row( children: [ Text("Expense category"), OutlinedButton( onPressed: () async { final category = await showDialogOrModal( context: context, builder: (_) => AddExpenseCategory(), ); if (category == null) { return; } setState(() => _expenseCategory = category); }, child: Text(_expenseCategory?.name ?? "None"), ), ], ), TextField( decoration: InputDecoration( hintText: "Amount", ), controller: _budgetItemAmountEditController, keyboardType: TextInputType.numberWithOptions(signed: false, decimal: true), ), Row( mainAxisAlignment: MainAxisAlignment.end, children: [ OutlinedButton( onPressed: () async { if (_budgetItemAmountEditController.text.isEmpty || _expenseCategory == null) { return; } if (widget.budget.items.where((i) => i.expenseCategory.value!.name == _expenseCategory!.name).firstOrNull != null) { return; } final item = BudgetItem() ..expenseCategory.value = _expenseCategory ..amount = double.parse(_budgetItemAmountEditController.text); await upsertBudgetItem(item); widget.budget.items.add(item); await upsertBudget(widget.budget); widget.onDone(); }, child: Text("Add"), ), ], ), ], ); } }