LCOV - code coverage report
Current view: top level - lib/design/wrapper - required_widget.dart Coverage Total Hit
Test: lcov.info Lines: 43.8 % 32 14
Test Date: 2026-11-14 15:04:37 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:material_ui/material_ui.dart';
      10              : 
      11              : class RequiredWidget extends StatelessWidget {
      12              :   final String title;
      13              :   final bool showError;
      14              : 
      15            4 :   const RequiredWidget({
      16              :     super.key,
      17              :     required this.title,
      18              :     required this.showError,
      19              :   });
      20              : 
      21            8 :   Widget _requiredText(TextTheme textTheme, ColorScheme colorScheme) => RichText(
      22              :         maxLines: 1,
      23              :         overflow: TextOverflow.ellipsis,
      24            4 :         text: TextSpan(
      25            4 :           style: textTheme.bodyLarge,
      26            4 :           children: [
      27            8 :             TextSpan(text: title),
      28            4 :             TextSpan(
      29              :               text: '*',
      30            8 :               semanticsLabel: AppLocale.labels.isRequired,
      31           12 :               style: textTheme.bodyLarge?.copyWith(color: colorScheme.primary),
      32              :             )
      33              :           ],
      34              :         ),
      35              :       );
      36              : 
      37            4 :   @override
      38              :   Widget build(BuildContext context) {
      39            4 :     final textTheme = context.textTheme;
      40            4 :     final colorScheme = context.colorScheme;
      41            4 :     if (!showError) {
      42            4 :       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 2.0-1