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:flutter/material.dart'; 8 : 9 : class BudgetEditPage extends BudgetAddPage { 10 : final String uuid; 11 : 12 0 : const BudgetEditPage({ 13 : super.key, 14 : required this.uuid, 15 : }); 16 : 17 0 : @override 18 0 : BudgetEditPageState createState() => BudgetEditPageState(); 19 : } 20 : 21 : class BudgetEditPageState extends BudgetAddPageState<BudgetEditPage> { 22 : late String uuid; 23 : bool isFirstRun = true; 24 : 25 0 : @override 26 : void initState() { 27 0 : uuid = (widget as BudgetEditPage).uuid; 28 0 : super.initState(); 29 : } 30 : 31 0 : void bindState() { 32 0 : if (!isFirstRun) { 33 : return; 34 : } 35 0 : setState(() { 36 0 : isFirstRun = false; 37 0 : final form = super.state.getByUuid(uuid) as BudgetAppData; 38 0 : title.text = form.title; 39 0 : budgetLimit.text = form.amountLimit.toString(); 40 0 : amountSet = form.amountSet; 41 0 : color = form.color; 42 0 : icon = form.icon; 43 0 : currency = form.currency; 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 : state.update(uuid, data); 63 : } 64 : 65 0 : @override 66 : String getButtonName() { 67 0 : return AppLocale.labels.updateBudgetTooltip; 68 : } 69 : 70 0 : @override 71 : Widget buildContent(BuildContext context, BoxConstraints constraints) { 72 0 : WidgetsBinding.instance.addPostFrameCallback((_) => bindState()); 73 0 : return super.buildContent(context, constraints); 74 : } 75 : }