From d5899e742e2a3e172f7d4e184baa980fa172dd69 Mon Sep 17 00:00:00 2001 From: tamslo Date: Thu, 23 Jan 2025 16:43:54 +0100 Subject: [PATCH] refactor(app): clean up list inclusion description --- app/lib/common/widgets/disclaimer_row.dart | 24 +++++++ app/lib/common/widgets/drug_list/builder.dart | 8 +-- ...n.dart => list_inclusion_description.dart} | 64 +++++++------------ app/lib/common/widgets/module.dart | 3 +- .../widgets/annotation_cards/disclaimer.dart | 23 ------- app/lib/onboarding/pages/onboarding.dart | 2 +- app/lib/report/pages/report.dart | 6 +- 7 files changed, 58 insertions(+), 72 deletions(-) create mode 100644 app/lib/common/widgets/disclaimer_row.dart rename app/lib/common/widgets/{list_page_inclusion_description.dart => list_inclusion_description.dart} (56%) diff --git a/app/lib/common/widgets/disclaimer_row.dart b/app/lib/common/widgets/disclaimer_row.dart new file mode 100644 index 00000000..534e4e37 --- /dev/null +++ b/app/lib/common/widgets/disclaimer_row.dart @@ -0,0 +1,24 @@ +import '../module.dart'; + +class DisclaimerRow extends StatelessWidget { + const DisclaimerRow({super.key, required this.icon, required this.text}); + + final Widget icon; + final Widget text; + + @override + Widget build(BuildContext context) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only( + right: PharMeTheme.smallSpace, + ), + child: icon, + ), + Expanded(child: text), + ], + ); + } +} \ No newline at end of file diff --git a/app/lib/common/widgets/drug_list/builder.dart b/app/lib/common/widgets/drug_list/builder.dart index 75023e4f..51c8536a 100644 --- a/app/lib/common/widgets/drug_list/builder.dart +++ b/app/lib/common/widgets/drug_list/builder.dart @@ -163,14 +163,14 @@ class DrugList extends HookWidget { BuildContext context, { double addRightPadding = 0.0 } ) => - ListPageInclusionDescription( + Padding( key: Key('inclusion-description'), - type: ListPageInclusionDescriptionType.medications, - customPadding: EdgeInsets.only( + padding: EdgeInsets.only( left: PharMeTheme.smallSpace, right: PharMeTheme.smallSpace + addRightPadding, - top: PharMeTheme.smallSpace * 1.5, + top: PharMeTheme.mediumSpace, ), + child: ListInclusionDescription.forMedications(), ); @override diff --git a/app/lib/common/widgets/list_page_inclusion_description.dart b/app/lib/common/widgets/list_inclusion_description.dart similarity index 56% rename from app/lib/common/widgets/list_page_inclusion_description.dart rename to app/lib/common/widgets/list_inclusion_description.dart index 562d92da..9c47e1fc 100644 --- a/app/lib/common/widgets/list_page_inclusion_description.dart +++ b/app/lib/common/widgets/list_inclusion_description.dart @@ -2,59 +2,43 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import '../module.dart'; -enum ListPageInclusionDescriptionType { +enum ListInclusionDescriptionType { medications, genes, } -class ListPageInclusionDescription extends StatelessWidget { - const ListPageInclusionDescription({ +class ListInclusionDescription extends StatelessWidget { + const ListInclusionDescription({ super.key, - this.text, - this.customPadding, required this.type, }); - final String? text; - final ListPageInclusionDescriptionType type; - final EdgeInsets? customPadding; + factory ListInclusionDescription.forMedications() => + ListInclusionDescription(type: ListInclusionDescriptionType.medications); + factory ListInclusionDescription.forGenes() => + ListInclusionDescription(type: ListInclusionDescriptionType.genes); + + final ListInclusionDescriptionType type; @override Widget build(BuildContext context) { final inclusionText = context.l10n.included_content_disclaimer_text( - type == ListPageInclusionDescriptionType.medications + type == ListInclusionDescriptionType.medications ? context.l10n.included_content_medications : context.l10n.included_content_genes ); - return PageDescription( - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (text != null) Text(text!), - if (text != null) SizedBox(height: PharMeTheme.smallToMediumSpace), - Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsets.only( - left: PharMeTheme.smallSpace * 1.5, - right: PharMeTheme.smallSpace * 1.5, - top: PharMeTheme.smallSpace * 0.5, - bottom: PharMeTheme.smallSpace, - ), - child: IncludedContentIcon(type: type), - ), - Expanded( - child: Text( - inclusionText, - style: TextStyle(color: PharMeTheme.iconColor), - ), - ), - ], - ), - ], + return DisclaimerRow( + icon: Padding( + padding: EdgeInsets.only( + left: PharMeTheme.smallSpace, + right: PharMeTheme.smallSpace * 0.5, + ), + child: IncludedContentIcon(type: type), + ), + text: Text( + inclusionText, + style: TextStyle(color: PharMeTheme.iconColor), ), - customPadding: customPadding, ); } @@ -68,20 +52,20 @@ class IncludedContentIcon extends StatelessWidget { this.size, }); - final ListPageInclusionDescriptionType type; + final ListInclusionDescriptionType type; final Color? color; final double? size; @override Widget build(BuildContext context) { - final icon = type == ListPageInclusionDescriptionType.medications + final icon = type == ListInclusionDescriptionType.medications ? medicationsIcon : genesIcon; final totalSize = size ?? PharMeTheme.mediumToLargeSpace * 1.5; final iconSize = totalSize * 0.9; final checkIconBackgroundSize = totalSize * 0.5; final checkIconSize = checkIconBackgroundSize * 0.8; - final rightShift = type == ListPageInclusionDescriptionType.medications + final rightShift = type == ListInclusionDescriptionType.medications ? checkIconBackgroundSize / 2 : checkIconBackgroundSize / 4; return Stack( diff --git a/app/lib/common/widgets/module.dart b/app/lib/common/widgets/module.dart index b868f751..5844b6a3 100644 --- a/app/lib/common/widgets/module.dart +++ b/app/lib/common/widgets/module.dart @@ -4,6 +4,7 @@ export 'dialog_action.dart'; export 'dialog_content_text.dart'; export 'dialog_wrapper.dart'; export 'direction_button.dart'; +export 'disclaimer_row.dart'; export 'drug_activity_selection.dart'; export 'drug_list/builder.dart'; export 'drug_list/cubit.dart'; @@ -20,7 +21,7 @@ export 'hyperlink.dart'; export 'indicators.dart'; export 'lifecycle_observer.dart'; export 'list_description.dart'; -export 'list_page_inclusion_description.dart'; +export 'list_inclusion_description.dart'; export 'page_description.dart'; export 'page_indicator_explanation.dart'; export 'page_scaffold.dart'; diff --git a/app/lib/drug/widgets/annotation_cards/disclaimer.dart b/app/lib/drug/widgets/annotation_cards/disclaimer.dart index f990e483..42577853 100644 --- a/app/lib/drug/widgets/annotation_cards/disclaimer.dart +++ b/app/lib/drug/widgets/annotation_cards/disclaimer.dart @@ -45,26 +45,3 @@ class GuidelineDisclaimer extends StatelessWidget { ); } } - -class DisclaimerRow extends StatelessWidget { - const DisclaimerRow({super.key, required this.icon, required this.text}); - - final Widget icon; - final Widget text; - - @override - Widget build(BuildContext context) { - return Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only( - right: PharMeTheme.smallSpace, - ), - child: icon, - ), - Expanded(child: text), - ], - ); - } -} diff --git a/app/lib/onboarding/pages/onboarding.dart b/app/lib/onboarding/pages/onboarding.dart index 08c64974..6309a121 100644 --- a/app/lib/onboarding/pages/onboarding.dart +++ b/app/lib/onboarding/pages/onboarding.dart @@ -53,7 +53,7 @@ class OnboardingPage extends HookWidget { color: Colors.grey.shade600, bottom: DisclaimerCard( iconWidget: IncludedContentIcon( - type: ListPageInclusionDescriptionType.medications, + type: ListInclusionDescriptionType.medications, color: PharMeTheme.onSurfaceText, size: OnboardingDimensions.iconSize, ), diff --git a/app/lib/report/pages/report.dart b/app/lib/report/pages/report.dart index 7000b214..5d96ce1f 100644 --- a/app/lib/report/pages/report.dart +++ b/app/lib/report/pages/report.dart @@ -246,14 +246,14 @@ class ReportPage extends HookWidget { drugsToFilterBy: null, onlyCurrentMedications: false, ); - final inclusionDescription = ListPageInclusionDescription( + final inclusionDescription = Padding( key: Key('included-gene-explanation'), - type: ListPageInclusionDescriptionType.genes, - customPadding: EdgeInsets.only( + padding: EdgeInsets.only( left: PharMeTheme.smallSpace, right: PharMeTheme.smallSpace, top: PharMeTheme.smallSpace * 1.5, ), + child: ListInclusionDescription.forGenes(), ); if (currentMedicationGenes.isEmpty) { return [