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