Merge pull request 'my documents added.' (#4) from development_sikander into master
Reviewed-on: http://34.17.52.79/Haroon6138/mohemm-flutter-app/pulls/4master
commit
be86ef38fe
@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22.015" height="22.015" viewBox="0 0 22.015 22.015">
|
||||
<g id="Button" transform="translate(-75.66 64.04) rotate(-45)">
|
||||
<rect id="Rectangle_5860" data-name="Rectangle 5860" width="15.567" height="15.567" rx="7.783" transform="translate(91 16)" fill="#d85323"/>
|
||||
<g id="plus_1" data-name="plus 1" transform="translate(95.001 20.001)">
|
||||
<path id="Vector" d="M0,0V7.756" transform="translate(3.878)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.2"/>
|
||||
<path id="Vector-2" data-name="Vector" d="M0,0H7.756" transform="translate(0 3.878)" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.2"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 757 B |
@ -0,0 +1,4 @@
|
||||
<svg id="google-docs" xmlns="http://www.w3.org/2000/svg" width="18.402" height="24.158" viewBox="0 0 18.402 24.158">
|
||||
<path id="Path_4955" data-name="Path 4955" d="M63.123,24.158H77.278A2.126,2.126,0,0,0,79.4,22.035V7.078H74.447a2.126,2.126,0,0,1-2.123-2.123V0h-9.2A2.126,2.126,0,0,0,61,2.123V22.035A2.126,2.126,0,0,0,63.123,24.158Zm2.831-14.2h8.493a.708.708,0,0,1,0,1.416H65.954a.708.708,0,1,1,0-1.416Zm0,2.831h8.493a.708.708,0,0,1,0,1.416H65.954a.708.708,0,1,1,0-1.416Zm0,2.831h8.493a.708.708,0,0,1,0,1.416H65.954a.708.708,0,1,1,0-1.416Zm0,2.831h5.662a.708.708,0,0,1,0,1.416H65.954a.708.708,0,1,1,0-1.416Z" transform="translate(-61)" fill="#125765"/>
|
||||
<path id="Path_4956" data-name="Path 4956" d="M331.708,14.036h4.54L331,8.789v4.54A.708.708,0,0,0,331.708,14.036Z" transform="translate(-318.26 -8.374)" fill="#2bb8a6"/>
|
||||
</svg>
|
After Width: | Height: | Size: 832 B |
@ -0,0 +1,29 @@
|
||||
class EmployeeDocumentsList {
|
||||
String? dOCUMENTREQUIREDSTATUS;
|
||||
String? dOCUMENTSTATUS;
|
||||
String? dOCUMENTTYPE;
|
||||
String? fUNCTIONNAME;
|
||||
|
||||
EmployeeDocumentsList({
|
||||
this.dOCUMENTREQUIREDSTATUS,
|
||||
this.dOCUMENTSTATUS,
|
||||
this.dOCUMENTTYPE,
|
||||
this.fUNCTIONNAME,
|
||||
});
|
||||
|
||||
EmployeeDocumentsList.fromJson(Map<String, dynamic> json) {
|
||||
dOCUMENTREQUIREDSTATUS = json['DOCUMENT_REQUIRED_STATUS'];
|
||||
dOCUMENTSTATUS = json['DOCUMENT_STATUS'];
|
||||
dOCUMENTTYPE = json['DOCUMENT_TYPE'];
|
||||
fUNCTIONNAME = json['FUNCTION_NAME'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
Map<String, dynamic> data = Map<String, dynamic>();
|
||||
data['DOCUMENT_REQUIRED_STATUS'] = dOCUMENTREQUIREDSTATUS;
|
||||
data['DOCUMENT_STATUS'] = dOCUMENTSTATUS;
|
||||
data['DOCUMENT_TYPE'] = dOCUMENTTYPE;
|
||||
data['FUNCTION_NAME'] = fUNCTIONNAME;
|
||||
return data;
|
||||
}
|
||||
}
|
@ -0,0 +1,174 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:dotted_border/dotted_border.dart';
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
import 'package:mohem_flutter_app/app_state/app_state.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/my_documents/employee_documents_list_model.dart';
|
||||
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
|
||||
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
|
||||
import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart';
|
||||
import 'package:mohem_flutter_app/widgets/my_document_item.dart';
|
||||
import 'package:sizer/sizer.dart';
|
||||
|
||||
class MyDocumentDetailScreen extends StatefulWidget {
|
||||
EmployeeDocumentsList document;
|
||||
final Color color;
|
||||
|
||||
MyDocumentDetailScreen(this.document, this.color, {Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_MyDocumentDetailScreenState createState() {
|
||||
return _MyDocumentDetailScreenState();
|
||||
}
|
||||
}
|
||||
|
||||
class _MyDocumentDetailScreenState extends State<MyDocumentDetailScreen> {
|
||||
DateTime? expiryDate;
|
||||
List<XFile> imagesList = [];
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.white,
|
||||
appBar: AppBarWidget(context, title: widget.document.dOCUMENTTYPE!, showHomeButton: true),
|
||||
body: Column(
|
||||
children: [
|
||||
ListView(
|
||||
padding: const EdgeInsets.all(21),
|
||||
children: [
|
||||
MyDocumentItem(widget.document, widget.color,isNotInDetailView: false),
|
||||
20.height,
|
||||
DynamicTextFieldWidget(
|
||||
LocaleKeys.employeeNumber.tr(),
|
||||
AppState().getUserName!,
|
||||
isInputTypeNum: true,
|
||||
isReadOnly: true,
|
||||
),
|
||||
12.height,
|
||||
PopupMenuButton(
|
||||
child: DynamicTextFieldWidget(
|
||||
"Document Type*",
|
||||
"National ID",
|
||||
isEnable: false,
|
||||
isPopup: true,
|
||||
isInputTypeNum: true,
|
||||
// isReadOnly: true,
|
||||
),
|
||||
itemBuilder: (_) => <PopupMenuItem<int>>[],
|
||||
onSelected: (int popipIndex) async {}),
|
||||
12.height,
|
||||
DynamicTextFieldWidget(
|
||||
"Expiry Date",
|
||||
expiryDate == null ? LocaleKeys.dateRequired.tr() : Utils.getMonthNamedFormat(expiryDate!).replaceAll("-", " "),
|
||||
suffixIconData: Icons.calendar_today,
|
||||
isEnable: false,
|
||||
onTap: () async {
|
||||
DateTime date = await Utils.selectDate(context, expiryDate ?? DateTime.now());
|
||||
String dateString = date.toString().split(' ').first;
|
||||
if (date != expiryDate) {
|
||||
expiryDate = date;
|
||||
setState(() {});
|
||||
}
|
||||
},
|
||||
),
|
||||
12.height,
|
||||
DottedBorder(
|
||||
borderType: BorderType.RRect,
|
||||
radius: const Radius.circular(10),
|
||||
padding: const EdgeInsets.all(12),
|
||||
dashPattern: const <double>[2, 1],
|
||||
color: MyColors.selectedBorderColor,
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Transform.rotate(
|
||||
angle: 45,
|
||||
child: const Icon(Icons.attach_file_rounded, size: 16, color: MyColors.selectedBorderColor),
|
||||
),
|
||||
4.width,
|
||||
"Attach Image".toText14(color: MyColors.selectedBorderColor),
|
||||
],
|
||||
).center,
|
||||
).onPress(() async {
|
||||
ImagePicker picker = ImagePicker();
|
||||
List<XFile> list = await picker.pickMultiImage();
|
||||
if (list.isNotEmpty) {
|
||||
imagesList.addAll(list);
|
||||
var seen = <String>{};
|
||||
imagesList = imagesList.where((image) => seen.add(image.name)).toList();
|
||||
setState(() {});
|
||||
}
|
||||
}),
|
||||
12.height,
|
||||
GridView.builder(
|
||||
padding: EdgeInsets.zero,
|
||||
itemCount: imagesList.length,
|
||||
shrinkWrap: true,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
itemBuilder: (context, index) {
|
||||
return Stack(
|
||||
alignment: Alignment.topRight,
|
||||
children: [
|
||||
AspectRatio(
|
||||
aspectRatio: 1,
|
||||
child: Image.file(
|
||||
File(imagesList[index].path),
|
||||
fit: BoxFit.cover,
|
||||
errorBuilder: (BuildContext context, Object error, StackTrace? stackTrace) {
|
||||
return const Center(child: Text('This image type is not supported'));
|
||||
},
|
||||
),
|
||||
).paddingOnly(top: 6, right: 6),
|
||||
Container(
|
||||
height: 16,
|
||||
width: 16,
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Color(0xffd85323),
|
||||
),
|
||||
child: const Icon(Icons.clear, color: Colors.white, size: 12),
|
||||
).onPress(() {
|
||||
imagesList.removeAt(index);
|
||||
setState(() {});
|
||||
}),
|
||||
],
|
||||
);
|
||||
},
|
||||
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 4,
|
||||
mainAxisSpacing: 8,
|
||||
crossAxisSpacing: 8,
|
||||
childAspectRatio: 1,
|
||||
),
|
||||
)
|
||||
],
|
||||
).expanded,
|
||||
const Divider(height: 1, color: MyColors.lightGreyEFColor),
|
||||
DefaultButton(
|
||||
LocaleKeys.submit.tr(),
|
||||
widget.document.dOCUMENTSTATUS == "Exist" ? null : () {},
|
||||
).paddingOnly(left: 21, right: 21, bottom: 21, top: 14),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,157 @@
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mohem_flutter_app/api/profile_api_client.dart';
|
||||
import 'package:mohem_flutter_app/app_state/app_state.dart';
|
||||
import 'package:mohem_flutter_app/classes/colors.dart';
|
||||
import 'package:mohem_flutter_app/classes/utils.dart';
|
||||
import 'package:mohem_flutter_app/config/routes.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/my_documents/employee_documents_list_model.dart';
|
||||
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart';
|
||||
import 'package:mohem_flutter_app/ui/screens/my_documents/my_document_detail_screen.dart';
|
||||
import 'package:mohem_flutter_app/widgets/my_document_item.dart';
|
||||
|
||||
class MyDocumentsFragment extends StatefulWidget {
|
||||
List<EmployeeDocumentsList>? list;
|
||||
|
||||
MyDocumentsFragment(this.list, {Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_MyDocumentsFragmentState createState() {
|
||||
return _MyDocumentsFragmentState();
|
||||
}
|
||||
}
|
||||
|
||||
class _MyDocumentsFragmentState extends State<MyDocumentsFragment> {
|
||||
int selectedIndex = 0;
|
||||
List<EmployeeDocumentsList>? documentsList;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
documentsList = widget.list;
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
void didUpdateWidget(covariant MyDocumentsFragment oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
if (oldWidget.list != widget.list) {
|
||||
documentsList = widget.list;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
List<EmployeeDocumentsList> documentfilteredList = getTagBySelectedTab(selectedIndex);
|
||||
return Column(
|
||||
children: [
|
||||
GridView.count(
|
||||
crossAxisSpacing: 6,
|
||||
crossAxisCount: 4,
|
||||
childAspectRatio: 79 / 79,
|
||||
shrinkWrap: true,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
padding: const EdgeInsets.only(left: 21, right: 21, bottom: 11, top: 21),
|
||||
children: [
|
||||
gridViewItem(LocaleKeys.allDocuments.tr(), getTagBySelectedTab(0).length.toString(), 0, MyColors.darkTextColor),
|
||||
gridViewItem(LocaleKeys.expiredDocuments.tr(), getTagBySelectedTab(1).length.toString(), 1, MyColors.redA3Color),
|
||||
gridViewItem(LocaleKeys.missingDocuments.tr(), getTagBySelectedTab(2).length.toString(), 2, MyColors.yellowColor00),
|
||||
gridViewItem(LocaleKeys.uploadedDocuments.tr(), getTagBySelectedTab(3).length.toString(), 3, MyColors.greenColor),
|
||||
],
|
||||
),
|
||||
documentsList == null
|
||||
? const SizedBox()
|
||||
: (documentfilteredList.isNotEmpty
|
||||
? ListView.separated(
|
||||
physics: const BouncingScrollPhysics(),
|
||||
padding: const EdgeInsets.only(left: 21, right: 21, bottom: 21, top: 11),
|
||||
itemBuilder: (cxt, index) {
|
||||
return MyDocumentItem(documentfilteredList[index], getColorByDocumentStatus(documentfilteredList[index].dOCUMENTSTATUS!)).onPress(() {
|
||||
Navigator.pushNamed(context, AppRoutes.addDynamicInput,
|
||||
arguments: DynamicListViewParams(documentfilteredList[index].dOCUMENTTYPE!, documentfilteredList[index].fUNCTIONNAME!, selectedEmp: AppState().getUserName, popUntilRoute: AppRoutes.myDocuments));
|
||||
});
|
||||
},
|
||||
separatorBuilder: (cxt, index) => 12.height,
|
||||
itemCount: documentfilteredList.length)
|
||||
: Utils.getNoDataWidget(context).center)
|
||||
.expanded,
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget gridViewItem(String title, String value, int index, Color color) {
|
||||
return Container(
|
||||
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 8),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(15),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: const Color(0xff000000).withOpacity(.05),
|
||||
blurRadius: 26,
|
||||
offset: const Offset(0, 0),
|
||||
),
|
||||
],
|
||||
border: Border.all(color: selectedIndex == index ? MyColors.selectedBorderColor : Colors.white, width: 2),
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
title.toText10(),
|
||||
value.toText20(isBold: true, color: color),
|
||||
],
|
||||
),
|
||||
).onPress(() {
|
||||
setState(() {
|
||||
selectedIndex = index;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Color getColorByDocumentStatus(String status) {
|
||||
Color _color;
|
||||
switch (status) {
|
||||
case "Exist":
|
||||
_color = MyColors.greenColor;
|
||||
break;
|
||||
case "Missing":
|
||||
_color = MyColors.yellowColor00;
|
||||
break;
|
||||
case "Not Exist":
|
||||
_color = MyColors.redA3Color;
|
||||
break;
|
||||
default:
|
||||
_color = MyColors.darkTextColor;
|
||||
break;
|
||||
}
|
||||
return _color;
|
||||
}
|
||||
|
||||
List<EmployeeDocumentsList> getTagBySelectedTab(int index) {
|
||||
List<EmployeeDocumentsList> list = [];
|
||||
switch (index) {
|
||||
case 1:
|
||||
list = documentsList?.where((element) => element.dOCUMENTSTATUS == "Not Exist").toList() ?? [];
|
||||
break;
|
||||
case 2:
|
||||
list = documentsList?.where((element) => element.dOCUMENTSTATUS == "Missing").toList() ?? [];
|
||||
break;
|
||||
case 3:
|
||||
list = documentsList?.where((element) => element.dOCUMENTSTATUS == "Exist").toList() ?? [];
|
||||
break;
|
||||
default:
|
||||
list = documentsList ?? [];
|
||||
break;
|
||||
}
|
||||
return list;
|
||||
}
|
||||
}
|
@ -0,0 +1,132 @@
|
||||
import 'package:easy_localization/easy_localization.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/my_documents/employee_documents_list_model.dart';
|
||||
import 'package:mohem_flutter_app/ui/screens/my_documents/my_documents_fragment.dart';
|
||||
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
|
||||
|
||||
class MyDocumentsScreen extends StatefulWidget {
|
||||
MyDocumentsScreen({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_MyDocumentsScreenState createState() {
|
||||
return _MyDocumentsScreenState();
|
||||
}
|
||||
}
|
||||
|
||||
class _MyDocumentsScreenState extends State<MyDocumentsScreen> {
|
||||
int tabIndex = 0;
|
||||
PageController controller = PageController();
|
||||
|
||||
List<EmployeeDocumentsList>? documentsList;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
getDocuments();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void getDocuments() async {
|
||||
try {
|
||||
documentsList?.clear();
|
||||
Utils.showLoading(context);
|
||||
documentsList = await ProfileApiClient().getEmployeeDocuments();
|
||||
Utils.hideLoading(context);
|
||||
setState(() {});
|
||||
} catch (ex) {
|
||||
Utils.hideLoading(context);
|
||||
Utils.handleException(ex, context, null);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var requiredDocumentsList;
|
||||
var optionalDocumentsList;
|
||||
|
||||
if (documentsList?.isNotEmpty ?? false) {
|
||||
requiredDocumentsList = <EmployeeDocumentsList>[];
|
||||
optionalDocumentsList = <EmployeeDocumentsList>[];
|
||||
documentsList!.forEach((element) {
|
||||
if (element.dOCUMENTREQUIREDSTATUS == "Required") {
|
||||
requiredDocumentsList.add(element);
|
||||
} else {
|
||||
optionalDocumentsList.add(element);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.white,
|
||||
appBar: AppBarWidget(context, title: LocaleKeys.myDocuments.tr(), showHomeButton: true),
|
||||
body: Column(
|
||||
children: [
|
||||
Container(
|
||||
padding: const EdgeInsets.only(left: 21, right: 21, top: 16, bottom: 16),
|
||||
decoration: const BoxDecoration(
|
||||
borderRadius: BorderRadius.only(
|
||||
bottomLeft: Radius.circular(25),
|
||||
bottomRight: Radius.circular(25),
|
||||
),
|
||||
gradient: LinearGradient(
|
||||
transform: GradientRotation(.83),
|
||||
begin: Alignment.topRight,
|
||||
end: Alignment.bottomLeft,
|
||||
colors: [
|
||||
MyColors.gradiantEndColor,
|
||||
MyColors.gradiantStartColor,
|
||||
],
|
||||
),
|
||||
),
|
||||
child: Row(
|
||||
children: [myTab(LocaleKeys.requiredDocuments.tr(), 0), myTab(LocaleKeys.optionalDocuments.tr(), 1)],
|
||||
),
|
||||
),
|
||||
PageView(
|
||||
controller: controller,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
onPageChanged: (int pageIndex) {
|
||||
setState(() {
|
||||
tabIndex = pageIndex;
|
||||
});
|
||||
},
|
||||
children: [MyDocumentsFragment(requiredDocumentsList), MyDocumentsFragment(optionalDocumentsList)],
|
||||
).expanded,
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget myTab(String title, int index) {
|
||||
bool isSelected = (index == tabIndex);
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
title.toText12(color: isSelected ? Colors.white : Colors.white.withOpacity(.74), isCenter: true),
|
||||
4.height,
|
||||
Container(
|
||||
height: 8,
|
||||
width: 8,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: isSelected ? Colors.white : Colors.transparent,
|
||||
),
|
||||
),
|
||||
],
|
||||
).onPress(() {
|
||||
controller.jumpToPage(index);
|
||||
}).expanded;
|
||||
}
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.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/models/my_documents/employee_documents_list_model.dart';
|
||||
import 'package:sizer/sizer.dart';
|
||||
|
||||
class MyDocumentItem extends StatelessWidget {
|
||||
EmployeeDocumentsList document;
|
||||
final Color color;
|
||||
final bool isNotInDetailView;
|
||||
|
||||
MyDocumentItem(this.document, this.color, {Key? key,this.isNotInDetailView = true}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: const Color(0xff000000).withOpacity(.05),
|
||||
blurRadius: 26,
|
||||
offset: const Offset(0, -3),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(10.0),
|
||||
child: Stack(
|
||||
children: [
|
||||
Positioned(
|
||||
top: -35,
|
||||
child: Container(
|
||||
width: 45,
|
||||
height: 45,
|
||||
transform: Matrix4.rotationZ(0.8),
|
||||
color: color,
|
||||
),
|
||||
),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
SvgPicture.asset('assets/images/document.svg').paddingOnly(top: 6),
|
||||
12.width,
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
document.dOCUMENTTYPE!.toText16(),
|
||||
document.dOCUMENTSTATUS!.toText10(color: color),
|
||||
],
|
||||
).expanded,
|
||||
],
|
||||
).expanded,
|
||||
if(isNotInDetailView)
|
||||
const Icon(
|
||||
Icons.arrow_forward,
|
||||
size: 20,
|
||||
color: Color(0xff2E303A),
|
||||
)
|
||||
],
|
||||
).paddingOnly(top: 14, bottom: 18, right: 14, left: 24),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue