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/_configs/screen_helper.dart'; 6 : import 'package:app_finance/_configs/theme_helper.dart'; 7 : import 'package:app_finance/pages/_interfaces/abstract_page_state.dart'; 8 : import 'package:app_finance/pages/bill/widgets/expenses_tab.dart'; 9 : import 'package:app_finance/pages/bill/widgets/income_tab.dart'; 10 : import 'package:app_finance/pages/bill/widgets/interface_bill_page_inject.dart'; 11 : import 'package:app_finance/pages/bill/widgets/transfer_tab.dart'; 12 : import 'package:app_finance/design/wrapper/tab_widget.dart'; 13 : import 'package:flutter/material.dart'; 14 : 15 : class BillAddPage extends StatefulWidget { 16 1 : const BillAddPage({super.key}); 17 : 18 1 : @override 19 1 : BillAddPageState createState() => BillAddPageState(); 20 : } 21 : 22 : class BillAddPageState<T extends BillAddPage> extends AbstractPageState<T> { 23 : BillPageInject? inject; 24 : int focus = 1; 25 : 26 1 : @override 27 : Widget buildButton(BuildContext context, BoxConstraints constraints) => 28 2 : inject?.buildButton(context, constraints) ?? ThemeHelper.emptyBox; 29 : 30 1 : @override 31 1 : String getButtonName() => inject?.buttonName ?? ''; 32 : 33 1 : @override 34 1 : String getTitle() => inject?.title ?? ''; 35 : 36 1 : void update(BillPageInject data) { 37 2 : if (data != inject) { 38 6 : WidgetsBinding.instance.addPostFrameCallback((_) => setState(() => inject = data)); 39 : } 40 : } 41 : 42 1 : @override 43 : Widget buildContent(BuildContext context, BoxConstraints constraints) { 44 1 : final isLeft = ScreenHelper.state().isLeftBar; 45 1 : return TabWidget( 46 : type: TabType.secondary, 47 : hasIndent: false, 48 : isLeft: isLeft, 49 1 : focus: focus, 50 0 : callback: (data) => setState(() => focus = data), 51 1 : tabs: [ 52 1 : Tab( 53 : icon: const Icon(Icons.insert_invitation), 54 2 : text: AppLocale.labels.incomeHeadline, 55 : ), 56 1 : Tab( 57 : icon: const Icon(Icons.money_off), 58 2 : text: AppLocale.labels.expenseHeadline, 59 : ), 60 1 : Tab( 61 : icon: const Icon(Icons.transform), 62 2 : text: AppLocale.labels.transferHeadline, 63 : ), 64 : ], 65 1 : children: [ 66 3 : IncomeTab(state: state, isLeft: isLeft, callback: update), 67 3 : ExpensesTab(state: state, isLeft: isLeft, callback: update), 68 3 : TransferTab(state: state, isLeft: isLeft, callback: update), 69 : ], 70 : ); 71 : } 72 : }