Line data Source code
1 : // Copyright 2023 The terCAD team. All rights reserved.
2 : // Use of this source code is governed by a CC BY-NC-ND 4.0 license that can be found in the LICENSE file.
3 :
4 : import 'package:app_finance/_classes/herald/app_locale.dart';
5 : import 'package:app_finance/_classes/structure/budget_app_data.dart';
6 : import 'package:app_finance/pages/budget/budget_add_page.dart';
7 : import 'package:material_ui/material_ui.dart';
8 :
9 : class BudgetEditPage extends BudgetAddPage {
10 0 : const BudgetEditPage({
11 : super.key,
12 : required super.uuid,
13 : });
14 :
15 0 : @override
16 0 : BudgetEditPageState createState() => BudgetEditPageState();
17 : }
18 :
19 : class BudgetEditPageState extends BudgetAddPageState<BudgetEditPage> {
20 : late String uuid;
21 : bool isFirstRun = true;
22 :
23 0 : @override
24 : void initState() {
25 0 : uuid = widget.uuid!;
26 0 : super.initState();
27 : }
28 :
29 0 : void bindState() {
30 0 : if (!isFirstRun) {
31 : return;
32 : }
33 0 : setState(() {
34 0 : isFirstRun = false;
35 0 : final form = super.state.getByUuid(uuid) as BudgetAppData;
36 0 : title.text = form.title;
37 0 : type = form.type;
38 0 : budgetLimit.text = form.amountLimit.toString();
39 0 : amountSet = form.amountSet;
40 0 : color = form.color;
41 0 : icon = form.icon;
42 0 : currency = form.currency;
43 0 : skip = form.skip;
44 : });
45 : }
46 :
47 0 : @override
48 : String getTitle() {
49 0 : return AppLocale.labels.editBudgetHeader;
50 : }
51 :
52 0 : @override
53 : void updateStorage() {
54 0 : var data = state.getByUuid(uuid) as BudgetAppData;
55 0 : data.title = title.text;
56 0 : data.color = color;
57 0 : data.icon = icon;
58 0 : data.amountSet = amountSet;
59 0 : data.amountLimit = double.tryParse(budgetLimit.text) ?? 0.0;
60 0 : data.currency = currency;
61 0 : data.createdAt = DateTime.now();
62 0 : data.skip = skip;
63 0 : state.update(uuid, data);
64 : }
65 :
66 0 : @override
67 0 : String getButtonName() => AppLocale.labels.updateBudgetTooltip;
68 :
69 0 : @override
70 : Widget buildContent(BuildContext context, BoxConstraints constraints) {
71 0 : WidgetsBinding.instance.addPostFrameCallback((_) => bindState());
72 0 : return super.buildContent(context, constraints);
73 : }
74 : }
|