LCOV - code coverage report
Current view: top level - lib/design/wrapper - required_widget.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 14 32 43.8 %
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_locale.dart';
       5             : import 'package:app_finance/_configs/theme_helper.dart';
       6             : import 'package:app_finance/_ext/build_context_ext.dart';
       7             : import 'package:app_finance/design/wrapper/row_widget.dart';
       8             : import 'package:app_finance/design/wrapper/text_wrapper.dart';
       9             : import 'package:flutter/material.dart';
      10             : 
      11             : class RequiredWidget extends StatelessWidget {
      12             :   final String title;
      13             :   final bool showError;
      14             : 
      15           2 :   const RequiredWidget({
      16             :     super.key,
      17             :     required this.title,
      18             :     required this.showError,
      19             :   });
      20             : 
      21           4 :   Widget _requiredText(TextTheme textTheme, ColorScheme colorScheme) => RichText(
      22             :         maxLines: 1,
      23             :         overflow: TextOverflow.ellipsis,
      24           2 :         text: TextSpan(
      25           2 :           style: textTheme.bodyLarge,
      26           2 :           children: [
      27           4 :             TextSpan(text: title),
      28           2 :             TextSpan(
      29             :               text: '*',
      30           4 :               semanticsLabel: AppLocale.labels.isRequired,
      31           6 :               style: textTheme.bodyLarge?.copyWith(color: colorScheme.primary),
      32             :             )
      33             :           ],
      34             :         ),
      35             :       );
      36             : 
      37           2 :   @override
      38             :   Widget build(BuildContext context) {
      39           2 :     final textTheme = context.textTheme;
      40           2 :     final colorScheme = context.colorScheme;
      41           2 :     if (!showError) {
      42           2 :       return _requiredText(textTheme, colorScheme);
      43             :     }
      44           0 :     return LayoutBuilder(builder: (context, constraints) {
      45           0 :       final indent = ThemeHelper.getIndent();
      46           0 :       return RowWidget(
      47             :         alignment: MainAxisAlignment.spaceBetween,
      48             :         indent: indent,
      49           0 :         maxWidth: constraints.maxWidth - indent,
      50           0 :         chunk: [null, ThemeHelper.getTextWidth(Text(AppLocale.labels.isRequired)), 12],
      51           0 :         children: [
      52           0 :           [
      53           0 :             _requiredText(textTheme, colorScheme),
      54             :           ],
      55           0 :           [
      56           0 :             Container(
      57             :               alignment: Alignment.centerRight,
      58             :               padding: const EdgeInsets.only(top: 2),
      59           0 :               child: TextWrapper(
      60           0 :                 AppLocale.labels.isRequired,
      61           0 :                 style: TextStyle(
      62           0 :                   color: colorScheme.error,
      63             :                 ),
      64             :               ),
      65             :             ),
      66             :           ],
      67           0 :           [
      68           0 :             Icon(
      69             :               Icons.error,
      70           0 :               semanticLabel: '$title: ${AppLocale.labels.isRequired}',
      71           0 :               color: colorScheme.error,
      72             :             ),
      73             :           ],
      74             :         ],
      75             :       );
      76             :     });
      77             :   }
      78             : }

Generated by: LCOV version 1.14