import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:healthcare_user/common/settings.dart'; import 'package:day_night_time_picker/day_night_time_picker.dart'; import 'package:intl/intl.dart'; class EditMedicineTimings extends StatefulWidget { var medicineTimings; EditMedicineTimings({this.medicineTimings}); @override State createState() => _EditMedicineTimingsState(); } class _EditMedicineTimingsState extends State { Time _time = Time(hour: 0, minute: 0, second: 0); Time _wakeupTime = Time(hour: 0, minute: 0, second: 0); Time _beforeBreakfastTime = Time(hour: 0, minute: 0, second: 0); Time _afterBreakfastTime = Time(hour: 0, minute: 0, second: 0); Time _beforeLunchTime = Time(hour: 0, minute: 0, second: 0); Time _afterLunchTime = Time(hour: 0, minute: 0, second: 0); Time _eveningTeaTime = Time(hour: 0, minute: 0, second: 0); Time _beforeDinnerTime = Time(hour: 0, minute: 0, second: 0); Time _afterDinnerTime = Time(hour: 0, minute: 0, second: 0); Time _sleepTime = Time(hour: 0, minute: 0, second: 0); DateTime wakeUp = DateTime.now(); String wakeUpfForApi=''; String _beforeBreakfastTimeForApi=''; String _afterBreakfastTimeForApi=''; String _beforeLunchTimeForApi=''; String _afterLunchTimeForApi=''; String _eveningTeaTimeForApi=''; String _beforeDinnerTimeForApi=''; String _afterDinnerTimeForApi=''; String _sleepTimeForApi=''; List timings = [ {'name': 'Wakeup'}, {'name': 'Before breakfast'}, {'name': 'After- breakfast'}, {'name': 'Before lunch'}, {'name': 'After lunch'}, {'name': 'Evening tea'}, {'name': 'Before dinner'}, {'name': 'After dinner'}, {'name': 'Sleep'} ]; @override void initState() { wakeUpfForApi=widget.medicineTimings['wakeUp']; _beforeBreakfastTimeForApi=widget.medicineTimings['beforeBreakfast']; _afterBreakfastTimeForApi=widget.medicineTimings['afterBreakfast']; _beforeLunchTimeForApi=widget.medicineTimings['beforeLunch']; _afterLunchTimeForApi=widget.medicineTimings['afterLunch']; _eveningTeaTimeForApi=widget.medicineTimings['eveningTea']; _beforeDinnerTimeForApi=widget.medicineTimings['beforeDinner']; _afterDinnerTimeForApi=widget.medicineTimings['afterDinner']; _sleepTimeForApi=widget.medicineTimings['sleep']; super.initState(); } Widget textForSelectedTime(int index) { if (index == 0) { return Text( wakeUpfForApi, style: TextStyle(color: Colors.black), ); } else if (index == 1) { return Text( _beforeBreakfastTimeForApi, style: TextStyle(color: Colors.black), ); } else if (index == 2) { return Text( _afterBreakfastTimeForApi, style: TextStyle(color: Colors.black), ); } else if (index == 3) { return Text( _beforeLunchTimeForApi, style: TextStyle(color: Colors.black), ); } else if (index == 4) { return Text( _afterLunchTimeForApi, style: TextStyle(color: Colors.black), ); } else if (index == 5) { return Text( _eveningTeaTimeForApi, style: TextStyle(color: Colors.black), ); } else if (index == 6) { return Text( _beforeDinnerTimeForApi, style: TextStyle(color: Colors.black), ); } else if (index == 7) { return Text( _afterDinnerTimeForApi, style: TextStyle(color: Colors.black), ); } else if (index == 8) { return Text( _sleepTimeForApi, style: TextStyle(color: Colors.black), ); } else { return Container(); } } void onTimeChanged(Time newTime, int index) { setState(() { _time=newTime; }); if (index == 0) { setState(() { _wakeupTime = newTime; }); final now = new DateTime.now(); final dt = DateTime(now.year, now.month, now.day, _wakeupTime.hour, _wakeupTime.minute); final format = DateFormat.jm(); setState(() { wakeUpfForApi=format.format(dt); }); } else if (index == 1) { setState(() { _beforeBreakfastTime = newTime; }); final now = new DateTime.now(); final dt = DateTime(now.year, now.month, now.day, _beforeBreakfastTime.hour, _beforeBreakfastTime.minute); final format = DateFormat.jm(); setState(() { _beforeBreakfastTimeForApi=format.format(dt); }); } else if (index == 2) { setState(() { _afterBreakfastTime = newTime; }); final now = new DateTime.now(); final dt = DateTime(now.year, now.month, now.day, _afterBreakfastTime.hour, _afterBreakfastTime.minute); final format = DateFormat.jm(); setState(() { _afterBreakfastTimeForApi=format.format(dt); }); } else if (index == 3) { setState(() { _beforeLunchTime = newTime; }); final now = new DateTime.now(); final dt = DateTime(now.year, now.month, now.day, _beforeLunchTime.hour, _beforeLunchTime.minute); final format = DateFormat.jm(); setState(() { _beforeLunchTimeForApi=format.format(dt); }); } else if (index == 4) { setState(() { _afterLunchTime = newTime; }); final now = new DateTime.now(); final dt = DateTime(now.year, now.month, now.day, _afterLunchTime.hour, _afterLunchTime.minute); final format = DateFormat.jm(); setState(() { _afterLunchTimeForApi=format.format(dt); }); } else if (index == 5) { setState(() { _eveningTeaTime = newTime; }); final now = new DateTime.now(); final dt = DateTime(now.year, now.month, now.day, _eveningTeaTime.hour, _eveningTeaTime.minute); final format = DateFormat.jm(); setState(() { _eveningTeaTimeForApi=format.format(dt); }); } else if (index == 6) { setState(() { _beforeDinnerTime = newTime; }); final now = new DateTime.now(); final dt = DateTime(now.year, now.month, now.day, _beforeDinnerTime.hour, _beforeDinnerTime.minute); final format = DateFormat.jm(); setState(() { _beforeDinnerTimeForApi=format.format(dt); }); } else if (index == 7) { setState(() { _afterDinnerTime = newTime; }); final now = new DateTime.now(); final dt = DateTime(now.year, now.month, now.day, _afterDinnerTime.hour, _afterDinnerTime.minute); final format = DateFormat.jm(); setState(() { _afterDinnerTimeForApi=format.format(dt); }); } else if (index == 8) { setState(() { _sleepTime = newTime; }); final now = new DateTime.now(); final dt = DateTime(now.year, now.month, now.day, _sleepTime.hour, _sleepTime.minute); final format = DateFormat.jm(); setState(() { _sleepTimeForApi=format.format(dt); }); } } void _selectedDateWithTime(DateTime newTime,int ind){ if (ind == 0) { setState(() { wakeUp = newTime; String formattedDate = DateFormat('yyyy-MM-dd – kk:mm').format(wakeUp); // DateTime parseDate = new DateFormat("dd-MM-yyyy HH:mm:ss").parse(wakeUp); print(formattedDate); }); } /* else if (ind == 1) { setState(() { _beforeBreakfastTime = newTime as Time ; }); } else if (ind == 2) { setState(() { _afterBreakfastTime = newTime as Time; }); } else if (ind == 3) { setState(() { _beforeLunchTime = newTime as Time; }); } else if (ind == 4) { setState(() { _afterLunchTime = newTime as Time; }); } else if (ind == 5) { setState(() { _eveningTeaTime = newTime as Time; }); } else if (ind == 6) { setState(() { _beforeDinnerTime = newTime as Time; }); } else if (ind == 7) { setState(() { _afterDinnerTime = newTime as Time; }); } else if (ind == 8) { setState(() { _sleepTime = newTime as Time; }); }*/ } Widget renderTimings(){ return Column( children: [ Expanded( child: ListView.separated( separatorBuilder: (context, index) => const Divider( height: 4.0, color: Colors.transparent, ), //padding: EdgeInsets.all(8), itemCount: timings.length, itemBuilder: (BuildContext context, int index) { return GestureDetector( onTap: () { Navigator.of(context).push( showPicker( showSecondSelector: true, accentColor: primaryColor, okStyle: TextStyle(color: primaryColor,fontWeight: FontWeight.bold), cancelStyle: TextStyle(color: Colors.red,fontWeight: FontWeight.bold), barrierDismissible: false, blurredBackground: true, borderRadius: 20, disableAutoFocusToNextInput: true, displayHeader: true, context: context, value: _time, //onChange: onTimeChanged, onChange: (val) { onTimeChanged(val, index); }, is24HrFormat: false, sunrise: TimeOfDay( hour: 6, minute: 0), // optional sunset: TimeOfDay(hour: 18, minute: 0), minuteInterval: TimePickerInterval.FIVE, // Optional onChange to receive value as DateTime onChangeDateTime: (DateTime dateTime) { _selectedDateWithTime(dateTime,index); }, ), ); }, child: Card( child: Padding( padding: EdgeInsets.all(10), child: Container( padding: EdgeInsets.fromLTRB(8, 8, 0, 0), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Container( width: MediaQuery.of(context).size.width * .40, child: Text( timings[index]['name'], style: wrapTextStyle(), ), ), Image( image: AssetImage('images/time.png'), width: 30, height: 30, ), textForSelectedTime(index) ], ), ], )), ), ), ); })), Padding(padding: EdgeInsets.fromLTRB(10, 10, 10, 40), child: Row( children: [ ElevatedButton( style: ElevatedButton.styleFrom( primary: primaryColor, // background onPrimary: Colors.white, // foreground ), onPressed: () async { AppSettings.preLoaderDialog(context); bool isOnline = await AppSettings.internetConnectivity(); if(isOnline){ if(_time!=TimeOfDay(hour: 0,minute: 0)){ var payload = new Map(); payload["wakeUp"] = wakeUpfForApi;//_wakeupTime.hour.toString()+':'+_wakeupTime.minute.toString(); payload["beforeBreakfast"] = _beforeBreakfastTimeForApi; payload["afterBreakfast"] = _afterBreakfastTimeForApi; payload["beforeLunch"] = _beforeLunchTimeForApi; payload["afterLunch"] = _afterLunchTimeForApi; payload["eveningTea"] = _eveningTeaTimeForApi; payload["beforeDinner"] = _beforeDinnerTimeForApi; payload["afterDinner"] = _afterDinnerTimeForApi; payload["sleep"] = _sleepTimeForApi; var value = await AppSettings.updateMedicineTimings(payload); var valueResponse = jsonDecode(value); Navigator.of(context,rootNavigator: true).pop(); Navigator.pop(context); //getMedicineTimingsList(); } else{ Navigator.of(context,rootNavigator: true).pop(); AppSettings.longFailedToast('Please select timing' ); } } else{ Navigator.of(context,rootNavigator: true).pop(); AppSettings.longFailedToast('Please check internet' ); } }, child: const Text('Update'), ), ], ) ) ], ); } Future onWillPop() async { final shouldPop = await showDialog(context: context, builder: (context) { return AlertDialog( title: const Text('Do you want to leave this page', style: TextStyle( color: primaryColor, fontSize: 20, )), actionsAlignment: MainAxisAlignment.spaceBetween, actions: [ TextButton( onPressed: () { Navigator.of(context).pop(true); }, child: const Text('Yes', style: TextStyle( color: primaryColor, fontSize: 20, )), ), TextButton( onPressed: () { Navigator.of(context).pop(false); }, child: const Text('No', style: TextStyle( color: primaryColor, fontSize: 20, )), ), ], ); }, ); return shouldPop!; } @override Widget build(BuildContext context) { return WillPopScope( onWillPop: () async => onWillPop(), child:Scaffold( appBar: AppSettings.appBar('Edit Medicine Timings'), body: Container( child: //Text(widget.medicineTimings.toString()) renderTimings(), ) //medicineTimings.length==0?renderUi():renderTimings(), ) ,); } }