import 'package:drift/drift.dart' show Value; import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; import 'package:okane/database/sqlite.dart'; import 'package:okane/i18n/strings.g.dart'; import 'package:okane/ui/utils.dart'; enum LoanChangeType { owe, loan } class AddLoanChangePopup extends StatefulWidget { final VoidCallback onDone; final LoanDto loan; const AddLoanChangePopup({ super.key, required this.onDone, required this.loan, }); @override AddLoanPopupState createState() => AddLoanPopupState(); } class AddLoanPopupState extends State { LoanChangeType _loanChangeType = LoanChangeType.loan; final TextEditingController _amountController = TextEditingController( text: "0.00", ); DateTime _selectedDate = DateTime.now(); @override Widget build(BuildContext context) { return Column( mainAxisSize: MainAxisSize.min, children: [ SegmentedButton( segments: [ ButtonSegment(value: LoanChangeType.loan, label: Text("Loan")), ButtonSegment(value: LoanChangeType.owe, label: Text("Owe")), ], selected: {_loanChangeType}, onSelectionChanged: (values) { setState(() { _loanChangeType = values.first; }); }, ), TextField( decoration: InputDecoration( icon: Icon(Icons.euro), hintText: "Amount", ), controller: _amountController, keyboardType: TextInputType.numberWithOptions( signed: false, decimal: true, ), ), Row( children: [ Text("Date"), OutlinedButton( onPressed: () async { final dt = await showDatePicker( context: context, initialDate: _selectedDate, firstDate: DateTime(1), lastDate: DateTime(9999), ); if (dt == null) return; setState(() => _selectedDate = dt); }, child: Text(formatDateTime(_selectedDate)), ), ], ), Align( alignment: Alignment.centerRight, child: OutlinedButton( onPressed: () async { final sign = switch (_loanChangeType) { LoanChangeType.owe => -1, LoanChangeType.loan => 1, }; await GetIt.I.get().loansDao.upsertLoanChange( LoanChangesCompanion( amount: Value( sign * double.parse(_amountController.text).abs(), ), date: Value(DateTime.now()), loanId: Value(widget.loan.loan.id), ), ); widget.onDone(); }, child: Text(t.modals.add), ), ), ], ); } }