import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/route_extensions.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:provider/provider.dart'; class SuggestionsScreen extends StatefulWidget { const SuggestionsScreen({super.key}); @override State createState() => _SuggestionsScreenState(); } class _SuggestionsScreenState extends State { @override void initState() { super.initState(); // Initialize symptom groups based on selected organs WidgetsBinding.instance.addPostFrameCallback((_) { final viewModel = context.read(); viewModel.initializeSymptomGroups(); }); } void _onOptionSelected(int optionIndex) {} void _onNextPressed(SymptomsCheckerViewModel viewModel) { if (viewModel.hasSelectedSymptoms) { // Navigate to triage screen context.navigateWithName(AppRoutes.triageScreen); } else { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Please select at least one option before proceeding'.needTranslation), backgroundColor: AppColors.errorColor, ), ); } } void _onPreviousPressed() { context.pop(); } _buildConfirmationBottomSheet({required BuildContext context, required VoidCallback onConfirm}) { return showCommonBottomSheetWithoutHeight( title: LocaleKeys.notice.tr(context: context), context, child: Utils.getWarningWidget( loadingText: "Are you sure you want to restart the organ selection?".needTranslation, isShowActionButtons: true, onCancelTap: () => Navigator.pop(context), onConfirmTap: () => onConfirm(), ), callBackFunc: () {}, isFullScreen: false, isCloseButtonVisible: true, ); } Widget _buildOptionItem(int index, bool selected, String optionText) { return GestureDetector( onTap: () => _onOptionSelected(index), child: Container( margin: EdgeInsets.only(bottom: 12.h), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ AnimatedContainer( duration: const Duration(milliseconds: 300), curve: Curves.easeInOut, width: 24.w, height: 24.w, decoration: BoxDecoration( color: selected ? AppColors.primaryRedColor : Colors.transparent, borderRadius: BorderRadius.circular(5.r), border: Border.all(color: selected ? AppColors.primaryRedColor : AppColors.borderGrayColor, width: 1.w), ), child: selected ? Icon(Icons.check, size: 16.f, color: AppColors.whiteColor) : null, ), SizedBox(width: 12.w), Expanded( child: Text( optionText, style: TextStyle(fontSize: 14.f, color: AppColors.textColor, fontWeight: FontWeight.w500), ), ), ], ), ), ); } Widget buildFactorsList() { return AnimatedSwitcher( duration: const Duration(milliseconds: 400), transitionBuilder: (Widget child, Animation animation) { final offsetAnimation = Tween( begin: const Offset(1.0, 0.0), end: Offset.zero, ).animate(CurvedAnimation( parent: animation, curve: Curves.easeInOut, )); return SlideTransition( position: offsetAnimation, child: FadeTransition( opacity: animation, child: child, ), ); }, child: Container( width: double.infinity, margin: EdgeInsets.symmetric(horizontal: 24.w), decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r), padding: EdgeInsets.symmetric(vertical: 24.h, horizontal: 20.w), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ...List.generate(4, (index) { return _buildOptionItem(index, false, "currentQuestion.options[index].text"); }), ], ), ), ); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.bgScaffoldColor, body: Consumer( builder: (context, viewModel, _) { return Column( children: [ Expanded( child: CollapsingListView( title: "Suggestions".needTranslation, leadingCallback: () => _buildConfirmationBottomSheet( context: context, onConfirm: () => { context.pop(), context.pop(), }), child: _buildEmptyState(), // child: viewModel.organSymptomsGroups.isEmpty // ? _buildEmptyState() // : Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ // SizedBox(height: 16.h), // ...viewModel.organSymptomsGroups.map((group) { // return Padding( // padding: EdgeInsets.only(bottom: 16.h), // child: Container( // width: double.infinity, // margin: EdgeInsets.symmetric(horizontal: 24.w), // decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r), // padding: EdgeInsets.symmetric(vertical: 24.h, horizontal: 16.w), // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ // Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // Expanded( // child: Text( // 'Possible symptoms related to "${group.organName}"', // style: TextStyle(fontSize: 18.f, fontWeight: FontWeight.w600, color: AppColors.textColor), // ), // ), // ], // ), // SizedBox(height: 24.h), // Wrap( // runSpacing: 12.h, // spacing: 8.w, // children: group.symptoms.map((symptom) { // bool isSelected = viewModel.isSymptomSelected(group.organId, symptom.id); // return GestureDetector( // onTap: () => viewModel.toggleSymptomSelection(group.organId, symptom.id), // child: CustomSelectableChip( // label: symptom.name, // selected: isSelected, // activeColor: AppColors.primaryRedBorderColor, // activeTextColor: AppColors.primaryRedBorderColor, // inactiveBorderColor: AppColors.bottomNAVBorder, // inactiveTextColor: AppColors.textColor, // ), // ); // }).toList(), // ), // ], // ), // ), // ); // }), // ], // ), ), ), _buildStickyBottomCard(context, viewModel), ], ); }, ), ); } Widget _buildEmptyState() { return Center( child: Padding( padding: EdgeInsets.all(24.h), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.info_outline, size: 64.h, color: AppColors.greyTextColor), SizedBox(height: 16.h), Text( 'No organs selected'.needTranslation, style: TextStyle( fontSize: 18.f, fontWeight: FontWeight.w600, color: AppColors.textColor, ), ), SizedBox(height: 8.h), Text( 'Please go back and select organs first'.needTranslation, textAlign: TextAlign.center, style: TextStyle( fontSize: 14.f, color: AppColors.greyTextColor, ), ), ], ), ), ); } Widget _buildStickyBottomCard(BuildContext context, SymptomsCheckerViewModel viewModel) { return Container( decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r), child: Column( mainAxisSize: MainAxisSize.min, children: [ SizedBox(height: 16.h), Row( children: [ Expanded( child: CustomButton( text: "Previous".needTranslation, onPressed: _onPreviousPressed, backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.11), borderColor: Colors.transparent, textColor: AppColors.primaryRedColor, fontSize: 16.f, ), ), SizedBox(width: 12.w), Expanded( child: CustomButton( text: "Next".needTranslation, onPressed: () => _onNextPressed(viewModel), backgroundColor: AppColors.primaryRedColor, borderColor: AppColors.primaryRedColor, textColor: AppColors.whiteColor, fontSize: 16.f, ), ), ], ), SizedBox(height: 24.h), ], ).paddingSymmetrical(24.w, 0), ); } }