Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Sai Srinivas
GEN_ERP_2025
Commits
2a8fa440
Commit
2a8fa440
authored
Oct 14, 2025
by
Sai Srinivas
Browse files
AttendanceScreen and hrm color and responsive
parents
96031396
9e243e0c
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
android/app/build.gradle.kts
View file @
2a8fa440
...
...
@@ -42,8 +42,8 @@ android {
defaultConfig
{
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId
=
"in.webgrid.generp"
minSdk
=
flutter
.
minSdkVersion
targetSdk
=
flutter
.
targetSdkVersion
minSdk
=
23
targetSdk
=
36
versionCode
=
flutter
.
versionCode
versionName
=
flutter
.
versionName
}
...
...
lib/Notifiers/crmProvider/addNewLeadsandProspectsProvider.dart
View file @
2a8fa440
...
...
@@ -949,6 +949,11 @@ class Addnewleadsandprospectsprovider extends ChangeNotifier {
nameError
=
"Please Enter Name"
;
isValid
=
false
;
}
if
(
nameError
==
"Name already exists"
){
isValid
=
false
;
}
if
(
customerMailIdController
.
text
.
trim
().
isNotEmpty
&&
!
RegExp
(
r'\S+@\S+\.\S+'
).
hasMatch
(
customerMailIdController
.
text
))
{
mailIdError
=
"Please enter a proper Email ID"
;
...
...
@@ -963,6 +968,9 @@ class Addnewleadsandprospectsprovider extends ChangeNotifier {
isValid
=
false
;
}
}
if
(
mobileError
==
"Mobile number already exists"
){
isValid
=
false
;
}
// if(designationController.text.trim().isEmpty){
// designationError = "Please enter Designation";
...
...
@@ -973,6 +981,11 @@ class Addnewleadsandprospectsprovider extends ChangeNotifier {
return
isValid
;
}
bool
validateStep2
()
{
bool
isValid
=
true
;
if
(
alternateMobileController
.
text
.
trim
().
isNotEmpty
&&
...
...
lib/screens/AttendanceScreen.dart
View file @
2a8fa440
This diff is collapsed.
Click to expand it.
lib/screens/crm/addLeadsProspectsScreen.dart
View file @
2a8fa440
...
...
@@ -1440,7 +1440,6 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
null
,
TextInputAction
.
done
,
),
errorWidget
(
context
,
provider
.
addressError
),
],
),
...
...
@@ -1620,4 +1619,33 @@ class _AddleadsprospectsscreenState extends State<Addleadsprospectsscreen> {
},
);
}
void
showCustomSnackBar
(
BuildContext
context
,
String
message
)
{
final
snackBar
=
SnackBar
(
behavior:
SnackBarBehavior
.
floating
,
backgroundColor:
Colors
.
black87
,
elevation:
6
,
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
12
),
),
content:
Row
(
children:
[
Icon
(
Icons
.
info_outline
,
color:
Colors
.
white
),
SizedBox
(
width:
12
),
Expanded
(
child:
Text
(
message
,
style:
TextStyle
(
color:
Colors
.
white
,
fontSize:
16
,
fontWeight:
FontWeight
.
w500
,
),
),
),
],
),
duration:
Duration
(
seconds:
3
),
);
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
snackBar
);
}
}
lib/screens/hrm/HrmDashboardScreen.dart
View file @
2a8fa440
...
...
@@ -30,11 +30,43 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
"Casual Leave List"
];
// Responsive text size function
double
getResponsiveTextSize
(
BuildContext
context
,
double
baseSize
)
{
final
double
scale
=
MediaQuery
.
of
(
context
).
textScaleFactor
;
final
double
width
=
MediaQuery
.
of
(
context
).
size
.
width
;
if
(
width
<
360
)
{
// Small phones
return
baseSize
*
0.85
;
}
else
if
(
width
<
400
)
{
// Medium phones
return
baseSize
;
}
else
{
// Large phones
return
baseSize
*
1.1
;
}
}
// Responsive padding function
double
getResponsivePadding
(
BuildContext
context
)
{
final
double
width
=
MediaQuery
.
of
(
context
).
size
.
width
;
return
width
*
0.04
;
// 4% of screen width
}
// Responsive height function
double
getResponsiveHeight
(
BuildContext
context
,
double
baseHeight
)
{
final
double
height
=
MediaQuery
.
of
(
context
).
size
.
height
;
if
(
height
<
700
)
{
// Small height devices
return
baseHeight
*
0.85
;
}
else
if
(
height
<
800
)
{
// Medium height devices
return
baseHeight
;
}
else
{
// Large height devices
return
baseHeight
*
1.15
;
}
}
@override
void
initState
()
{
super
.
initState
();
Future
.
microtask
(
()
=>
Provider
.
of
<
HrmAccessiblePagesProvider
>(
()
=>
Provider
.
of
<
HrmAccessiblePagesProvider
>(
context
,
listen:
false
,
).
fetchAccessiblePages
(
context
),
...
...
@@ -43,6 +75,9 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
@override
Widget
build
(
BuildContext
context
)
{
final
bool
isSmallScreen
=
MediaQuery
.
of
(
context
).
size
.
width
<
360
;
final
bool
isLargeScreen
=
MediaQuery
.
of
(
context
).
size
.
width
>
400
;
return
SafeArea
(
top:
false
,
child:
Scaffold
(
...
...
@@ -55,14 +90,14 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
onTap:
()
=>
Navigator
.
pop
(
context
,
true
),
child:
SvgPicture
.
asset
(
"assets/svg/appbar_back_button.svg"
,
height:
25
,
height:
isSmallScreen
?
22
:
25
,
),
),
const
SizedBox
(
width:
10
),
SizedBox
(
width:
isSmallScreen
?
8
:
10
),
Text
(
"HRM"
,
style:
TextStyle
(
fontSize:
18
,
fontSize:
getResponsiveTextSize
(
context
,
18
)
,
fontFamily:
"Plus Jakarta Sans"
,
fontWeight:
FontWeight
.
w600
,
color:
AppColors
.
semi_black
,
...
...
@@ -80,13 +115,16 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
children:
[
Container
(
width:
double
.
infinity
,
height:
490
,
height:
getResponsiveHeight
(
context
,
490
)
,
color:
const
Color
(
0xffF6F6F8
),
),
Container
(
width:
double
.
infinity
,
height:
490
,
padding:
const
EdgeInsets
.
only
(
top:
1
,
bottom:
30
),
height:
getResponsiveHeight
(
context
,
490
),
padding:
EdgeInsets
.
only
(
top:
1
,
bottom:
getResponsiveHeight
(
context
,
30
)
),
decoration:
const
BoxDecoration
(
gradient:
LinearGradient
(
colors:
[
...
...
@@ -101,10 +139,13 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
),
Container
(
width:
double
.
infinity
,
padding:
const
EdgeInsets
.
only
(
top:
1
,
bottom:
30
),
padding:
EdgeInsets
.
only
(
top:
1
,
bottom:
getResponsiveHeight
(
context
,
30
)
),
child:
Image
.
asset
(
"assets/images/vector.png"
,
height:
230
,
height:
getResponsiveHeight
(
context
,
230
)
,
width:
double
.
infinity
,
fit:
BoxFit
.
fitWidth
,
),
...
...
@@ -116,26 +157,27 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
/// Top Illustration & Button
Container
(
width:
double
.
infinity
,
padding:
const
EdgeInsets
.
only
(
top:
60
,
bottom:
30
),
padding:
EdgeInsets
.
only
(
top:
getResponsiveHeight
(
context
,
60
),
bottom:
getResponsiveHeight
(
context
,
30
)
),
child:
Column
(
children:
[
SvgPicture
.
asset
(
"assets/images/capa.svg"
,
height:
146
,
width:
400
,
height:
getResponsiveHeight
(
context
,
146
)
,
width:
MediaQuery
.
of
(
context
).
size
.
width
*
0.9
,
),
const
SizedBox
(
height:
32
),
SizedBox
(
height:
getResponsiveHeight
(
context
,
32
)
)
,
Container
(
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
20
,
vertical:
8
,
padding:
EdgeInsets
.
symmetric
(
horizontal:
isSmallScreen
?
16
:
20
,
vertical:
isSmallScreen
?
6
:
8
,
),
decoration:
BoxDecoration
(
border:
Border
.
all
(
color:
const
Color
(
0xFF1487C9
,
),
// border color
width:
1.2
,
// thickness of the border
color:
const
Color
(
0xFF1487C9
),
width:
1.2
,
),
color:
const
Color
(
0xffEDF8FF
),
borderRadius:
BorderRadius
.
circular
(
30
),
...
...
@@ -154,23 +196,28 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
children:
[
SvgPicture
.
asset
(
"assets/svg/hrm/groupIc.svg"
,
height:
29
,
width:
29
,
height:
isSmallScreen
?
25
:
29
,
width:
isSmallScreen
?
25
:
29
,
fit:
BoxFit
.
contain
,
),
const
SizedBox
(
width:
7
),
const
Text
(
"Organization Structure"
,
style:
TextStyle
(
fontSize:
15
,
fontWeight:
FontWeight
.
w500
,
fontStyle:
FontStyle
.
normal
,
fontFamily:
"Plus Jakarta Sans"
,
SizedBox
(
width:
isSmallScreen
?
5
:
7
),
Flexible
(
child:
Text
(
"Organization Structure"
,
style:
TextStyle
(
fontSize:
getResponsiveTextSize
(
context
,
15
),
fontWeight:
FontWeight
.
w500
,
fontStyle:
FontStyle
.
normal
,
fontFamily:
"Plus Jakarta Sans"
,
),
maxLines:
1
,
overflow:
TextOverflow
.
ellipsis
,
),
),
const
Icon
(
Icon
(
Icons
.
chevron_right
,
color:
Colors
.
black54
,
size:
isSmallScreen
?
18
:
20
,
),
],
),
...
...
@@ -183,9 +230,13 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
/// Grid Section
LayoutBuilder
(
builder:
(
context
,
constraints
)
{
final
screenWidth
=
constraints
.
maxWidth
;
final
crossAxisCount
=
(
screenWidth
/
180
).
floor
().
clamp
(
2
,
4
);
final
childAspectRatio
=
screenWidth
<
360
?
1.5
:
1.7
;
return
Padding
(
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
8
,
padding:
EdgeInsets
.
symmetric
(
horizontal:
getResponsivePadding
(
context
)
,
vertical:
10
,
),
child:
Consumer
<
HrmAccessiblePagesProvider
>(
...
...
@@ -197,38 +248,40 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
}
if
(
provider
.
errorMessage
!=
null
)
{
return
Center
(
child:
Text
(
provider
.
errorMessage
!),
child:
Text
(
provider
.
errorMessage
!,
style:
TextStyle
(
fontSize:
getResponsiveTextSize
(
context
,
14
),
),
),
);
}
final
pages
=
(
provider
.
response
?.
pagesAccessible
??
[])
.
where
(
(
page
)
=>
allowedPages
.
contains
(
page
.
pageName
,
),
)
.
toList
();
(
provider
.
response
?.
pagesAccessible
??
[])
.
where
(
(
page
)
=>
allowedPages
.
contains
(
page
.
pageName
,
),
).
toList
();
return
GridView
.
builder
(
itemCount:
pages
.
length
,
shrinkWrap:
true
,
physics:
const
NeverScrollableScrollPhysics
(),
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount
(
crossAxisCount:
(
constraints
.
maxWidth
/
180
)
.
floor
()
.
clamp
(
2
,
6
),
crossAxisSpacing:
1
,
mainAxisSpacing:
2
,
childAspectRatio:
1.8
,
),
SliverGridDelegateWithFixedCrossAxisCount
(
crossAxisCount:
crossAxisCount
,
crossAxisSpacing:
isSmallScreen
?
2
:
4
,
mainAxisSpacing:
isSmallScreen
?
2
:
4
,
childAspectRatio:
childAspectRatio
,
),
itemBuilder:
(
context
,
index
)
{
final
page
=
pages
[
index
];
return
_buildTile
(
label:
page
.
pageName
??
""
,
//in page number there is 6 items comming from serever it showing only four
context:
context
,
label:
page
.
pageName
??
""
,
subtitle:
_getSubtitle
(
page
.
pageName
??
""
,
),
...
...
@@ -236,10 +289,10 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
txtColor:
const
Color
(
0xff1487C9
),
onTap:
()
=>
_handleNavigation
(
context
,
page
.
pageName
??
""
,
page
.
mode
??
""
,
),
context
,
page
.
pageName
??
""
,
page
.
mode
??
""
,
),
);
},
);
...
...
@@ -249,10 +302,7 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
},
),
////////////
SizedBox
(
height:
40
,)
SizedBox
(
height:
getResponsiveHeight
(
context
,
40
)),
],
),
],
...
...
@@ -266,12 +316,15 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
/// Card builder
Widget
_buildTile
({
required
BuildContext
context
,
required
String
label
,
required
String
subtitle
,
required
String
assetIcon
,
required
Color
txtColor
,
VoidCallback
?
onTap
,
})
{
final
bool
isSmallScreen
=
MediaQuery
.
of
(
context
).
size
.
width
<
360
;
return
LayoutBuilder
(
builder:
(
context
,
constraints
)
{
return
InkWell
(
...
...
@@ -279,18 +332,28 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
borderRadius:
BorderRadius
.
circular
(
14
),
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
constraints
.
maxHeight
*
0.05
,
horizontal:
constraints
.
maxWidth
*
0.05
,
vertical:
constraints
.
maxHeight
*
0.08
,
horizontal:
constraints
.
maxWidth
*
0.06
,
),
margin:
EdgeInsets
.
symmetric
(
vertical:
isSmallScreen
?
4
:
7
,
horizontal:
isSmallScreen
?
3
:
5
),
margin:
const
EdgeInsets
.
symmetric
(
vertical:
7
,
horizontal:
5
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
14
),
// boxShadow: [
// BoxShadow(
// color: Colors.black12,
// blurRadius: 4,
// offset: Offset(0, 2),
// ),
// ],
),
child:
Row
(
children:
[
Expanded
(
flex:
2
,
flex:
3
,
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
center
,
...
...
@@ -299,25 +362,29 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
child:
Text
(
label
,
style:
TextStyle
(
fontSize:
14
,
fontSize:
getResponsiveTextSize
(
context
,
14
)
,
color:
AppColors
.
app_blue
,
fontFamily:
"JakartaMedium"
,
height:
1.2
,
),
softWrap:
true
,
overflow:
TextOverflow
.
visible
,
overflow:
TextOverflow
.
ellipsis
,
maxLines:
isSmallScreen
?
2
:
3
,
),
),
const
SizedBox
(
height:
4
),
SizedBox
(
height:
isSmallScreen
?
2
:
6
),
Flexible
(
child:
Text
(
subtitle
,
style:
TextStyle
(
fontSize:
12
,
fontSize:
getResponsiveTextSize
(
context
,
12
)
,
color:
AppColors
.
grey_semi
,
fontFamily:
"JakartaMedium"
,
height:
1
,
),
softWrap:
true
,
overflow:
TextOverflow
.
visible
,
overflow:
TextOverflow
.
ellipsis
,
maxLines:
2
,
),
),
],
...
...
@@ -326,8 +393,8 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
Expanded
(
flex:
1
,
child:
Container
(
height:
constraints
.
maxHeight
*
0.
39
,
width:
constraints
.
maxHeight
*
0.
39
,
height:
constraints
.
maxHeight
*
0.
45
,
width:
constraints
.
maxHeight
*
0.
45
,
decoration:
BoxDecoration
(
shape:
BoxShape
.
circle
,
color:
const
Color
(
0xFFEDF8FF
),
...
...
@@ -335,8 +402,8 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
child:
Center
(
child:
SvgPicture
.
asset
(
assetIcon
,
height:
constraints
.
maxHeight
*
0.
19
,
width:
constraints
.
maxHeight
*
0.
19
,
height:
constraints
.
maxHeight
*
0.
22
,
width:
constraints
.
maxHeight
*
0.
22
,
),
),
),
...
...
@@ -361,9 +428,9 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
case
"Tour Bill List"
:
return
"Submit and manage claims"
;
case
"Team Leave Request Approval"
:
return
""
;
return
"
Approve & Reject
"
;
case
"Team Attendance Approval"
:
return
""
;
return
"
Team Attendance Request
"
;
case
"Advance List"
:
return
"Advance Payment"
;
case
"Casual Leave List"
:
...
...
@@ -469,4 +536,4 @@ class _HrmdashboardScreenState extends State<HrmdashboardScreen> {
break
;
}
}
}
}
\ No newline at end of file
lib/screens/hrm/RewardListScreen.dart
View file @
2a8fa440
This diff is collapsed.
Click to expand it.
pubspec.lock
View file @
2a8fa440
...
...
@@ -445,10 +445,10 @@ packages:
dependency: transitive
description:
name: fake_async
sha256: "
5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44
"
sha256: "
6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc
"
url: "https://pub.dev"
source: hosted
version: "1.3.
3
"
version: "1.3.
2
"
ffi:
dependency: transitive
description:
...
...
@@ -1180,26 +1180,26 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256:
"33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
sha256:
c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
url: "https://pub.dev"
source: hosted
version: "1
1
.0.
2
"
version: "1
0
.0.
8
"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256:
"1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
sha256:
f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
url: "https://pub.dev"
source: hosted
version: "3.0.
10
"
version: "3.0.
9
"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "
8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1
"
sha256: "
6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3
"
url: "https://pub.dev"
source: hosted
version: "3.0.
2
"
version: "3.0.
1
"
lints:
dependency: transitive
description:
...
...
@@ -1873,10 +1873,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256:
"522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
sha256:
fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
url: "https://pub.dev"
source: hosted
version: "0.7.
6
"
version: "0.7.
4
"
timezone:
dependency: transitive
description:
...
...
@@ -2017,10 +2017,10 @@ packages:
dependency: transitive
description:
name: vector_math
sha256:
d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
sha256:
"80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.dev"
source: hosted
version: "2.
2.0
"
version: "2.
1.4
"
vm_service:
dependency: transitive
description:
...
...
@@ -2118,5 +2118,5 @@ packages:
source: hosted
version: "3.1.3"
sdks:
dart: ">=3.
8.0-0
<3.10.0-z"
dart: ">=3.
7.2
<3.10.0-z"
flutter: ">=3.27.0"
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment