You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
4.1 KiB
Dart
98 lines
4.1 KiB
Dart
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);
|
|
}
|
|
}
|