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/_interfaces/interface_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:material_ui/material_ui.dart';
14 :
15 : class BillAddPage extends StatefulWidget {
16 : final int focus;
17 :
18 2 : const BillAddPage({
19 : super.key,
20 : this.focus = 1,
21 : });
22 :
23 2 : @override
24 2 : BillAddPageState createState() => BillAddPageState();
25 : }
26 :
27 : class BillAddPageState<T extends BillAddPage> extends AbstractPageState<T> {
28 : PageInject? inject;
29 : int focus = 1;
30 :
31 2 : @override
32 : void initState() {
33 6 : focus = widget.focus;
34 2 : super.initState();
35 : }
36 :
37 2 : @override
38 : Widget buildButton(BuildContext context, BoxConstraints constraints) =>
39 4 : inject?.buildButton(context, constraints) ?? ThemeHelper.emptyBox;
40 :
41 2 : @override
42 2 : String getButtonName() => inject?.buttonName ?? '';
43 :
44 2 : @override
45 2 : String getTitle() => inject?.title ?? '';
46 :
47 2 : void update(PageInject data) {
48 4 : if (data != inject) {
49 12 : WidgetsBinding.instance.addPostFrameCallback((_) => setState(() => inject = data));
50 : }
51 : }
52 :
53 2 : @override
54 : Widget buildContent(BuildContext context, BoxConstraints constraints) {
55 2 : final isLeft = ScreenHelper.state().isLeftBar;
56 2 : return TabWidget(
57 : type: TabType.secondary,
58 : hasIndent: false,
59 : isLeft: isLeft,
60 2 : focus: focus,
61 0 : callback: (data) => setState(() => focus = data),
62 2 : tabs: [
63 2 : Tab(
64 : icon: const Icon(Icons.insert_invitation),
65 4 : text: AppLocale.labels.incomeHeadline,
66 : ),
67 2 : Tab(
68 : icon: const Icon(Icons.money_off),
69 4 : text: AppLocale.labels.expenseHeadline,
70 : ),
71 2 : Tab(
72 : icon: const Icon(Icons.transform),
73 4 : text: AppLocale.labels.transferHeadline,
74 : ),
75 : ],
76 2 : children: [
77 6 : IncomeTab(state: state, isLeft: isLeft, callback: update),
78 6 : ExpensesTab(state: state, isLeft: isLeft, callback: update),
79 6 : TransferTab(state: state, isLeft: isLeft, callback: update),
80 : ],
81 : );
82 : }
83 : }
|