LCOV - code coverage report
Current view: top level - lib/pages/budget/widgets - budget_line_widget.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 0 54 0.0 %
Date: 2024-10-04 11:09:33 Functions: 0 0 -

          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_design.dart';
       5             : import 'package:app_finance/_classes/structure/navigation/app_route.dart';
       6             : import 'package:app_finance/_configs/custom_text_theme.dart';
       7             : import 'package:app_finance/_configs/theme_helper.dart';
       8             : import 'package:app_finance/_ext/build_context_ext.dart';
       9             : import 'package:app_finance/charts/bar_horizontal_single.dart';
      10             : import 'package:app_finance/design/generic/base_swipe_widget.dart';
      11             : import 'package:app_finance/design/wrapper/number_wrapper.dart';
      12             : import 'package:app_finance/design/wrapper/row_widget.dart';
      13             : import 'package:app_finance/design/wrapper/tap_widget.dart';
      14             : import 'package:app_finance/design/wrapper/text_wrapper.dart';
      15             : import 'package:flutter/material.dart';
      16             : 
      17             : class BudgetLineWidget extends StatelessWidget {
      18             :   final String uuid;
      19             :   final String title;
      20             :   final String details;
      21             :   final String description;
      22             :   final double progress;
      23             :   final String amount;
      24             :   final Color color;
      25             :   final IconData icon;
      26             :   final double width;
      27             :   final String route;
      28             :   final bool hidden;
      29             :   final bool showDivider;
      30             :   final int count;
      31             : 
      32           0 :   const BudgetLineWidget({
      33             :     super.key,
      34             :     required this.uuid,
      35             :     required this.title,
      36             :     required this.details,
      37             :     required this.description,
      38             :     required this.color,
      39             :     required this.amount,
      40             :     required this.icon,
      41             :     required this.width,
      42             :     this.count = 1,
      43             :     this.hidden = false,
      44             :     this.progress = 1,
      45             :     this.route = '',
      46             :     this.showDivider = true,
      47             :   });
      48             : 
      49           0 :   @override
      50             :   Widget build(BuildContext context) {
      51           0 :     if (hidden) {
      52             :       return ThemeHelper.emptyBox;
      53             :     }
      54           0 :     final indent = ThemeHelper.getIndent();
      55           0 :     final textTheme = context.textTheme;
      56             :     const iconSize = 18.0;
      57           0 :     return BaseSwipeWidget(
      58             :       routePath: AppRoute.budgetEditRoute,
      59           0 :       uuid: uuid,
      60           0 :       child: TapWidget(
      61             :         tooltip: '',
      62           0 :         route: RouteSettings(name: route, arguments: {routeArguments.uuid: uuid}),
      63           0 :         child: Column(
      64           0 :           crossAxisAlignment: AppDesign.getAlignment(),
      65           0 :           children: [
      66           0 :             count > 2
      67           0 :                 ? Padding(
      68           0 :                     padding: EdgeInsets.symmetric(vertical: indent),
      69           0 :                     child: RowWidget(
      70             :                       chunk: const [20, null, 0.3, 0.15, 0.1],
      71             :                       indent: indent,
      72           0 :                       maxWidth: width,
      73           0 :                       children: [
      74           0 :                         [
      75           0 :                           Icon(icon, color: color, size: iconSize),
      76             :                         ],
      77           0 :                         [
      78           0 :                           TextWrapper(title, style: textTheme.headlineMedium),
      79             :                         ],
      80           0 :                         [
      81           0 :                           Align(
      82             :                             alignment: Alignment.centerRight,
      83           0 :                             child: TextWrapper(description, style: textTheme.numberMedium),
      84             :                           ),
      85             :                         ],
      86           0 :                         [
      87           0 :                           Align(
      88             :                             alignment: Alignment.centerRight,
      89             :                             child:
      90           0 :                                 NumberWidget(amount, colorScheme: context.colorScheme, style: textTheme.numberMedium),
      91             :                           ),
      92             :                         ],
      93           0 :                         [
      94           0 :                           Container(
      95             :                             alignment: Alignment.centerRight,
      96           0 :                             padding: EdgeInsets.only(right: indent * 2),
      97             :                             child:
      98           0 :                                 NumberWidget(details, colorScheme: context.colorScheme, style: textTheme.numberMedium),
      99             :                           ),
     100             :                         ],
     101             :                       ],
     102             :                     ),
     103             :                   )
     104           0 :                 : RowWidget(
     105           0 :                     chunk: [
     106             :                       iconSize,
     107             :                       null,
     108           0 :                       ThemeHelper.getTextWidth(Text(details, style: textTheme.numberMedium)),
     109             :                     ],
     110             :                     indent: indent,
     111           0 :                     maxWidth: width + indent,
     112           0 :                     children: [
     113           0 :                       [
     114           0 :                         Icon(icon, color: color, size: iconSize),
     115             :                       ],
     116           0 :                       if (description != '')
     117           0 :                         [
     118           0 :                           Column(
     119           0 :                             crossAxisAlignment: AppDesign.getAlignment(),
     120           0 :                             children: [
     121           0 :                               TextWrapper(title, style: textTheme.headlineMedium),
     122           0 :                               TextWrapper(description, style: textTheme.numberSmall),
     123             :                             ],
     124             :                           ),
     125             :                         ]
     126             :                       else
     127           0 :                         [
     128           0 :                           Padding(
     129           0 :                             padding: EdgeInsets.fromLTRB(0, indent - 1, 0, indent - 1),
     130           0 :                             child: TextWrapper(title, style: textTheme.headlineMedium),
     131             :                           ),
     132             :                         ],
     133           0 :                       [
     134           0 :                         NumberWidget(details, colorScheme: context.colorScheme, style: textTheme.numberMedium),
     135             :                       ]
     136             :                     ],
     137             :                   ),
     138           0 :             if (showDivider) ...[
     139             :               ThemeHelper.hIndent05,
     140           0 :               BarHorizontalSingle(value: progress, width: width, color: color),
     141             :               ThemeHelper.hIndent05,
     142             :             ],
     143             :           ],
     144             :         ),
     145             :       ),
     146             :     );
     147             :   }
     148             : }

Generated by: LCOV version 1.14