You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
9.1 KiB
Dart
195 lines
9.1 KiB
Dart
|
1 month ago
|
import 'package:easy_localization/easy_localization.dart';
|
||
|
|
import 'package:flutter/material.dart';
|
||
|
|
import 'package:hmg_patient_app_new/core/app_assets.dart';
|
||
|
|
import 'package:hmg_patient_app_new/core/app_export.dart';
|
||
|
|
import 'package:hmg_patient_app_new/core/dependencies.dart';
|
||
|
|
import 'package:hmg_patient_app_new/core/enums.dart';
|
||
|
|
import 'package:hmg_patient_app_new/core/utils/validation_utils.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/authentication/authentication_view_model.dart';
|
||
|
|
import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart';
|
||
|
|
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
|
||
|
|
import 'package:hmg_patient_app_new/presentation/my_family/widget/family_cards.dart';
|
||
|
|
import 'package:hmg_patient_app_new/theme/colors.dart';
|
||
|
|
import 'package:hmg_patient_app_new/widgets/appbar/app_bar_widget.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:hmg_patient_app_new/widgets/custom_tab_bar.dart';
|
||
|
|
import 'package:hmg_patient_app_new/widgets/dropdown/country_dropdown_widget.dart';
|
||
|
|
import 'package:hmg_patient_app_new/widgets/input_widget.dart';
|
||
|
|
|
||
|
|
class FamilyMedicalScreen extends StatefulWidget {
|
||
|
|
final List<FamilyFileResponseModelLists> profiles;
|
||
|
|
final Function(FamilyFileResponseModelLists) onSelect;
|
||
|
|
|
||
|
|
const FamilyMedicalScreen({
|
||
|
1 month ago
|
super.key,
|
||
|
1 month ago
|
required this.profiles,
|
||
|
|
required this.onSelect,
|
||
|
1 month ago
|
});
|
||
|
1 month ago
|
|
||
|
|
@override
|
||
|
|
State<FamilyMedicalScreen> createState() => _FamilyMedicalScreenState();
|
||
|
|
}
|
||
|
|
|
||
|
|
class _FamilyMedicalScreenState extends State<FamilyMedicalScreen> {
|
||
|
|
List<CustomTabBarModel> tabs = [CustomTabBarModel("", LocaleKeys.medicalFile.tr()), CustomTabBarModel("", LocaleKeys.request.tr())];
|
||
|
|
|
||
|
|
@override
|
||
|
|
Widget build(BuildContext context) {
|
||
|
|
return Scaffold(
|
||
|
|
backgroundColor: AppColors.scaffoldBgColor,
|
||
|
|
appBar: CustomAppBar(
|
||
|
|
onBackPressed: () {
|
||
|
|
Navigator.of(context).pop();
|
||
|
|
},
|
||
|
|
onLanguageChanged: (lang) {},
|
||
|
|
hideLogoAndLang: true,
|
||
|
|
),
|
||
|
|
body: SingleChildScrollView(
|
||
|
|
child: Column(
|
||
|
|
mainAxisSize: MainAxisSize.min,
|
||
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||
|
|
children: [
|
||
|
|
LocaleKeys.myMedicalFile.tr().toText26(color: AppColors.textColor, weight: FontWeight.w600, letterSpacing: -2),
|
||
|
|
SizedBox(height: 25.h),
|
||
|
|
CustomTabBar(
|
||
|
|
tabs: tabs,
|
||
|
|
onTabChange: (int index) {},
|
||
|
|
),
|
||
|
|
SizedBox(height: 25.h),
|
||
|
|
FamilyCards(profiles: widget.profiles, onSelect: widget.onSelect, isShowDetails: true),
|
||
|
|
SizedBox(height: 20.h),
|
||
|
|
],
|
||
|
|
),
|
||
|
|
).paddingSymmetrical(20, 0),
|
||
|
|
bottomSheet: Container(
|
||
|
|
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||
|
|
color: AppColors.whiteColor,
|
||
|
|
customBorder: BorderRadius.only(topLeft: Radius.circular(24), topRight: Radius.circular(24)),
|
||
|
|
),
|
||
|
|
padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 20.h),
|
||
|
|
child: CustomButton(
|
||
|
|
text: "Add a new family member",
|
||
|
|
onPressed: () {
|
||
|
|
showModelSheet();
|
||
|
|
},
|
||
|
|
icon: AppAssets.add_icon,
|
||
|
|
height: 56.h,
|
||
|
|
fontWeight: FontWeight.w600,
|
||
|
|
)),
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
1 month ago
|
Future<void> showModelSheet() async {
|
||
|
1 month ago
|
AuthenticationViewModel authVm = getIt.get<AuthenticationViewModel>();
|
||
|
1 month ago
|
return await showCommonBottomSheetWithoutHeight(context,
|
||
|
1 month ago
|
title: "Add Family Member",
|
||
|
|
child: Column(
|
||
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
||
|
|
children: [
|
||
|
|
"Please fill the below field to add a new family member to your profile".toText16(color: AppColors.textColor, weight: FontWeight.w500),
|
||
|
|
SizedBox(height: 20.h),
|
||
|
|
Container(
|
||
|
|
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(24)),
|
||
|
|
padding: EdgeInsets.symmetric(horizontal: 16.h, vertical: 8.h),
|
||
|
|
child: Column(
|
||
|
|
children: [
|
||
|
|
CustomCountryDropdown(
|
||
|
|
countryList: CountryEnum.values,
|
||
|
|
onCountryChange: authVm.onCountryChange,
|
||
|
|
).paddingOnly(top: 8.h, bottom: 16.h),
|
||
|
|
Divider(
|
||
|
|
height: 1.h,
|
||
|
|
color: AppColors.spacerLineColor,
|
||
|
|
),
|
||
|
|
TextInputWidget(
|
||
|
|
labelText: LocaleKeys.nationalIdNumber.tr(),
|
||
|
|
hintText: "xxxxxxxxx",
|
||
|
|
controller: authVm.nationalIdController,
|
||
|
|
// focusNode: _nationalIdFocusNode,
|
||
|
|
isEnable: true,
|
||
|
|
prefix: null,
|
||
|
|
isAllowRadius: true,
|
||
|
|
isBorderAllowed: false,
|
||
|
|
isAllowLeadingIcon: true,
|
||
|
|
autoFocus: true,
|
||
|
|
keyboardType: TextInputType.number,
|
||
|
|
padding: EdgeInsets.symmetric(vertical: 8.h),
|
||
|
|
leadingIcon: AppAssets.student_card,
|
||
|
|
).paddingOnly(top: 8.h, bottom: 8.h),
|
||
|
|
Divider(
|
||
|
|
height: 1.h,
|
||
|
|
color: AppColors.spacerLineColor,
|
||
|
|
),
|
||
|
|
TextInputWidget(
|
||
|
|
labelText: LocaleKeys.phoneNumber.tr(),
|
||
|
|
hintText: "574345434",
|
||
|
|
controller: authVm.phoneNumberController,
|
||
|
|
isEnable: true,
|
||
|
|
prefix: authVm.selectedCountrySignup.countryCode,
|
||
|
|
isAllowRadius: true,
|
||
|
|
isBorderAllowed: false,
|
||
|
|
isAllowLeadingIcon: true,
|
||
|
|
autoFocus: true,
|
||
|
|
keyboardType: TextInputType.number,
|
||
|
|
padding: EdgeInsets.symmetric(vertical: 8.h),
|
||
|
|
leadingIcon: AppAssets.smart_phone,
|
||
|
|
).paddingOnly(top: 8.h, bottom: 4),
|
||
|
|
|
||
|
|
//TextInputWidget(
|
||
|
|
// labelText: widget.isForEmail ? LocaleKeys.email.tr() : LocaleKeys.phoneNumber.tr(),
|
||
|
|
// hintText: widget.isForEmail ? "demo@gmail.com" : "5xxxxxxxx",
|
||
|
|
// controller: widget.textController!,
|
||
|
|
// focusNode: _textFieldFocusNode,
|
||
|
|
// autoFocus: widget.autoFocus,
|
||
|
|
// padding: EdgeInsets.all(8.h),
|
||
|
|
// keyboardType: widget.isForEmail ? TextInputType.emailAddress : TextInputType.number,
|
||
|
|
// onChange: (value) {
|
||
|
|
// if (widget.onChange != null) {
|
||
|
|
// widget.onChange!(value);
|
||
|
|
// }
|
||
|
|
// },
|
||
|
|
// onCountryChange: (value) {
|
||
|
|
// if (widget.onCountryChange != null) {
|
||
|
|
// widget.onCountryChange!(value);
|
||
|
|
// }
|
||
|
|
// },
|
||
|
|
// isEnable: true,
|
||
|
|
// isReadOnly: widget.isFromSavedLogin,
|
||
|
|
// prefix: widget.isForEmail ? null : widget.countryCode,
|
||
|
|
// isBorderAllowed: false,
|
||
|
|
// isAllowLeadingIcon: true,
|
||
|
|
// fontSize: 13.h,
|
||
|
|
// isCountryDropDown: widget.isEnableCountryDropdown,
|
||
|
|
// leadingIcon: widget.isForEmail ? AppAssets.email : AppAssets.smart_phone,
|
||
|
|
// )
|
||
|
|
],
|
||
|
|
),
|
||
|
|
),
|
||
|
|
SizedBox(height: 20.h),
|
||
|
|
CustomButton(
|
||
|
|
text: "Verify the member",
|
||
|
|
onPressed: () {
|
||
|
|
FocusScope.of(context).unfocus();
|
||
|
|
if (ValidationUtils.isValidatedIdAndPhoneWithCountryValidation(
|
||
|
|
nationalId: authVm.nationalIdController.text,
|
||
|
|
selectedCountry: authVm.selectedCountrySignup,
|
||
|
|
phoneNumber: authVm.phoneNumberController.text,
|
||
|
|
onOkPress: () {
|
||
|
|
Navigator.of(context).pop();
|
||
|
|
},
|
||
|
|
)) {}
|
||
|
|
},
|
||
|
|
icon: AppAssets.add_icon,
|
||
|
|
height: 56.h,
|
||
|
|
fontWeight: FontWeight.w600),
|
||
|
|
SizedBox(height: 20.h),
|
||
|
|
],
|
||
|
|
),
|
||
|
|
callBackFunc: () {});
|
||
|
|
}
|
||
|
|
}
|