import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:intl/intl.dart'; import 'package:top_snackbar_flutter/custom_snack_bar.dart'; import 'package:top_snackbar_flutter/top_snack_bar.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../../config/app_constant.dart'; import '../../../config/lang_enum.dart'; import '../../../config/provider.dart'; import '../../../config/size.dart'; import '../../../config/style.dart'; import '../../../providers/language_provider.dart'; import '../../../providers/map_provider.dart'; import '../../../providers/service_details_provider.dart'; import '../../../providers/urgent_request_provider.dart'; import '../../../utils/text_style.dart'; import '../../../utils/text_widget.dart'; import '../../../widgets/custom_app_bar.dart'; import '../../../widgets/custom_botton_widget.dart'; import '../../../widgets/home_indicator_widget.dart'; import '../date/datetimescreen.dart'; import '../home/home_screen.dart'; import '../map/pick_address_popup.dart'; class EmergencyCallScreen extends StatefulWidget { const EmergencyCallScreen({Key? key}) : super(key: key); @override State createState() => _EmergencyCallScreenState(); } class _EmergencyCallScreenState extends State { final TextEditingController _addressController = TextEditingController(); final hm = SizeConfig.heightMultiplier; final wm = SizeConfig.widthMultiplier; final tm = SizeConfig.textMultiplier; bool isDate = false; bool isKeyboardOpen = false; final FocusNode _focusNode = FocusNode(); final TextEditingController _descriptionController = TextEditingController(); @override void initState() { super.initState(); init(); _focusNode.addListener(_onFocusChange); } @override void dispose() { _focusNode.removeListener(_onFocusChange); super.dispose(); } void _onFocusChange() { setState(() { //print("keyboard opened"); isKeyboardOpen = _focusNode.hasFocus; }); } init() { context.read().getUrgentRequestTechnician(); } @override Widget build(BuildContext context) { final langProvider = Provider.of(context); final urgentRequestProvider = Provider.of(context); final dateTimeProvider = Provider.of(context); final locationProvider = Provider.of(context); return Scaffold( backgroundColor: AppStyle.appBackground, body: GestureDetector( onTap: () { FocusScope.of(context).requestFocus(FocusNode()); FocusScope.of(context).unfocus(); }, child: Stack( children: [ SingleChildScrollView( child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ const CustomAppBar( title: '', thirdWidget: true, ), Padding( padding: EdgeInsets.symmetric( vertical: hm * 3, horizontal: wm * 10), child: Txt( text: "Emergency call", style: tS("lato_bold", 14, FontWeight.bold, AppStyle.black), ), ), Align( alignment: Alignment.center, child: GestureDetector( onTap: () async { if (urgentRequestProvider.technicianPhone == '' || urgentRequestProvider.technicianPhone == 'empty') { showTopSnackBar( Overlay.of(context), CustomSnackBar.info( backgroundColor: AppStyle.buttonBlue, message: langProvider.translate( "There is no Emergency Technician available now!"), ), ); } else { if (await canLaunchUrl(Uri( scheme: 'tel', path: urgentRequestProvider.technicianPhone))) { await launchUrl(Uri( scheme: 'tel', path: urgentRequestProvider.technicianPhone)); } else { log('Error'); } } }, child: SizedBox( height: hm * 4.5, width: wm * 80, child: Image.asset( langProvider.currentLangCode == Language.en ? Consts.callGreenButton : Consts.emergencyButtonAr)), ), ), const SizedBox( height: 10, ), Padding( padding: EdgeInsets.symmetric( vertical: hm * 2, horizontal: wm * 10), child: Txt( text: "Emergency request", style: tS("lato_bold", 14, FontWeight.bold, AppStyle.black), ), ), Align( alignment: Alignment.center, child: GestureDetector( onTap: () { isDate = true; Navigator.push( context, MaterialPageRoute( builder: (context) => const DateTimeScreen())); }, child: Container( height: hm * 4.2, width: wm * 80, decoration: BoxDecoration( borderRadius: BorderRadius.circular(50.0), border: Border.all( color: AppStyle.buttonBlue, width: 0.5, ), color: Colors.white, ), child: Padding( padding: langProvider.currentLangCode == Language.en ? EdgeInsetsDirectional.only(start: wm * 4.5) : EdgeInsetsDirectional.only(end: wm * 4.5), child: Row( children: [ SvgPicture.asset( Consts.calendarIcon, height: 12, color: AppStyle.textFieldHintColor, ), const SizedBox( width: 5, ), Txt( text: isDate ? dateTimeProvider.dateString : "Date And Time", style: tS( "lato_regular", 10, FontWeight.w500, isDate ? AppStyle.black : AppStyle.textFieldHintColor), ), ], ), ), ), ), ), const SizedBox( height: 19, ), Padding( padding: EdgeInsets.symmetric(horizontal: wm * 10), child: GestureDetector( onTap: () async { await moveToMap(context, _addressController); }, child: Container( height: hm * 4.2, width: wm * 80, decoration: BoxDecoration( borderRadius: BorderRadius.circular(50.0), border: Border.all( color: AppStyle.buttonBlue, width: 0.5, ), color: Colors.white, ), child: Padding( padding: EdgeInsets.symmetric(horizontal: wm * 4.5), child: Row( children: [ SvgPicture.asset( Consts.markerIcon, height: 12, color: AppStyle.textFieldHintColor, ), const SizedBox( width: 5, ), SizedBox( width: wm * 60, child: Txt( overflow: TextOverflow.ellipsis, text: locationProvider.draggingAdress != null ? locationProvider.draggingAdress! .results!.first.formattedAddress! : "Select address", style: tS( "lato_regular", 10, FontWeight.w500, locationProvider.draggingAdress != null ? AppStyle.black : AppStyle.textFieldHintColor), ), ), const Expanded(child: SizedBox()), SvgPicture.asset( Consts.getPositionIcon, height: 12, ), ], ), ), ), ), ), // Align( // alignment: Alignment.center, // child: Container( // height: hm*4.2 , // width: wm*80, // decoration: BoxDecoration( // borderRadius: BorderRadius.circular(50.0), // border: Border.all( // color: AppStyle.buttonBlue, // width: 0.5, // ), // color: Colors.white, // ), // child: Padding( // padding: EdgeInsets.symmetric(horizontal:wm*4.5), // // child: Row( // children: [ // SvgPicture.asset(Consts.markerIcon, height: 12,color: AppStyle.textFieldHintColor,), // const SizedBox( width: 5,), // Txt( // text: "Select address", // style: tS( // "lato_regular", 10, FontWeight.w500, AppStyle.textFieldHintColor), // ), // const Expanded(child:SizedBox()), // SvgPicture.asset(Consts.getPositionIcon, height: 12,), // ], // ), // ), // ), // ), const SizedBox( height: 10, ), Padding( padding: EdgeInsets.symmetric( vertical: hm * 2, horizontal: wm * 10), child: Txt( text: "Upload media for more description", style: tS("lato_bold", 14, FontWeight.bold, AppStyle.black), ), ), Padding( padding: EdgeInsets.symmetric(horizontal: wm * 10.0), child: GestureDetector( onTap: () { showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: Txt( text: 'Choose an option', style: tS("lato_regular", 15, FontWeight.w700, AppStyle.black), ), actions: [ TextButton( onPressed: () async { await urgentRequestProvider.getImages(); Navigator.pop(context); }, child: Txt( text: 'Gallery', style: tS("lato_regular", 14, FontWeight.w700, AppStyle.primary), ), ), ], ); }, ); }, child: Container( height: 100, width: wm * 80, decoration: BoxDecoration( borderRadius: BorderRadius.circular(15.0), border: Border.all( color: AppStyle.buttonBlue, width: 0.5, ), color: Colors.white, ), child: urgentRequestProvider.imageList.isNotEmpty ? GridView.builder( itemCount: urgentRequestProvider.imageList.length, gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3), itemBuilder: (BuildContext context, int index) { return Center( child: Image.file(urgentRequestProvider .imageList[index])); }, ) : Align( alignment: Alignment.center, child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ SvgPicture.asset( Consts.cameraIcon, height: hm * 3, ), const SizedBox( height: 5, ), Txt( text: "Upload media", style: tS("lato_regular", 9, FontWeight.normal, AppStyle.black), ), ], ), ), ), ), ), Padding( padding: EdgeInsets.symmetric( vertical: hm * 2, horizontal: wm * 10), child: Txt( text: "Add Comment", style: tS("lato_bold", 14, FontWeight.bold, AppStyle.black), ), ), Padding( padding: EdgeInsets.symmetric(horizontal: wm * 10.0), child: Container( height: 127, width: wm * 80, decoration: BoxDecoration( borderRadius: BorderRadius.circular(15.0), border: Border.all( color: AppStyle.buttonBlue, width: 0.5, ), color: Colors.white, ), child: TextField( focusNode: _focusNode, controller: _descriptionController, // controller: alertDialogState.descriptionController, maxLines: null, style: tS('lato_regular', 10, FontWeight.w600, AppStyle.black), decoration: InputDecoration( hintText: langProvider.translate('Description...'), hintStyle: tS('lato_regular', 9, FontWeight.w600, AppStyle.textCategGrey), contentPadding: const EdgeInsets.symmetric( vertical: 0, horizontal: 20), border: InputBorder.none, ), ), ), ), Align( alignment: Alignment.center, child: Padding( padding: EdgeInsets.only(top: hm * 4, bottom: hm), child: GestureDetector( onTap: () async { await urgentRequestProvider.sendUrgentRequest( _descriptionController.text, DateFormat('E, dd MMM yyyy HH:mm:ss \'GMT\'') .format(dateTimeProvider.dateIsPicked), "testing address 1", 32.0000, 873.66666 // locationProvider // .draggingAdress! // .results! // .first // .formattedAddress!, // locationProvider // .draggingAdress! // .results! // .first // .geometry! // .location! // .lat!, // locationProvider // .draggingAdress! // .results! // .first // .geometry! // .location! // .lng!, ); Navigator.push( context, MaterialPageRoute( builder: (context) => const HomeScreenClient())); }, child: const CustomButtonWidget( height: 35, width: 200, borderRadius: 28, fontSize: 15, fillColor: AppStyle.buttonBlue, borderColor: AppStyle.buttonBlue, textColor: AppStyle.white, text: 'Continue', fontFamily: 'lato-regular', fontWeight: FontWeight.normal, ), ), ), ), ], ), ), isKeyboardOpen ? const SizedBox.shrink() : Column( children: [ const Expanded(child: SizedBox()), SizedBox(child: HomeIndicatorBottomWidget()) ], ), ], ), ), ); } }