performance evaluation improvements.
							parent
							
								
									2eedef7c2c
								
							
						
					
					
						commit
						8e94d57dae
					
				| @ -1,114 +0,0 @@ | |||||||
| import 'dart:io'; |  | ||||||
| 
 |  | ||||||
| import 'package:easy_localization/easy_localization.dart'; |  | ||||||
| import 'package:flutter/cupertino.dart'; |  | ||||||
| import 'package:flutter/material.dart'; |  | ||||||
| import 'package:mohem_flutter_app/api/profile_api_client.dart'; |  | ||||||
| import 'package:mohem_flutter_app/classes/colors.dart'; |  | ||||||
| import 'package:mohem_flutter_app/classes/utils.dart'; |  | ||||||
| import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; |  | ||||||
| import 'package:mohem_flutter_app/models/performance.dart'; |  | ||||||
| import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; |  | ||||||
| 
 |  | ||||||
| class PerformanceAppraisal extends StatefulWidget { |  | ||||||
|   const PerformanceAppraisal({Key? key}) : super(key: key); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   _PerformanceAppraisalState createState() => _PerformanceAppraisalState(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class _PerformanceAppraisalState extends State<PerformanceAppraisal> { |  | ||||||
|   List<GetPerformanceAppraisalList> performance = []; |  | ||||||
|   @override |  | ||||||
|   void initState() { |  | ||||||
|     getPerformanceAppraisal(); |  | ||||||
|     super.initState(); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   Widget build(BuildContext context) { |  | ||||||
|     return Scaffold( |  | ||||||
|       backgroundColor: MyColors.backgroundColor, |  | ||||||
|       appBar: AppBarWidget( |  | ||||||
|         context, |  | ||||||
|         title: LocaleKeys.performance.tr(), |  | ||||||
|       ), |  | ||||||
|       body: performance.isNotEmpty |  | ||||||
|           ? SingleChildScrollView( |  | ||||||
|               child: Container( |  | ||||||
|                   width: double.infinity, |  | ||||||
|                   padding: const EdgeInsets.only(left: 12, right: 12, top: 10, bottom: 10), |  | ||||||
|                   child: Column(children: [ |  | ||||||
|                     Row(children: [Expanded(flex: 1, child: getPerformanceCard(performance.first))]), |  | ||||||
|                     GridView.count( |  | ||||||
|                       crossAxisCount: 2, |  | ||||||
|                       shrinkWrap: true, |  | ||||||
|                         childAspectRatio:1.3, |  | ||||||
|                       children: performance |  | ||||||
|                           .where((GetPerformanceAppraisalList el) => performance.indexOf(el) != 0) |  | ||||||
|                           .map( |  | ||||||
|                             (GetPerformanceAppraisalList item) => getPerformanceCard(item), |  | ||||||
|                           ) |  | ||||||
|                           .toList(), |  | ||||||
|                     ) |  | ||||||
|                   ]))) |  | ||||||
|           : Utils.getNoDataWidget(context), |  | ||||||
|     ); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   Widget getPerformanceCard(GetPerformanceAppraisalList performance) { |  | ||||||
|     return Card( |  | ||||||
|         shape: RoundedRectangleBorder( |  | ||||||
|           borderRadius: BorderRadius.circular(10.0), |  | ||||||
|         ), |  | ||||||
|         child: Padding( |  | ||||||
|             padding: const EdgeInsets.all(15), |  | ||||||
|             child: Column( |  | ||||||
|               crossAxisAlignment: CrossAxisAlignment.start, |  | ||||||
|               children: [ |  | ||||||
|                 Text( |  | ||||||
|                   LocaleKeys.performanceEvaluationIn.tr() + performance.aPPRAISALYEAR.toString(), |  | ||||||
|                   style: const TextStyle(fontWeight: FontWeight.bold), |  | ||||||
|                 ), |  | ||||||
|                 const SizedBox( |  | ||||||
|                   height: 10, |  | ||||||
|                 ), |  | ||||||
|                 SliderTheme( |  | ||||||
|                     data: SliderThemeData(trackHeight: 3, thumbShape: SliderComponentShape.noThumb, overlayShape: SliderComponentShape.noOverlay), |  | ||||||
|                     child: Slider( |  | ||||||
|                         max: 100, |  | ||||||
|                         min: 0, |  | ||||||
|                         inactiveColor: Colors.grey.withOpacity(.4), |  | ||||||
|                         activeColor: Colors.green, |  | ||||||
|                         value: double.parse(performance.aPPRAISALSCORE!), |  | ||||||
|                         onChanged: (value) {}, |  | ||||||
|                         semanticFormatterCallback: (double newValue) { |  | ||||||
|                           return '${newValue.round()}'; |  | ||||||
|                         })), |  | ||||||
|                 const SizedBox( |  | ||||||
|                   height: 10, |  | ||||||
|                 ), |  | ||||||
|                 Text( |  | ||||||
|                   performance.aPPRAISALSCORE.toString() + '%', |  | ||||||
|                   style: const TextStyle( |  | ||||||
|                     fontWeight: FontWeight.bold, |  | ||||||
|                     fontSize: 18, |  | ||||||
|                     color: Colors.green, |  | ||||||
|                   ), |  | ||||||
|                 ), |  | ||||||
|               ], |  | ||||||
|             ))); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void getPerformanceAppraisal() async { |  | ||||||
|     try { |  | ||||||
|       Utils.showLoading(context); |  | ||||||
|       performance = (await ProfileApiClient().getPerformanceAppraisal())!; |  | ||||||
|       setState(() {}); |  | ||||||
|       Utils.hideLoading(context); |  | ||||||
|     } catch (ex) { |  | ||||||
|       Utils.hideLoading(context); |  | ||||||
|       Utils.handleException(ex, context, null); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -0,0 +1,97 @@ | |||||||
|  | import 'package:easy_localization/easy_localization.dart'; | ||||||
|  | import 'package:flutter/cupertino.dart'; | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:mohem_flutter_app/api/profile_api_client.dart'; | ||||||
|  | import 'package:mohem_flutter_app/classes/colors.dart'; | ||||||
|  | import 'package:mohem_flutter_app/classes/utils.dart'; | ||||||
|  | import 'package:mohem_flutter_app/extensions/int_extensions.dart'; | ||||||
|  | import 'package:mohem_flutter_app/extensions/string_extensions.dart'; | ||||||
|  | import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; | ||||||
|  | import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; | ||||||
|  | import 'package:mohem_flutter_app/models/performance.dart'; | ||||||
|  | import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; | ||||||
|  | 
 | ||||||
|  | class PerformanceAppraisal extends StatelessWidget { | ||||||
|  |   PerformanceAppraisal({Key? key}) : super(key: key); | ||||||
|  | 
 | ||||||
|  |   Future<List<GetPerformanceAppraisalList>> getPerformanceAppraisal(context) async { | ||||||
|  |     List<GetPerformanceAppraisalList> performance = []; | ||||||
|  |     try { | ||||||
|  |       Utils.showLoading(context); | ||||||
|  |       performance = await ProfileApiClient().getPerformanceAppraisal(); | ||||||
|  |       Utils.hideLoading(context); | ||||||
|  |     } catch (ex) { | ||||||
|  |       performance = []; | ||||||
|  |       Utils.hideLoading(context); | ||||||
|  |       Utils.handleException(ex, context, null); | ||||||
|  |     } | ||||||
|  |     return performance; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return Scaffold( | ||||||
|  |       backgroundColor: MyColors.backgroundColor, | ||||||
|  |       appBar: AppBarWidget(context, title: LocaleKeys.performance.tr()), | ||||||
|  |       body: FutureBuilder( | ||||||
|  |         future: getPerformanceAppraisal(context), | ||||||
|  |         builder: (cxt, snapShot) { | ||||||
|  |           if (snapShot.connectionState == ConnectionState.done) { | ||||||
|  |             if (snapShot.hasData) { | ||||||
|  |               List<GetPerformanceAppraisalList> performance = snapShot.data as List<GetPerformanceAppraisalList>; | ||||||
|  |               if (performance.isNotEmpty) { | ||||||
|  |                 return ListView( | ||||||
|  |                   padding: const EdgeInsets.all(0), | ||||||
|  |                   children: [ | ||||||
|  |                     getPerformanceCard(performance.first).paddingOnly(left: 21, right: 21, top: 21), | ||||||
|  |                     GridView.count( | ||||||
|  |                       physics: const NeverScrollableScrollPhysics(), | ||||||
|  |                       crossAxisCount: 2, | ||||||
|  |                       mainAxisSpacing: 13, | ||||||
|  |                       crossAxisSpacing: 13, | ||||||
|  |                       shrinkWrap: true, | ||||||
|  |                       childAspectRatio: 160 / 125, | ||||||
|  |                       padding: const EdgeInsets.only(left: 21, right: 21, bottom: 21, top: 14), | ||||||
|  |                       children: performance | ||||||
|  |                           .where((GetPerformanceAppraisalList el) => performance.indexOf(el) != 0) | ||||||
|  |                           .map( | ||||||
|  |                             (GetPerformanceAppraisalList item) => getPerformanceCard(item, isGrid: true), | ||||||
|  |                           ) | ||||||
|  |                           .toList(), | ||||||
|  |                     ), | ||||||
|  |                   ], | ||||||
|  |                 ); | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |             return Utils.getNoDataWidget(context); | ||||||
|  |           } | ||||||
|  |           return const SizedBox(); | ||||||
|  |         }, | ||||||
|  |       ), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   Widget getPerformanceCard(GetPerformanceAppraisalList performance, {bool isGrid = false}) { | ||||||
|  |     return Column( | ||||||
|  |       crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |       children: [ | ||||||
|  |         Container( | ||||||
|  |           padding: const EdgeInsets.only(left: 12, right: 12, top: 2, bottom: 2), | ||||||
|  |           decoration: Utils.containerRadius(MyColors.greenColor, 5), | ||||||
|  |           child: "Excellent".toText10(color: Colors.white), | ||||||
|  |         ), | ||||||
|  |         (isGrid ? 8 : 4).height, | ||||||
|  |         isGrid ? "${LocaleKeys.performanceEvaluationIn.tr()} ${performance.aPPRAISALYEAR}".toText13() : "${LocaleKeys.performanceEvaluationIn.tr()} ${performance.aPPRAISALYEAR}".toText18(), | ||||||
|  |         4.height, | ||||||
|  |         LinearProgressIndicator( | ||||||
|  |           minHeight: 4, | ||||||
|  |           backgroundColor: MyColors.lightGreyDeColor, | ||||||
|  |           valueColor: const AlwaysStoppedAnimation<Color>(MyColors.greenColor), | ||||||
|  |           value: double.parse(performance.aPPRAISALSCORE!) / 100, | ||||||
|  |         ), | ||||||
|  |         4.height, | ||||||
|  |         isGrid ? "${performance.aPPRAISALSCORE}%".toText13(color: MyColors.greenColor) : "${performance.aPPRAISALSCORE}%".toText20(color: MyColors.greenColor), | ||||||
|  |       ], | ||||||
|  |     ).objectContainerView(radius: 10); | ||||||
|  |   } | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in New Issue