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_rentals
Commits
eecc769f
Commit
eecc769f
authored
Oct 18, 2025
by
Sai Srinivas
Browse files
Lists added in Dashboard
parent
9cb8fe83
Changes
1
Hide whitespace changes
Inline
Side-by-side
lib/Screens/DashboardScreen.dart
View file @
eecc769f
...
...
@@ -419,6 +419,66 @@ class DashboardScreen extends StatelessWidget {
),
],
),
),
const
SizedBox
(
height:
20
),
// Subscribed Products
Container
(
width:
double
.
infinity
,
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
2
,
vertical:
14
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
// Section Title
Text
(
"Subscribed Products"
,
style:
TextStyle
(
color:
Colors
.
grey
.
shade800
,
fontSize:
18
,
fontWeight:
FontWeight
.
w600
,
),
),
const
SizedBox
(
height:
16
),
// List of subscribed products
Column
(
children:
[
// Item 1 - Expiring in 9 Days
_buildProductItem
(
productName:
"Genesis 125kVA"
,
plan:
"*1266"
,
rentedDate:
"Rented on 7th July, 2025"
,
timeLeft:
"2 months left"
,
expiringText:
"Expiring in 9 Days"
,
hasPendingPayment:
false
,
),
const
SizedBox
(
height:
12
),
// Item 2 - With Pending Payment
_buildProductItem
(
productName:
"Genesis 85kVA"
,
plan:
"*3999"
,
rentedDate:
"Rented on 7th July, 2025"
,
timeLeft:
"7 months left"
,
pendingPaymentText:
"1 Payment Pending. Please Pay before incurring fines."
,
hasPendingPayment:
true
,
),
const
SizedBox
(
height:
12
),
// Item 3 - Normal
_buildProductItem
(
productName:
"Genesis 30kVA"
,
plan:
"*3999"
,
rentedDate:
"Rented on 7th July, 2025"
,
timeLeft:
"7 months left"
,
hasPendingPayment:
false
,
),
],
),
],
),
)
],
),
...
...
@@ -435,6 +495,209 @@ class DashboardScreen extends StatelessWidget {
);
}
// Helper widget for product item
Widget
_buildProductItem
({
required
String
productName
,
required
String
plan
,
required
String
rentedDate
,
required
String
timeLeft
,
String
?
expiringText
,
String
?
pendingPaymentText
,
required
bool
hasPendingPayment
,
})
{
return
Stack
(
children:
[
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
0
,
vertical:
0
),
decoration:
BoxDecoration
(
color:
Colors
.
red
.
withOpacity
(
0.6
),
borderRadius:
BorderRadius
.
circular
(
15
),
border:
Border
.
all
(
color:
Colors
.
grey
.
shade200
,
width:
1
,
),
boxShadow:
[
BoxShadow
(
color:
Colors
.
black
.
withOpacity
(
0.05
),
blurRadius:
8
,
offset:
const
Offset
(
0
,
2
),
),
],
),
child:
Column
(
children:
[
SizedBox
(
height:
142
,),
// Pending payment strip (if any)
if
(
hasPendingPayment
&&
pendingPaymentText
!=
null
)
Container
(
width:
double
.
infinity
,
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
4
,
vertical:
12
),
decoration:
BoxDecoration
(
color:
Colors
.
white38
,
borderRadius:
const
BorderRadius
.
only
(
bottomLeft:
Radius
.
circular
(
10
),
bottomRight:
Radius
.
circular
(
10
),
),
// border: Border.all(
// color: Colors.red.withOpacity(0.2),
// ),
),
child:
Row
(
children:
[
Icon
(
Icons
.
warning_amber_rounded
,
color:
Colors
.
red
.
shade600
,
size:
16
,
),
const
SizedBox
(
width:
8
),
Expanded
(
child:
Text
(
pendingPaymentText
,
style:
TextStyle
(
color:
Colors
.
red
.
shade600
,
fontSize:
12
,
fontWeight:
FontWeight
.
w500
,
),
),
),
],
),
),
],
),
),
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
12
,
vertical:
4
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
12
),
border:
Border
.
all
(
color:
Colors
.
grey
.
shade200
,
width:
1
,
),
// boxShadow: [
// BoxShadow(
// color: Colors.black.withOpacity(0.05),
// blurRadius: 8,
// offset: const Offset(0, 2),
// ),
// ],
),
child:
Column
(
children:
[
// Main content
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
Expanded
(
flex:
6
,
child:
Padding
(
padding:
const
EdgeInsets
.
all
(
10
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
// Expiring badge (if any)
if
(
expiringText
!=
null
)
Container
(
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
6
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
12
),
gradient:
const
LinearGradient
(
begin:
Alignment
.
topLeft
,
end:
Alignment
.
bottomRight
,
colors:
[
Color
(
0x22E9FFDD
),
Color
(
0x33B5FFD1
),
],
),
),
child:
Text
(
expiringText
,
style:
const
TextStyle
(
color:
Colors
.
orange
,
fontSize:
12
,
fontWeight:
FontWeight
.
w500
,
),
),
),
if
(
expiringText
!=
null
)
const
SizedBox
(
height:
12
),
// Product name and plan
Text
(
productName
,
style:
const
TextStyle
(
color:
Colors
.
black
,
fontSize:
16
,
fontWeight:
FontWeight
.
w600
,
),
),
Text
(
"Plan"
,
style:
TextStyle
(
color:
Colors
.
grey
.
shade600
,
fontSize:
14
,
),
),
Text
(
"
$plan
"
,
style:
TextStyle
(
color:
Color
(
0xFF008CDE
),
fontSize:
18
,
),
),
const
SizedBox
(
height:
8
),
// Rented date
Text
(
rentedDate
,
style:
TextStyle
(
color:
Colors
.
grey
.
shade500
,
fontSize:
12
,
),
),
const
SizedBox
(
height:
8
),
// Time left
Text
(
timeLeft
,
style:
TextStyle
(
color:
Colors
.
green
.
shade600
,
fontSize:
12
,
fontWeight:
FontWeight
.
w500
,
),
),
],
),
),
),
Expanded
(
flex:
3
,
child:
Container
(
padding:
const
EdgeInsets
.
all
(
14
),
decoration:
BoxDecoration
(
color:
Color
(
0xffF2F2F2
),
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Image
.
asset
(
'assets/images/gene_png.png'
,
height:
80
,
width:
80
,
),
),
),
],
),
],
),
),
],
);
}
Widget
_buildFeatureCard
({
required
String
title
,
required
String
description
,
...
...
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