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/theme_helper.dart';
6 : import 'package:app_finance/design/button/full_sized_button_widget.dart';
7 : import 'package:material_ui/material_ui.dart';
8 :
9 : abstract class AbstractTab<T> extends StatefulWidget {
10 : final bool isFirstBoot;
11 : final Function() setState;
12 : final Function(Widget btn) setButton;
13 :
14 1 : const AbstractTab({
15 : super.key,
16 : required this.setState,
17 : required this.setButton,
18 : required this.isFirstBoot,
19 : });
20 : }
21 :
22 : abstract class AbstractTabState<T extends AbstractTab> extends State<T> {
23 : String getButtonTitle();
24 :
25 : Widget buildContent(BuildContext context, BoxConstraints constraints);
26 :
27 4 : void updateState() => widget.setState();
28 :
29 1 : IconData getButtonIcon() => Icons.navigate_next;
30 :
31 1 : Widget buildButton(BuildContext context, BoxConstraints constraints) {
32 1 : return FullSizedButtonWidget(
33 : constraints: constraints,
34 1 : onPressed: updateState,
35 2 : title: getButtonTitle() != ''
36 4 : ? '${getButtonTitle()} (${AppLocale.labels.goNextTooltip})'
37 2 : : AppLocale.labels.goNextTooltip,
38 1 : icon: getButtonIcon(),
39 : );
40 : }
41 :
42 1 : @override
43 : Widget build(BuildContext context) {
44 1 : double indent = ThemeHelper.getIndent(2);
45 2 : return LayoutBuilder(builder: (context, constraints) {
46 2 : if (widget.isFirstBoot) {
47 3 : WidgetsBinding.instance.addPostFrameCallback((_) {
48 4 : widget.setButton(buildButton(context, constraints));
49 : });
50 : return ThemeHelper.emptyBox;
51 : }
52 1 : return Container(
53 1 : margin: EdgeInsets.all(indent),
54 1 : child: buildContent(context, constraints),
55 : );
56 : });
57 : }
58 : }
|