import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:healthcare_user/Sugar/sugar_calculator.dart'; import 'package:healthcare_user/common/settings.dart'; import 'package:healthcare_user/models/sugar_history_model.dart'; import 'package:flutter_slidable/flutter_slidable.dart'; class SugarHistory extends StatefulWidget { const SugarHistory({Key? key}) : super(key: key); @override State createState() => _SugarHistoryState(); } class _SugarHistoryState extends State { bool isLoading = false; List sugarHistoryList = []; List FilteredList = []; var dateItems = [ 'All', 'last 7 days', 'last one month', 'last one year', ]; var dateItemsVariable = 'All'; Future getSugarHistoryDetails(var selectedRange) async { isLoading = true; var response1 = await AppSettings.getSugarHistory(); print(response1); setState(() { sugarHistoryList = ((jsonDecode(response1)) as List).map((dynamic model) { return SugarHistoryModel.fromJson(model); }).toList(); var now = new DateTime.now(); var now_1w = now.subtract(Duration(days: 7)); var now_1m = new DateTime(now.year, now.month - 1, now.day); var now_1y = new DateTime(now.year - 1, now.month, now.day); if (selectedRange.toString().toUpperCase() == 'LAST 7 DAYS') { FilteredList = sugarHistoryList.where((product) { final date = product.dateForFilter; return now_1w.isBefore(date); }).toList(); } else if (selectedRange.toString().toUpperCase() == 'LAST ONE MONTH') { FilteredList = sugarHistoryList.where((product) { final date = product.dateForFilter; return now_1m.isBefore(date); }).toList(); } else if (selectedRange.toString().toUpperCase() == 'LAST ONE YEAR') { FilteredList = sugarHistoryList.where((product) { final date = product.dateForFilter; return now_1y.isBefore(date); }).toList(); } else { FilteredList = sugarHistoryList; } isLoading = false; }); } @override void initState() { getSugarHistoryDetails(dateItemsVariable); super.initState(); } deleteSugarRecord(sugarInfoId) async { AppSettings.preLoaderDialog(context); bool status = await AppSettings.deleteSugarDetails(sugarInfoId); if (status) { Navigator.of(context, rootNavigator: true).pop(); AppSettings.longSuccessToast("BP record deleted successfully"); await getSugarHistoryDetails(dateItemsVariable); } else { Navigator.of(context, rootNavigator: true).pop(); AppSettings.longFailedToast("BP record deletion failed"); } } Widget renderzUi() { if (FilteredList.length != 0) { FilteredList.sort((a, b) => b.actualDate.compareTo(a.actualDate)); return Column(crossAxisAlignment: CrossAxisAlignment.end, children: [ Padding( padding: EdgeInsets.fromLTRB(10, 10, 10, 10), child: DropdownButtonFormField( // Initial Value value: dateItemsVariable, isExpanded: true, decoration: const InputDecoration( prefixIcon: Icon( Icons.calendar_month, color: primaryColor, ), border: OutlineInputBorder( borderSide: BorderSide(color: primaryColor)), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: primaryColor), ), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: primaryColor), ), labelText: 'Select Date Range', labelStyle: TextStyle( color: greyColor, //<-- SEE HERE ), ), hint: Text('Units'), // Down Arrow Icon //icon: const Icon(Icons.keyboard_arrow_down), // Array list of items items: dateItems.map((String items) { return DropdownMenuItem( value: items, child: Text( items, style: TextStyle( fontSize: 16, ), textAlign: TextAlign.center, )); }).toList(), // After selecting the desired option,it will // change button value to selected value onChanged: (String? newValue) { setState(() { dateItemsVariable = newValue!; }); getSugarHistoryDetails(dateItemsVariable); }, ), ), Expanded( child: ListView.builder( padding: EdgeInsets.all(0), itemCount: FilteredList.length, itemBuilder: (BuildContext context, int index) { return Slidable( key: const ValueKey(0), endActionPane: ActionPane( // A motion is a widget used to control how the pane animates. motion: ScrollMotion(), dragDismissible: false, // A pane can dismiss the Slidable. dismissible: DismissiblePane(onDismissed: () { deleteSugarRecord(FilteredList[index].sugarInfoId); }), // All actions are defined in the children parameter. children: [ // A SlidableAction can have an icon and/or a label. SlidableAction( backgroundColor: Color(0xFFFE4A49), foregroundColor: Colors.white, icon: Icons.delete, label: 'Delete', onPressed: (BuildContext context) { deleteSugarRecord(FilteredList[index].sugarInfoId); }, ), ], ), child: Card( color: Colors.white, child: Padding( padding: EdgeInsets.all(8), child: Row( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Fasting Sugar Value', style: labelTextStyle(), ), SizedBox(height:MediaQuery.of(context).size.height * .01,), Text( 'PostPrandial Sugar Value', style: labelTextStyle(), ), SizedBox(height:MediaQuery.of(context).size.height * .01,), Text( 'Sugar Status', style: labelTextStyle(), ), SizedBox(height:MediaQuery.of(context).size.height * .01,), Text( 'Date', style: labelTextStyle(), ), ], ), SizedBox(width:MediaQuery.of(context).size.width * .01,), Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( ':', style: labelTextStyle(), ), SizedBox(height:MediaQuery.of(context).size.height * .01,), Text( ':', style: labelTextStyle(), ), SizedBox(height:MediaQuery.of(context).size.height * .01,), Text( ':', style: labelTextStyle(), ), SizedBox(height:MediaQuery.of(context).size.height * .01,), Text( ':', style: labelTextStyle(), ), ], ), SizedBox(width:MediaQuery.of(context).size.width * .01,), Expanded(child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( FilteredList[index] .fasting .toString() .toUpperCase(), style: valuesTextStyle()), SizedBox(height:MediaQuery.of(context).size.height * .01,), Text( FilteredList[index] .postPrandial .toString() .toUpperCase(), style: valuesTextStyle()), SizedBox(height:MediaQuery.of(context).size.height * .01,), Text( FilteredList[index] .sugartText .toString() .toUpperCase(), style: TextStyle( color: FilteredList[index] .sugarValueColor, fontSize: 12, fontWeight: FontWeight.bold, overflow: TextOverflow.ellipsis, )), SizedBox(height:MediaQuery.of(context).size.height * .01,), Text( FilteredList[index] .actualDate .toString() .toUpperCase(), style: valuesTextStyle()), ], ),) ], ), ), )); })), ]); } else { return Center( child: Padding( padding: EdgeInsets.fromLTRB(0, 40, 0, 0), child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox( height: MediaQuery.of(context).size.height * .25, ), Text('No data'), SizedBox( height: 20, ), CircleAvatar( backgroundColor: primaryColor, radius: 40, child: IconButton( iconSize: 40, icon: const Icon( Icons.add, color: Colors.white, ), onPressed: () async { Navigator.push(context, MaterialPageRoute(builder: (context) => SugarCalculator())).then((value) { getSugarHistoryDetails(dateItemsVariable); }); }, ), ) ], ), )); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppSettings.appBar('Diabetes'), body: isLoading ? Center( child: CircularProgressIndicator( color: primaryColor, strokeWidth: 5.0, ), ) : renderzUi(), floatingActionButton: Visibility( visible:FilteredList.length!=0, child: CircleAvatar( backgroundColor: buttonColors, radius: 40, child: Column( mainAxisSize: MainAxisSize.min, children: [ IconButton( iconSize: 40, icon: const Icon( Icons.add, color: Colors.black, ), onPressed: () async { Navigator.push(context, MaterialPageRoute(builder: (context) => SugarCalculator())).then((value) { getSugarHistoryDetails(dateItemsVariable); }); }, ), ], ), ), ), ); } }