import 'package:flutter/material.dart'; import 'package:ftc_mobile_app/dialogs/app_dialogs.dart'; import 'package:ftc_mobile_app/dialogs/widgets/holidays_data_dialog.dart'; import 'package:ftc_mobile_app/ftc_mobile_app.dart'; import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart'; import 'package:ftc_mobile_app/view/custom_widgets/my_circle_image.dart'; import 'package:get/get.dart'; import '../../../models/staffWorkload/StaffWorkloadResponse.dart'; class ViewProfileScreen extends StatefulWidget { const ViewProfileScreen({Key? key}) : super(key: key); @override State createState() => _ViewProfileScreenState(); } class _ViewProfileScreenState extends State { final controller = Get.put(ViewProfileScreenController()); @override Widget build(BuildContext context) { return ObxValue((RxBool isEditable) { final editable = isEditable(); return CustomScaffold( backgroundColor: CustomAppColors.kPrimaryColor, screenKey: controller.screenKey, onScreenTap: controller.removeFocus, showAppBar: true, appBar: // isEditable() ? CustomAppBarTitleOnly(context, titleText: "Your Profile"), // : CustomAppBarWithAction( // context, // titleText: 'Your Profile', // actionText: '\u270E Edit', // actionTextColor: Get.theme.primaryColor, // onActionTap: () { // isEditable.value = true; // }, // ), body: SingleChildScrollView( child: Obx(() { if (controller.detail()?.user == null) { return FrequentFunctions.noWidget; } final detail = controller.detail()!; return Padding( padding: REdgeInsets.symmetric(horizontal: 20), child: Column( children: [ Center( child: Column( mainAxisSize: MainAxisSize.min, children: [ MyCircleImage( imageSize: 80.r, url: "${WebUrls.baseUrl}${detail.user!.profilePictureUrl ?? ""}", errorWidget: CustomImageWidget( imagePath: AssetsManager.kPersonMainIcon, imageColor: CustomAppColors.kDarkBlueTextColor, height: 80.r, width: 80.r, ), ), 4.verticalSpace, CustomTextWidget( text: detail.user!.displayName, fontWeight: FontWeight.w500, fontColor: Colors.black, ) ], ), ), // Container( // padding: EdgeInsets.only(left: 18.w, top: 15.h), // child: Row( // children: [ // // Obx( // // () => TabBarWidget( // // title: "Profile (Client View)", // // selected: controller.viewProfileClient.value, // // onTapFunction: () { // // controller.viewProfileClient.value = true; // // }, // // ), // // ), // // SizedBox( // // width: 12.w, // // ), // // Expanded( // // child: SizedBox( // // width: , // // child: Obx( // // () => TabBarWidget( // // title: "Staff Profile", // // selected: controller.viewProfileClient.isFalse, // // onTapFunction: () => // // controller.viewProfileClient.value = false, // // ), // // ), // // ), // // ), // // Expanded( // child: SizedBox( // width: 12.w, // ), // ), // InkWell( // onTap: () {}, // borderRadius: 20.toRadius(), // child: Padding( // padding: REdgeInsets.symmetric(horizontal: 12, vertical: 6), // child: Row( // mainAxisSize: MainAxisSize.min, // children: [ // CustomImageWidget( // imagePath: AssetsManager.kPencilIcon, // width: 10.w, // height: 10.h, // ), // 4.horizontalSpace, // CustomTextWidget( // text: "Edit", // isExpanded: false, // fontSize: 10.sp, // fontWeight: FontWeight.w700, // fontColor: CustomAppColors.kSecondaryColor), // ], // ), // ), // ), // 12.horizontalSpace, // ], // ), // ), 16.verticalSpace, Padding( padding: EdgeInsets.symmetric( vertical: 6.r, ), child: CustomTextFieldWidget( controller: controller.nameTEC, heading: "Name", isEnabled: editable, ), // child: isEditable() // ? CustomTextFieldWidget( // controller: controller.nameTEC, // heading: "Name", // ) // : SingleItem( // heading: "Name", value: detail.user!.displayName), ), 16.verticalSpace, Obx( () => controller.viewProfileClient.isTrue ? profileClientView : Column( children: [ Row( children: [ Expanded( child: CustomTextFieldWidget( controller: controller.emailTEC, heading: "Email", isEnabled: false, ), // child: SingleItem( // heading: "Email", // value: detail.user!.email ?? ""), ), 8.horizontalSpace, Expanded( child: CustomTextFieldWidget( controller: controller.phoneTEC, heading: "Phone", isEnabled: editable, ), // child: SingleItem( // heading: "Phone", // value: // (detail.user!.phoneNumber ?? "")), ), ], ), 16.verticalSpace, // SingleItem( // heading: "Address", // value: // detail.user!.modelId?.homeAddress ?? ""), CustomTextFieldWidget( controller: controller.addressTEC, heading: "Address", isEnabled: false, ), 16.verticalSpace, CustomTextFieldWidget( controller: TextEditingController( text: detail.kin ?? ""), heading: "Next of kin", isEnabled: false, ), 16.verticalSpace, // SingleItem( // heading: "Next of kin", // value: detail.kin ?? ""), SingleItem( heading: "Total Holidays Left", value: "${detail.staffWorkLoads?.firstOrNull?.holidayAlwnNoOfDys ?? "0"} Days (${detail.staffWorkLoads?.firstOrNull?.holidayAlwnNoOfHours ?? "0"} hours)", onTap: () { if (detail.staffWorkLoads?.firstOrNull != null) {} _onTotalHolidaysBoxTap( detail.staffWorkLoads!.first); }, ), SingleItem( heading: "", value: "Training", onTap: () { Get.toNamed( CustomRouteNames.kTrainingsScreen); }), // SingleItem( // heading: "", // value: "COVID Checks", // onTap: () {}), 12.verticalSpace, Obx(() { return Align( alignment: Alignment.centerLeft, child: IgnorePointer( ignoring: true, child: CustomCheckBox( checkBoxValue: controller.covidCheck(), titleText: "COVID Check", onTap: () { // controller.covidCheck.toggle(); }, ), ), ); }), ], ), ), 20.verticalSpace, editable ? AppDialog.buttonsBar( onButton1Tap: () { isEditable(false); }, onButton2Tap: () {}, button1Text: "Cancel", button2Text: "Update") .paddingOnly(bottom: 12.r) : FrequentFunctions.noWidget, CustomAppButton( buttonText: "LOGOUT", buttonColor: CustomAppColors.kRedColor, borderColor: CustomAppColors.kRedColor, textColor: CustomAppColors.kPrimaryColor, onTap: () { controller.logoutPressed(); }, ), 18.verticalSpace, ], ), ); }), ), ); }, controller.isEditable); } Column get profileClientView { return const Column( children: [ BuildDetailsWidget( title: "My Experience", details: "A quick preview of the text will be shown here. A quick preview of the text will be shown here. shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here.", ), BuildDetailsWidget( title: "About Me", details: "A quick preview of the text will be shown here. A quick preview of the text will be shown here. shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here.", ), BuildDetailsWidget( title: "Things I like to do in my spare time", details: "A quick preview of the text will be shown here. A quick preview of the text will be shown here. shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here.", ), ], ); } _onTotalHolidaysBoxTap(StaffWorkLoads? workLoads) { DateTime date = DateTime.now(); if (workLoads?.endDate.isNotNullOrEmpty() == true) { date = DateTime.parse(workLoads!.endDate!); } final holidayData = HolidayModel( carriedOver: "${workLoads?.carriedOverHours ?? 0} hours", holidayEntitlement: "${workLoads?.holidayEntitlement?.numberOfWeeks ?? 0} weeks (${workLoads?.holidayEntitlement?.numberOfDays ?? 0} days, ${workLoads?.holidayEntitlement?.numberOfHours ?? 0} hours)", holidayAllowance: "${workLoads?.holidayAlwnNoOfDys ?? 0} days (${workLoads?.holidayAlwnNoOfHours ?? 0} hours)", remainingHolidays: "${workLoads?.holidaysRemaining ?? 0} days (${workLoads?.holidayAlwnNoOfHours ?? 0} hours)", timeLeftBeforeYearEnd: "${date.difference(DateTime.now()).inDays} days", ); showDialog( context: context, builder: (BuildContext context) { return HolidaysDataDialog(holidayModel: holidayData); }); } @override void dispose() { controller.dispose(); super.dispose(); } } class SingleItem extends StatelessWidget { const SingleItem({ super.key, required this.heading, required this.value, this.onTap, }); final String heading; final String value; final VoidCallback? onTap; @override Widget build(BuildContext context) { return Padding( padding: REdgeInsets.symmetric(vertical: 10.0), child: InkWell( onTap: onTap, child: Container( decoration: BoxDecoration( border: Border.all(color: CustomAppColors.kSmokeColor)), padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 10.h), child: Row( children: [ Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ (heading.isEmpty) ? FrequentFunctions.noWidget : CustomTextWidget( alignment: Alignment.topLeft, textAlign: TextAlign.left, text: heading, fontWeight: FontWeight.w500, isExpanded: false, fontSize: 10.sp, fontColor: CustomAppColors.kLightTextColor, ).paddingOnly(bottom: 4), CustomTextWidget( alignment: Alignment.topLeft, textAlign: TextAlign.left, text: value, fontWeight: FontWeight.w600, isExpanded: false, fontSize: 13.sp, fontColor: CustomAppColors.kDarkBlueTextColor, ), ], ), onTap != null ? const Spacer() : Container(), onTap != null ? Transform.rotate( angle: 3.1415 * 3.5, child: const Icon( Icons.arrow_drop_down, ), ) : Container(), ], ), ), ), ); } } class TabBarWidget extends StatelessWidget { const TabBarWidget({ super.key, required this.selected, required this.title, this.onTapFunction, }); final bool selected; final String title; final VoidCallback? onTapFunction; @override Widget build(BuildContext context) { return InkWell( onTap: onTapFunction, child: Container( // width: 141.w, height: 22.h, padding: EdgeInsets.symmetric(horizontal: 12.w), decoration: BoxDecoration( color: selected ? CustomAppColors.kSecondaryColor : CustomAppColors.kPrimaryColor, borderRadius: BorderRadius.circular(20.r), border: Border.all( color: selected ? CustomAppColors.kSecondaryColor : CustomAppColors.kSmokeColor), ), child: CustomTextWidget( text: title, isExpanded: false, fontColor: selected ? CustomAppColors.kPrimaryColor : CustomAppColors.kBlackColor, fontSize: 14.sp, fontWeight: FontWeight.w500, ), ), ); } } class BuildDetailsWidget extends StatelessWidget { const BuildDetailsWidget({ super.key, required this.details, required this.title, }); final String title; final String details; @override Widget build(BuildContext context) { return Padding( padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 20.w), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: EdgeInsets.only(bottom: 8.h), child: CustomTextWidget( isExpanded: false, text: title, fontWeight: FontWeight.w600, fontColor: CustomAppColors.kDarkBlueTextColor, fontSize: 14.sp), ), Container( padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 12.h), decoration: BoxDecoration( border: Border.all(color: CustomAppColors.kLightTextColor), borderRadius: BorderRadius.circular(10.r)), child: CustomTextWidget( alignment: Alignment.centerLeft, textAlign: TextAlign.left, text: details, isExpanded: false, fontSize: 10.sp, fontColor: CustomAppColors.kBlackColor, ), ), ], ), ); } }