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
d24e453e
Commit
d24e453e
authored
Jun 19, 2025
by
Sai Srinivas
Browse files
19-06-2025 By Sai Srinivas
Finance Module Test cases & Safe Area
parent
4807bee4
Changes
52
Hide whitespace changes
Inline
Side-by-side
lib/screens/serviceEngineer/MonthlyCollection.dart
View file @
d24e453e
...
...
@@ -56,7 +56,7 @@ class _MonthlycollectionState extends State<Monthlycollection> {
resizeToAvoidBottomInset:
true
,
backgroundColor:
AppColors
.
scaffold_bg_color
,
appBar:
appbar2
(
context
,
"Payment Collection"
,
provider
.
resetAll
,
sendWidget
),
body:
provider
.
paymenCollectionList
.
isNotEmpty
?
Container
(
body:
SafeArea
(
child:
provider
.
paymenCollectionList
.
isNotEmpty
?
Container
(
child:
ListView
.
builder
(
scrollDirection:
Axis
.
vertical
,
shrinkWrap:
true
,
...
...
@@ -203,12 +203,12 @@ class _MonthlycollectionState extends State<Monthlycollection> {
MaterialPageRoute
(
builder:
(
context
)
=>
WebErpScreen
(
erp_url:
provider
.
paymenCollectionList
[
index
]
.
paymentProofFilePath
??
""
,
),
erp_url:
provider
.
paymenCollectionList
[
index
]
.
paymentProofFilePath
??
""
,
),
),
);
},
...
...
@@ -232,7 +232,7 @@ class _MonthlycollectionState extends State<Monthlycollection> {
);
},
),
):
Emptywidget
(
context
),
):
Emptywidget
(
context
),
)
),
);
},
...
...
lib/screens/serviceEngineer/NearbyGenerators.dart
View file @
d24e453e
...
...
@@ -213,43 +213,45 @@ class _NearbygeneratorsState extends State<Nearbygenerators> {
resizeToAvoidBottomInset:
true
,
appBar:
appbar2
(
context
,
"Nearby Generators"
,
provider
.
resetAll
,
sendWidget
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
body:
Container
(
child:
SingleChildScrollView
(
child:
Column
(
children:
[
ClipRRect
(
// Apply border radius using ClipRRect
borderRadius:
BorderRadius
.
only
(
topLeft:
Radius
.
circular
(
30.0
),
topRight:
Radius
.
circular
(
30.0
),
),
// padding: EdgeInsets.fromLTRB(10, 20, 10, 20),
child:
Container
(
height:
MediaQuery
.
of
(
context
).
size
.
height
,
child:
Stack
(
children:
[
GoogleMap
(
myLocationEnabled:
true
,
zoomGesturesEnabled:
true
,
initialCameraPosition:
CameraPosition
(
target:
provider
.
startLocation
,
zoom:
14.0
,
body:
SafeArea
(
child:
Container
(
child:
SingleChildScrollView
(
child:
Column
(
children:
[
ClipRRect
(
// Apply border radius using ClipRRect
borderRadius:
BorderRadius
.
only
(
topLeft:
Radius
.
circular
(
30.0
),
topRight:
Radius
.
circular
(
30.0
),
),
// padding: EdgeInsets.fromLTRB(10, 20, 10, 20),
child:
Container
(
height:
MediaQuery
.
of
(
context
).
size
.
height
,
child:
Stack
(
children:
[
GoogleMap
(
myLocationEnabled:
true
,
zoomGesturesEnabled:
true
,
initialCameraPosition:
CameraPosition
(
target:
provider
.
startLocation
,
zoom:
14.0
,
),
markers:
provider
.
markers
.
toSet
(),
mapType:
MapType
.
normal
,
onMapCreated:
(
controller
)
{
setState
(()
{
provider
.
mapController
=
controller
;
});
},
onCameraMove:
(
position
)
{
provider
.
onCameraMove
(
context
,
position
);
},
),
markers:
provider
.
markers
.
toSet
(),
mapType:
MapType
.
normal
,
onMapCreated:
(
controller
)
{
setState
(()
{
provider
.
mapController
=
controller
;
});
},
onCameraMove:
(
position
)
{
provider
.
onCameraMove
(
context
,
position
);
},
),
]),
]),
),
),
)
,
]
,
]
,
)
,
),
),
),
...
...
lib/screens/serviceEngineer/PCWallet.dart
View file @
d24e453e
...
...
@@ -94,228 +94,230 @@ class _PcwalletState extends State<Pcwallet> {
),
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
body:
Container
(
child:
SingleChildScrollView
(
child:
Column
(
children:
[
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
15
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Row
(
children:
[
Expanded
(
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
,
vertical:
15
,
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFE7FFE5
),
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
children:
[
Text
(
"₹"
,
style:
TextStyle
(
height:
1
,
color:
Color
(
0xFF0D9C00
),
body:
SafeArea
(
child:
Container
(
child:
SingleChildScrollView
(
child:
Column
(
children:
[
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
15
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Row
(
children:
[
Expanded
(
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
,
vertical:
15
,
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFE7FFE5
),
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
children:
[
Text
(
"₹"
,
style:
TextStyle
(
height:
1
,
color:
Color
(
0xFF0D9C00
),
),
),
),
Text
(
"
${provider.totlDetails.creditAmount??"0.00"}
"
,
style:
TextStyle
(
fontSize:
30
,
height:
1
,
color:
Color
(
0xFF0D9C00
),
Text
(
"
${provider.totlDetails.creditAmount??"0.00"}
"
,
style:
TextStyle
(
fontSize:
30
,
height:
1
,
color:
Color
(
0xFF0D9C00
)
,
),
),
)
,
]
,
),
Text
(
"Credited"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
),)
,
]
,
]
,
)
,
Text
(
"Credited"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
),),
]
,
)
,
),
),
),
SizedBox
(
width:
10
),
Expanded
(
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizont
al:
15
,
vertical:
15
,
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFFFEFEF
),
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Column
(
crossAxisAlignm
en
t
:
CrossAxisAlignment
.
start
,
children:
[
Row
(
crossAxisAlignm
en
t
:
CrossAxisAlignment
.
center
,
children:
[
Text
(
"₹"
,
style:
TextStyle
(
height:
1
,
color:
Color
(
0xFFED3424
),
SizedBox
(
width:
10
),
Expanded
(
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
,
vertic
al:
15
,
)
,
decoration:
BoxDecoration
(
color:
Color
(
0xFFFFEFEF
),
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
childr
en:
[
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
childr
en:
[
Text
(
"₹"
,
style:
TextStyle
(
height:
1
,
color:
Color
(
0xFFED3424
)
,
),
),
),
Text
(
"
${provider.totlDetails.debitAmount??0.00}
"
,
style:
TextStyle
(
fontSize:
30
,
height:
1
,
color:
Color
(
0xFFED3424
),
Text
(
"
${provider.totlDetails.debitAmount??0.00}
"
,
style:
TextStyle
(
fontSize:
30
,
height:
1
,
color:
Color
(
0xFFED3424
)
,
),
),
)
,
]
,
),
Text
(
"Debited"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
))
,
]
,
]
,
)
,
Text
(
"Debited"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
)),
]
,
)
,
),
),
)
,
]
,
]
,
)
,
),
),
ListView
.
builder
(
physics:
NeverScrollableScrollPhysics
()
,
shrinkWrap:
true
,
item
Count:
groupedData
.
keys
.
length
,
itemBuilder:
(
context
,
index
)
{
String
date
=
groupedData
.
keys
.
elementAt
(
index
)
;
List
<
HistoryList
>
items
=
groupedData
[
date
]!;
return
Container
(
padd
in
g
:
EdgeInsets
.
symmetric
(
vertic
al:
5
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
child:
Column
(
crossAxisAlignm
en
t
:
CrossAxisAlignment
.
start
,
children:
[
Container
(
padding:
EdgeInsets
.
only
(
bottom:
5
),
child:
Text
(
date
,
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaMedium"
,
color:
Color
(
0xFF818181
),
ListView
.
builder
(
physics:
NeverScrollableScrollPhysics
(),
shrinkWrap:
true
,
itemCount:
groupedData
.
keys
.
length
,
item
Builder:
(
context
,
index
)
{
String
date
=
groupedData
.
keys
.
elementAt
(
index
)
;
List
<
HistoryList
>
items
=
groupedData
[
date
]!
;
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
marg
in:
EdgeInsets
.
symmetric
(
horizont
al:
10
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
childr
en:
[
Container
(
padding:
EdgeInsets
.
only
(
bottom:
5
),
child:
Text
(
date
,
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaMedium"
,
color:
Color
(
0xFF818181
)
,
),
),
),
),
...
items
.
map
((
item
)
{
String
part1
=
item
.
description
!.
split
(
' ('
).
first
;
RegExp
regExp
=
RegExp
(
r'\(([^)]+)\)'
);
String
?
part2
=
regExp
.
firstMatch
(
item
.
description
!)
?.
group
(
1
);
return
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
Expanded
(
flex:
1
,
child:
SizedBox
(
child:
item
.
transactionType
==
"Credit"
?
Image
.
asset
(
"assets/images/trans_credit.png"
,
height:
45
,
width:
45
,
fit:
BoxFit
.
contain
,
)
:
Image
.
asset
(
"assets/images/trans_debit.png"
,
height:
45
,
width:
45
,
fit:
BoxFit
.
contain
,
),
),
),
SizedBox
(
width:
10
,),
Expanded
(
flex:
5
,
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
part1
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
),),
Text
(
"
${part2}
"
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
),
...
items
.
map
((
item
)
{
String
part1
=
item
.
description
!.
split
(
' ('
).
first
;
RegExp
regExp
=
RegExp
(
r'\(([^)]+)\)'
);
String
?
part2
=
regExp
.
firstMatch
(
item
.
description
!)
?.
group
(
1
);
return
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
Expanded
(
flex:
1
,
child:
SizedBox
(
child:
item
.
transactionType
==
"Credit"
?
Image
.
asset
(
"assets/images/trans_credit.png"
,
height:
45
,
width:
45
,
fit:
BoxFit
.
contain
,
)
:
Image
.
asset
(
"assets/images/trans_debit.png"
,
height:
45
,
width:
45
,
fit:
BoxFit
.
contain
,
),
],
),
),
),
Spacer
(),
Expanded
(
flex:
2
,
child:
SizedBox
(
child:
RichText
(
text:
TextSpan
(
SizedBox
(
width:
10
,
),
Expanded
(
flex:
5
,
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
TextSpan
(
text:
item
.
transactionType
==
"Credit"
?
"+"
:
"-"
,
Text
(
part1
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
),),
Text
(
"
${part2}
"
,
style:
TextStyle
(
color:
Color
(
0xFF2D2D2D
),
fontSize:
14
,
fontFamily:
"JakartaRegular"
,
),
),
TextSpan
(
text:
"₹
${item.amount!}
"
,
style:
TextStyle
(
color:
Color
(
0xFF2D2D2D
),
fontSize:
14
,
fontFamily:
"JakartaMedium"
,
color:
Color
(
0xFF818181
),
),
),
],
),
),
),
),
],
),
);
}).
toList
(),
],
),
);
},
),
],
Spacer
(),
Expanded
(
flex:
2
,
child:
SizedBox
(
child:
RichText
(
text:
TextSpan
(
children:
[
TextSpan
(
text:
item
.
transactionType
==
"Credit"
?
"+"
:
"-"
,
style:
TextStyle
(
color:
Color
(
0xFF2D2D2D
),
fontSize:
14
,
fontFamily:
"JakartaRegular"
,
),
),
TextSpan
(
text:
"₹
${item.amount!}
"
,
style:
TextStyle
(
color:
Color
(
0xFF2D2D2D
),
fontSize:
14
,
fontFamily:
"JakartaMedium"
,
),
),
],
),
),
),
),
],
),
);
}).
toList
(),
],
),
);
},
),
],
),
),
),
),
...
...
lib/screens/serviceEngineer/PaymentDetails.dart
View file @
d24e453e
...
...
@@ -65,395 +65,397 @@ class _PaymentdetailsState extends State<Paymentdetails> {
resizeToAvoidBottomInset:
true
,
appBar:
appbar
(
context
,
"Payment Details"
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
body:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
)
),
child:
SingleChildScrollView
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
child:
Text
(
"
${widget.name}
"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
AppColors
.
app_blue
),)),
SizedBox
(
height:
10
,),
Padding
(
padding:
const
EdgeInsets
.
only
(
bottom:
5.0
),
child:
Text
(
"Phone Number"
),
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
Contacts
>(
isExpanded:
true
,
hint:
const
Row
(
children:
[
Expanded
(
child:
Text
(
'Select Phone Number'
,
style:
TextStyle
(
fontSize:
14
,
body:
SafeArea
(
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
)
),
child:
SingleChildScrollView
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
child:
Text
(
"
${widget.name}
"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
AppColors
.
app_blue
),)),
SizedBox
(
height:
10
,),
Padding
(
padding:
const
EdgeInsets
.
only
(
bottom:
5.0
),
child:
Text
(
"Phone Number"
),
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
Contacts
>(
isExpanded:
true
,
hint:
const
Row
(
children:
[
Expanded
(
child:
Text
(
'Select Phone Number'
,
style:
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
],
),
items:
[
...
provider
.
contactsDropDown
.
map
((
contacts
)
{
return
DropdownMenuItem
<
Contacts
>(
value:
contacts
,
// You can use the entire object, but we need to ensure it's unique
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
contacts
.
name
??
""
,
maxLines:
1
,
style:
const
TextStyle
(
fontSize:
12
,
),
overflow:
TextOverflow
.
ellipsis
,
),
Text
(
contacts
.
mob1
??
""
,
style:
const
TextStyle
(
fontSize:
12
,
],
),
items:
[
...
provider
.
contactsDropDown
.
map
((
contacts
)
{
return
DropdownMenuItem
<
Contacts
>(
value:
contacts
,
// You can use the entire object, but we need to ensure it's unique
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
contacts
.
name
??
""
,
maxLines:
1
,
style:
const
TextStyle
(
fontSize:
12
,
),
overflow:
TextOverflow
.
ellipsis
,
),
overflow:
TextOverflow
.
ellipsis
,
),
],
),
);
}).
toList
(),
DropdownMenuItem
<
Contacts
>(
value:
null
,
// No value associated with the button
enabled:
false
,
// To disable selecting this item
child:
InkWell
(
onTap:
()
{
_addContactSheet
(
context
);
},
child:
Container
(
decoration:
BoxDecoration
(
border:
Border
.
all
(
color:
AppColors
.
app_blue
,
width:
0.5
),
borderRadius:
BorderRadius
.
circular
(
12
)
),
padding:
const
EdgeInsets
.
symmetric
(
vertical:
12
,
horizontal:
14
),
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
const
[
Text
(
'Add Contact'
,
style:
TextStyle
(
fontSize:
14
,
color:
Colors
.
blue
),
contacts
.
mob1
??
""
,
style:
const
TextStyle
(
fontSize:
12
,
),
overflow:
TextOverflow
.
ellipsis
,
),
],
),
);
}).
toList
(),
DropdownMenuItem
<
Contacts
>(
value:
null
,
// No value associated with the button
enabled:
false
,
// To disable selecting this item
child:
InkWell
(
onTap:
()
{
_addContactSheet
(
context
);
},
child:
Container
(
decoration:
BoxDecoration
(
border:
Border
.
all
(
color:
AppColors
.
app_blue
,
width:
0.5
),
borderRadius:
BorderRadius
.
circular
(
12
)
),
padding:
const
EdgeInsets
.
symmetric
(
vertical:
12
,
horizontal:
14
),
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
const
[
Text
(
'Add Contact'
,
style:
TextStyle
(
fontSize:
14
,
color:
Colors
.
blue
),
),
],
),
),
),
),
)
,
]
,
value:
provider
.
selectContact
,
// The selected value is now the entire 'Contacts' object
onChanged:
(
Contacts
?
value
)
{
if
(
value
!=
null
)
{
if
(
provider
.
contactsDropDown
.
isNotEmpty
)
{
provider
.
select
C
ontact
=
value
;
// Set the selected contact
provider
.
contact
=
value
.
name
??
""
;
// Update the contact name
provider
.
contactID
=
value
.
mob1
??
""
;
// Update the contact ID
debugPrint
(
"Selected Contact:
${value
.name}
, Phone:
${value.mob1}
"
);
]
,
value:
provider
.
selectContact
,
// The selected value is now the entire 'Contacts' object
onChanged:
(
Contacts
?
value
)
{
if
(
value
!=
null
)
{
if
(
provider
.
contactsDropDown
.
isNotEmpty
)
{
provider
.
selectContact
=
value
;
// Set the
select
ed c
ontact
provider
.
contact
=
value
.
name
??
""
;
// Update the contact
name
provider
.
contactID
=
value
.
mob1
??
""
;
// Update the
contact
ID
debugPrint
(
"Selected Contact:
${value
.name}
, Phone:
${value.mob1}
"
);
}
}
}
},
buttonStyleData:
ButtonStyleData
(
height:
5
0
,
width:
160
,
padding:
const
EdgeInsets
.
only
(
left:
14
,
right:
14
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
14
)
,
color:
AppColors
.
text_field_color
,
}
,
buttonStyleData:
ButtonStyleData
(
height:
50
,
width:
16
0
,
padding:
const
EdgeInsets
.
only
(
left:
14
,
right:
14
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
14
),
color:
AppColors
.
text_field_color
,
)
,
),
),
iconStyleData:
IconStyleData
(
icon:
SvgPicture
.
asset
(
"assets/svg/arrow_dropdown.svg"
,
height:
25
,
width:
20
,),
iconSize:
12
,
iconEnabledColor:
Color
(
0xFF2D2D2D
),
iconDisabledColor:
Colors
.
grey
,
),
dropdownStyleData:
DropdownStyleData
(
maxHeight:
200
,
width:
280
,
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
14
),
color:
AppColors
.
text_field_color
,
iconStyleData:
IconStyleData
(
icon:
SvgPicture
.
asset
(
"assets/svg/arrow_dropdown.svg"
,
height:
25
,
width:
20
,),
iconSize:
12
,
iconEnabledColor:
Color
(
0xFF2D2D2D
),
iconDisabledColor:
Colors
.
grey
,
),
scrollbarTheme:
ScrollbarThemeData
(
radius:
const
Radius
.
circular
(
15
),
thickness:
MaterialStateProperty
.
all
<
double
>(
6
),
thumbVisibility:
MaterialStateProperty
.
all
<
bool
>(
true
),
dropdownStyleData:
DropdownStyleData
(
maxHeight:
200
,
width:
280
,
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
14
),
color:
AppColors
.
text_field_color
,
),
scrollbarTheme:
ScrollbarThemeData
(
radius:
const
Radius
.
circular
(
15
),
thickness:
MaterialStateProperty
.
all
<
double
>(
6
),
thumbVisibility:
MaterialStateProperty
.
all
<
bool
>(
true
),
),
),
menuItemStyleData:
const
MenuItemStyleData
(
height:
60
,
padding:
EdgeInsets
.
only
(
left:
14
,
right:
14
),
),
),
menuItemStyleData:
const
MenuItemStyleData
(
height:
60
,
padding:
EdgeInsets
.
only
(
left:
14
,
right:
14
),
),
),
)
,
]
,
]
,
)
,
),
),
SizedBox
(
height:
10
,),
Padding
(
padding:
const
EdgeInsets
.
only
(
bottom:
5.0
),
child:
Text
(
"Complaint Type"
),
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
PaymentModeList
>(
isExpanded:
true
,
hint:
const
Row
(
children:
[
Expanded
(
child:
Text
(
'Select Complaint Type'
,
style:
TextStyle
(
fontSize:
14
,
SizedBox
(
height:
10
,),
Padding
(
padding:
const
EdgeInsets
.
only
(
bottom:
5.0
),
child:
Text
(
"Complaint Type"
),
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
PaymentModeList
>(
isExpanded:
true
,
hint:
const
Row
(
children:
[
Expanded
(
child:
Text
(
'Select Complaint Type'
,
style:
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
],
),
items:
provider
.
paymentModeDropDown
.
map
((
paymentMode
)
=>
DropdownMenuItem
<
PaymentModeList
>(
value:
paymentMode
,
child:
Text
(
paymentMode
.
name
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
],
),
items:
provider
.
paymentModeDropDown
.
map
((
paymentMode
)
=>
DropdownMenuItem
<
PaymentModeList
>(
value:
paymentMode
,
child:
Text
(
paymentMode
.
name
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
overflow:
TextOverflow
.
ellipsis
,
),
))
.
toList
(),
value:
provider
.
selectPaymentMode
,
onChanged:
(
PaymentModeList
?
value
)
{
if
(
value
!=
null
)
{
if
(
provider
.
paymentModeDropDown
.
isNotEmpty
)
{
provider
.
selectPaymentMode
=
value
;
print
(
"Selected Complaint Type:
${value
.name}
, ID:
${value.id}
"
);
provider
.
PaymentMode
=
value
?.
name
;
provider
.
paymentModeID
=
value
?.
id
;
print
(
"hfjkshfg"
+
provider
.
paymentModeID
.
toString
());
))
.
toList
(),
value:
provider
.
selectPaymentMode
,
onChanged:
(
PaymentModeList
?
value
)
{
if
(
value
!=
null
)
{
if
(
provider
.
paymentModeDropDown
.
isNotEmpty
)
{
provider
.
selectPaymentMode
=
value
;
print
(
"Selected Complaint Type:
${value
.name}
, ID:
${value.id}
"
);
provider
.
PaymentMode
=
value
?.
name
;
provider
.
paymentModeID
=
value
?.
id
;
print
(
"hfjkshfg"
+
provider
.
paymentModeID
.
toString
());
}
}
}
},
buttonStyleData:
ButtonStyleData
(
height:
50
,
width:
MediaQuery
.
of
(
context
)
.
size
.
width
,
padding:
const
EdgeInsets
.
only
(
left:
14
,
right:
14
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
14
)
,
color:
AppColors
.
text_field_color
,
}
,
buttonStyleData:
ButtonStyleData
(
height:
50
,
width:
MediaQuery
.
of
(
context
)
.
size
.
width
,
padding:
const
EdgeInsets
.
only
(
left:
14
,
right:
14
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
14
),
color:
AppColors
.
text_field_color
,
)
,
),
),
iconStyleData:
IconStyleData
(
icon:
SvgPicture
.
asset
(
"assets/svg/arrow_dropdown.svg"
,
height:
25
,
width:
20
,),
iconSize:
12
,
iconEnabledColor:
Color
(
0xFF2D2D2D
),
iconDisabledColor:
Colors
.
grey
,
),
dropdownStyleData:
DropdownStyleData
(
maxHeight:
200
,
width:
340
,
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
14
),
color:
AppColors
.
text_field_color
,
iconStyleData:
IconStyleData
(
icon:
SvgPicture
.
asset
(
"assets/svg/arrow_dropdown.svg"
,
height:
25
,
width:
20
,),
iconSize:
12
,
iconEnabledColor:
Color
(
0xFF2D2D2D
),
iconDisabledColor:
Colors
.
grey
,
),
scrollbarTheme:
ScrollbarThemeData
(
radius:
const
Radius
.
circular
(
15
),
thickness:
MaterialStateProperty
.
all
<
double
>(
6
),
thumbVisibility:
MaterialStateProperty
.
all
<
bool
>(
true
),
dropdownStyleData:
DropdownStyleData
(
maxHeight:
200
,
width:
340
,
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
14
),
color:
AppColors
.
text_field_color
,
),
scrollbarTheme:
ScrollbarThemeData
(
radius:
const
Radius
.
circular
(
15
),
thickness:
MaterialStateProperty
.
all
<
double
>(
6
),
thumbVisibility:
MaterialStateProperty
.
all
<
bool
>(
true
),
),
),
menuItemStyleData:
const
MenuItemStyleData
(
height:
40
,
padding:
EdgeInsets
.
only
(
left:
14
,
right:
14
),
),
),
menuItemStyleData:
const
MenuItemStyleData
(
height:
40
,
padding:
EdgeInsets
.
only
(
left:
14
,
right:
14
),
),
),
),
],
),
),
SizedBox
(
height:
10
,),
Padding
(
padding:
const
EdgeInsets
.
only
(
bottom:
5.0
),
child:
Text
(
"Amount"
),
),
Container
(
height:
50
,
alignment:
Alignment
.
center
,
decoration:
BoxDecoration
(
color:
AppColors
.
text_field_color
,
borderRadius:
BorderRadius
.
circular
(
14
),
),
child:
Padding
(
padding:
const
EdgeInsets
.
fromLTRB
(
10.0
,
0.0
,
10
,
0
),
child:
TextFormField
(
controller:
Amountcontroller
,
keyboardType:
TextInputType
.
text
,
decoration:
InputDecoration
(
hintText:
"Enter Amount"
,
hintStyle:
TextStyle
(
fontWeight:
FontWeight
.
w400
,
color:
Color
(
0xFFB4BEC0
),
fontSize:
14
),
enabledBorder:
InputBorder
.
none
,
focusedBorder:
InputBorder
.
none
,
),
],
),
),
),
SizedBox
(
height:
10
,),
Padding
(
padding:
const
EdgeInsets
.
only
(
bottom:
5.0
),
child:
Text
(
"Reference Number"
),
),
Container
(
height:
50
,
alignment:
Alignment
.
center
,
decoration:
BoxDecoration
(
color:
AppColors
.
text_field_color
,
borderRadius:
BorderRadius
.
circular
(
14
),
SizedBox
(
height:
10
,),
Padding
(
padding:
const
EdgeInsets
.
only
(
bottom:
5.0
),
child:
Text
(
"Amount"
),
),
child:
Padding
(
padding:
const
EdgeInsets
.
fromLTRB
(
10.0
,
0.0
,
10
,
0
),
child:
TextFormField
(
controller:
Referencecontroller
,
keyboardType:
TextInputType
.
text
,
decoration:
InputDecoration
(
hintText:
"Enter Reference Number"
,
hintStyle:
TextStyle
(
fontWeight:
FontWeight
.
w400
,
color:
Color
(
0xFFB4BEC0
),
fontSize:
14
Container
(
height:
50
,
alignment:
Alignment
.
center
,
decoration:
BoxDecoration
(
color:
AppColors
.
text_field_color
,
borderRadius:
BorderRadius
.
circular
(
14
),
),
child:
Padding
(
padding:
const
EdgeInsets
.
fromLTRB
(
10.0
,
0.0
,
10
,
0
),
child:
TextFormField
(
controller:
Amountcontroller
,
keyboardType:
TextInputType
.
text
,
decoration:
InputDecoration
(
hintText:
"Enter Amount"
,
hintStyle:
TextStyle
(
fontWeight:
FontWeight
.
w400
,
color:
Color
(
0xFFB4BEC0
),
fontSize:
14
),
enabledBorder:
InputBorder
.
none
,
focusedBorder:
InputBorder
.
none
,
),
enabledBorder:
InputBorder
.
none
,
focusedBorder:
InputBorder
.
none
,
),
),
),
),
SizedBox
(
height:
10
,),
InkResponse
(
onTap:
()
{
_showAttachmentSheet
(
context
);
},
child:
Container
(
margin:
EdgeInsets
.
symmetric
(
vertical:
10
),
height:
45
,
width:
MediaQuery
.
of
(
context
)
.
size
.
width
,
SizedBox
(
height:
10
,),
Padding
(
padding:
const
EdgeInsets
.
only
(
bottom:
5.0
),
child:
Text
(
"Reference Number"
),
),
Container
(
height:
50
,
alignment:
Alignment
.
center
,
decoration:
BoxDecoration
(
color:
Color
(
0xFFE6F6FF
),
borderRadius:
BorderRadius
.
circular
(
12
),
border:
Border
.
all
(
color:
AppColors
.
app_blue
,
width:
0.5
)
color:
AppColors
.
text_field_color
,
borderRadius:
BorderRadius
.
circular
(
14
),
),
child:
Center
(
child:
Text
(
"Scan Document"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
AppColors
.
app_blue
),),
child:
Padding
(
padding:
const
EdgeInsets
.
fromLTRB
(
10.0
,
0.0
,
10
,
0
),
child:
TextFormField
(
controller:
Referencecontroller
,
keyboardType:
TextInputType
.
text
,
decoration:
InputDecoration
(
hintText:
"Enter Reference Number"
,
hintStyle:
TextStyle
(
fontWeight:
FontWeight
.
w400
,
color:
Color
(
0xFFB4BEC0
),
fontSize:
14
),
enabledBorder:
InputBorder
.
none
,
focusedBorder:
InputBorder
.
none
,
),
),
),
),
),
if
(
provider
.
imagePicked
==
1
&&
provider
.
imagePath
!=
null
)...[
Padding
(
padding:
const
EdgeInsets
.
symmetric
(
vertical:
4.0
),
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
Text
(
"
${provider.imagePath}
"
,
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontSize:
11
,
fontWeight:
FontWeight
.
w600
SizedBox
(
height:
10
,),
InkResponse
(
onTap:
()
{
_showAttachmentSheet
(
context
);
},
child:
Container
(
margin:
EdgeInsets
.
symmetric
(
vertical:
10
),
height:
45
,
width:
MediaQuery
.
of
(
context
)
.
size
.
width
,
decoration:
BoxDecoration
(
color:
Color
(
0xFFE6F6FF
),
borderRadius:
BorderRadius
.
circular
(
12
),
border:
Border
.
all
(
color:
AppColors
.
app_blue
,
width:
0.5
)
),
child:
Center
(
child:
Text
(
"Scan Document"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
AppColors
.
app_blue
),),
InkResponse
(
onTap:
()
{
provider
.
imagePicked
=
0
;
provider
.
imagePath
=
null
;
provider
.
imageFilePath
=
null
;
},
child:
SvgPicture
.
asset
(
"assets/svg/ic_close.svg"
,
width:
15
,
height:
15
,))
],
),
),
)
),
if
(
provider
.
imagePicked
==
1
&&
provider
.
imagePath
!=
null
)...[
Padding
(
padding:
const
EdgeInsets
.
symmetric
(
vertical:
4.0
),
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
Text
(
"
${provider.imagePath}
"
,
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontSize:
11
,
fontWeight:
FontWeight
.
w600
),),
InkResponse
(
onTap:
()
{
provider
.
imagePicked
=
0
;
provider
.
imagePath
=
null
;
provider
.
imageFilePath
=
null
;
},
child:
SvgPicture
.
asset
(
"assets/svg/ic_close.svg"
,
width:
15
,
height:
15
,))
],
),
)
],
],
]
,
)
,
),
),
),
...
...
lib/screens/serviceEngineer/PendingComplaints.dart
View file @
d24e453e
...
...
@@ -55,7 +55,7 @@ class _PendingcomplaintsState extends State<Pendingcomplaints> {
child:
SvgPicture
.
asset
(
"assets/svg/scanner.svg"
),
),
),
body:
provider
.
technician_complaint_list
.
isNotEmpty
?
Container
(
body:
SafeArea
(
child:
provider
.
technician_complaint_list
.
isNotEmpty
?
Container
(
child:
ListView
.
builder
(
scrollDirection:
Axis
.
vertical
,
shrinkWrap:
true
,
...
...
@@ -95,7 +95,7 @@ class _PendingcomplaintsState extends State<Pendingcomplaints> {
flex:
4
,
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
CrossAxisAlignment
.
start
,
children:
[
Text
(
"
${provider.technician_complaint_list[index].contactName}
"
,
...
...
@@ -179,7 +179,7 @@ class _PendingcomplaintsState extends State<Pendingcomplaints> {
padding:
EdgeInsets
.
symmetric
(
vertical:
3
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
flex:
1
,
...
...
@@ -210,11 +210,11 @@ class _PendingcomplaintsState extends State<Pendingcomplaints> {
MaterialPageRoute
(
builder:
(
context
)
=>
Visitdetails
(
complaintID:
provider
.
technician_complaint_list
[
index
]
.
complaintId
,
),
complaintID:
provider
.
technician_complaint_list
[
index
]
.
complaintId
,
),
),
);
},
...
...
@@ -225,8 +225,8 @@ class _PendingcomplaintsState extends State<Pendingcomplaints> {
Text
(
"View Details"
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontFamily:
"JakartaMedium"
color:
AppColors
.
app_blue
,
fontFamily:
"JakartaMedium"
),
),
SizedBox
(
width:
5
),
...
...
@@ -241,7 +241,7 @@ class _PendingcomplaintsState extends State<Pendingcomplaints> {
);
},
),
):
Emptywidget
(
context
),
):
Emptywidget
(
context
),
)
),
);
},
...
...
lib/screens/serviceEngineer/TodayMontlyVisists.dart
View file @
d24e453e
...
...
@@ -50,238 +50,238 @@ class _TodaymontlyvisistsState extends State<Todaymontlyvisists> {
resizeToAvoidBottomInset:
true
,
backgroundColor:
AppColors
.
scaffold_bg_color
,
appBar:
appbar
(
context
,
provider
.
title
),
body:
provider
.
visitsList
.
isNotEmpty
?
Container
(
child:
ListView
.
builder
(
scrollDirection:
Axis
.
vertical
,
shrinkWrap:
true
,
itemCount:
provider
.
visitsList
.
length
,
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
body:
SafeArea
(
child:
provider
.
visitsList
.
isNotEmpty
?
Container
(
child:
ListView
.
builder
(
scrollDirection:
Axis
.
vertical
,
shrinkWrap:
true
,
itemCount:
provider
.
visitsList
.
length
,
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
itemBuilder:
(
context
,
index
)
{
return
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
margin:
EdgeInsets
.
symmetric
(
vertical:
5
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
),
itemBuilder:
(
context
,
index
)
{
return
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
margin:
EdgeInsets
.
symmetric
(
vertical:
5
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
Expanded
(
flex:
1
,
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFE6F6FF
),
borderRadius:
BorderRadius
.
circular
(
8
,
),
),
child:
SvgPicture
.
asset
(
width:
30
,
height:
30
,
"assets/svg/se_block_head.svg"
,
),
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
Expanded
(
flex:
1
,
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFE6F6FF
),
borderRadius:
BorderRadius
.
circular
(
8
,
),
),
child:
SvgPicture
.
asset
(
width:
30
,
height:
30
,
"assets/svg/se_block_head.svg"
,
),
),
),
SizedBox
(
width:
5
),
SizedBox
(
width:
5
),
Expanded
(
flex:
4
,
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
"
${provider.visitsList[index].contactName ?? "-"}
"
,
maxLines:
1
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
),
),
Text
(
"
${provider.visitsList[index].companyName}
"
,
maxLines:
1
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
),
),
],
),
Expanded
(
flex:
4
,
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
"
${provider.visitsList[index].contactName ?? "-"}
"
,
maxLines:
1
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
),
),
Spacer
(),
Expanded
(
flex:
1
,
child:
InkResponse
(
onTap:
()
{
launch
(
'tel://
${provider.visitsList[index].mobileNo}
'
,
);
},
child:
SvgPicture
.
asset
(
"assets/svg/se_call_customer.svg"
,
color:
Color
(
0xFF0D9C00
),
height:
20
,
width:
20
,
),
Text
(
"
${provider.visitsList[index].companyName}
"
,
maxLines:
1
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
),
),
// Expanded(
// flex: 1,
// child: InkResponse(
// onTap: () {
// _showOptionsSheet(context);
// },
// child: Icon(Icons.more_vert),
// ),
// ),
],
),
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
Divider
(
thickness:
0.5
,
color:
Color
(
0xFFD7D7D7
),
),
),
Spacer
(),
Expanded
(
flex:
1
,
child:
InkResponse
(
onTap:
()
{
launch
(
'tel://
${provider.visitsList[index].mobileNo}
'
,
);
},
child:
SvgPicture
.
asset
(
"assets/svg/se_call_customer.svg"
,
color:
Color
(
0xFF0D9C00
),
height:
20
,
width:
20
,
),
),
),
// Expanded(
// flex: 1,
// child: InkResponse(
// onTap: () {
// _showOptionsSheet(context);
// },
// child: Icon(Icons.more_vert),
// ),
// ),
],
),
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
Divider
(
thickness:
0.5
,
color:
Color
(
0xFFD7D7D7
),
),
),
...
List
.
generate
(
3
,
(
j
)
{
final
textheads
=
[
"ID"
,
"Generator Type"
,
"Address"
,
];
final
textSubheads
=
[
provider
.
visitsList
[
index
].
genId
,
provider
.
visitsList
[
index
].
productName
,
provider
.
visitsList
[
index
].
address
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
flex:
1
,
child:
Text
(
textheads
[
j
].
toString
(),
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
),
),
),
...
List
.
generate
(
3
,
(
j
)
{
final
textheads
=
[
"ID"
,
"Generator Type"
,
"Address"
,
];
final
textSubheads
=
[
provider
.
visitsList
[
index
].
genId
,
provider
.
visitsList
[
index
].
productName
,
provider
.
visitsList
[
index
].
address
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
flex:
1
,
child:
Text
(
textheads
[
j
].
toString
(),
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
),
),
),
Expanded
(
flex:
2
,
child:
Text
(
textSubheads
[
j
].
toString
(),
style:
TextStyle
(
color:
Color
(
0xFF818181
),
),
),
),
],
Expanded
(
flex:
2
,
child:
Text
(
textSubheads
[
j
].
toString
(),
style:
TextStyle
(
color:
Color
(
0xFF818181
),
),
);
}),
SizedBox
(
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
InkResponse
(
onTap:
()
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Paymentdetails
(
accountName:
"Generator"
,
name:
provider
.
visitsList
[
index
]
.
companyName
,
genId:
provider
.
visitsList
[
index
]
.
genId
,
referenceID:
provider
.
visitsList
[
index
]
.
complaintId
,
),
),
);
},
child:
SvgPicture
.
asset
(
"assets/svg/se_payment_details.svg"
,
),
),
Spacer
(),
InkResponse
(
onTap:
()
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Visitdetails
(
complaintID:
provider
.
visitsList
[
index
]
.
complaintId
,
),
),
);
},
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
center
,
children:
[
Text
(
"View Details"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
AppColors
.
app_blue
,
),
),
SizedBox
(
width:
5
),
SvgPicture
.
asset
(
"assets/svg/next_button.svg"
,
),
],
),
),
],
),
),
],
),
);
},
),
)
:
Emptywidget
(
context
),
}),
SizedBox
(
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
InkResponse
(
onTap:
()
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Paymentdetails
(
accountName:
"Generator"
,
name:
provider
.
visitsList
[
index
]
.
companyName
,
genId:
provider
.
visitsList
[
index
]
.
genId
,
referenceID:
provider
.
visitsList
[
index
]
.
complaintId
,
),
),
);
},
child:
SvgPicture
.
asset
(
"assets/svg/se_payment_details.svg"
,
),
),
Spacer
(),
InkResponse
(
onTap:
()
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Visitdetails
(
complaintID:
provider
.
visitsList
[
index
]
.
complaintId
,
),
),
);
},
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
center
,
children:
[
Text
(
"View Details"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
AppColors
.
app_blue
,
),
),
SizedBox
(
width:
5
),
SvgPicture
.
asset
(
"assets/svg/next_button.svg"
,
),
],
),
),
],
),
),
],
),
);
},
),
)
:
Emptywidget
(
context
),)
),
);
},
...
...
lib/screens/serviceEngineer/UpdateComplaints.dart
View file @
d24e453e
...
...
@@ -31,247 +31,129 @@ class _UpdatecomplaintsState extends State<Updatecomplaints> {
resizeToAvoidBottomInset:
true
,
appBar:
appbar
(
context
,
"Update Complaint"
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
body:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
)
),
child:
SingleChildScrollView
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisSize:
MainAxisSize
.
min
,
children:
[
SizedBox
(
height:
15
),
Padding
(
padding:
const
EdgeInsets
.
only
(
bottom:
5.0
),
child:
Text
(
"Complaint Status"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
AppColors
.
semi_black
,
body:
SafeArea
(
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
)
),
child:
SingleChildScrollView
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisSize:
MainAxisSize
.
min
,
children:
[
SizedBox
(
height:
15
),
Padding
(
padding:
const
EdgeInsets
.
only
(
bottom:
5.0
),
child:
Text
(
"Complaint Status"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
AppColors
.
semi_black
,
),
),
),
),
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
String
>(
isExpanded:
true
,
hint:
const
Row
(
children:
[
Expanded
(
child:
Text
(
'Select Complaint Status'
,
style:
TextStyle
(
fontSize:
14
,
DropdownButtonHideUnderline
(
child:
Row
(
children:
[
Expanded
(
child:
DropdownButton2
<
String
>(
isExpanded:
true
,
hint:
const
Row
(
children:
[
Expanded
(
child:
Text
(
'Select Complaint Status'
,
style:
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
],
),
items:
provider
.
CompletedStatus
.
map
(
(
complaintStatus
)
=>
DropdownMenuItem
<
String
>(
value:
complaintStatus
[
'name'
],
child:
Text
(
complaintStatus
[
'name'
]
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
],
),
items:
provider
.
CompletedStatus
.
map
(
(
complaintStatus
)
=>
DropdownMenuItem
<
String
>(
value:
complaintStatus
[
'name'
],
child:
Text
(
complaintStatus
[
'name'
]
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
overflow:
TextOverflow
.
ellipsis
,
),
)).
toList
(),
value:
provider
.
statusID
,
onChanged:
(
value
)
{
if
(
value
!=
null
)
{
provider
.
statusID
=
value
;
provider
.
statusError
=
""
;
print
(
"statusId:
${provider.statusID}
"
);
}
},
buttonStyleData:
ButtonStyleData
(
height:
50
,
width:
160
,
padding:
const
EdgeInsets
.
only
(
left:
14
,
right:
14
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
14
),
color:
AppColors
.
text_field_color
,
)).
toList
(),
value:
provider
.
statusID
,
onChanged:
(
value
)
{
if
(
value
!=
null
)
{
provider
.
statusID
=
value
;
provider
.
statusError
=
""
;
print
(
"statusId:
${provider.statusID}
"
);
}
},
buttonStyleData:
ButtonStyleData
(
height:
50
,
width:
160
,
padding:
const
EdgeInsets
.
only
(
left:
14
,
right:
14
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
14
),
color:
AppColors
.
text_field_color
,
),
),
),
iconStyleData:
const
IconStyleData
(
icon:
Icon
(
Icons
.
keyboard_arrow_down_sharp
,
iconStyleData:
const
IconStyleData
(
icon:
Icon
(
Icons
.
keyboard_arrow_down_sharp
,
),
iconSize:
14
,
iconEnabledColor:
Color
(
0xFF2D2D2D
),
iconDisabledColor:
Colors
.
grey
,
),
iconSize:
14
,
iconEnabledColor:
Color
(
0xFF2D2D2D
),
iconDisabledColor:
Colors
.
grey
,
),
dropdownStyleData:
DropdownStyleData
(
maxHeight:
200
,
width:
350
,
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
14
),
color:
AppColors
.
text_field_color
,
dropdownStyleData:
DropdownStyleData
(
maxHeight:
200
,
width:
350
,
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
14
),
color:
AppColors
.
text_field_color
,
),
scrollbarTheme:
ScrollbarThemeData
(
radius:
const
Radius
.
circular
(
15
),
thickness:
MaterialStateProperty
.
all
<
double
>(
6
),
thumbVisibility:
MaterialStateProperty
.
all
<
bool
>(
true
),
),
),
scrollbarTheme:
ScrollbarThemeData
(
radius:
const
Radius
.
circular
(
15
),
thickness:
MaterialStateProperty
.
all
<
double
>(
6
),
thumbVisibility:
MaterialStateProperty
.
all
<
bool
>(
true
),
menuItemStyleData:
const
MenuItemStyleData
(
height:
40
,
padding:
EdgeInsets
.
only
(
left:
14
,
right:
14
),
),
),
menuItemStyleData:
const
MenuItemStyleData
(
height:
40
,
padding:
EdgeInsets
.
only
(
left:
14
,
right:
14
),
),
),
),
],
),
),
SizedBox
(
height:
5
,),
ErrorWidget
(
context
,
provider
.
statusError
),
if
(
provider
.
statusID
!.
isNotEmpty
)...[
if
(
provider
.
statusID
!=
"Pending"
)...[
Padding
(
padding:
const
EdgeInsets
.
only
(
bottom:
5.0
),
child:
Text
(
"FSR Number"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
AppColors
.
semi_black
,
],
),
),
),
Container
(
height:
50
,
alignment:
Alignment
.
center
,
decoration:
BoxDecoration
(
color:
AppColors
.
text_field_color
,
borderRadius:
BorderRadius
.
circular
(
14
),
),
child:
Padding
(
padding:
const
EdgeInsets
.
fromLTRB
(
10.0
,
0.0
,
10
,
0
),
child:
TextFormField
(
controller:
provider
.
fsrNumberController
,
keyboardType:
TextInputType
.
text
,
onChanged:
(
value
)
{
provider
.
fsrError
=
""
;
},
decoration:
InputDecoration
(
hintText:
"Enter FSR Number"
,
hintStyle:
TextStyle
(
fontWeight:
FontWeight
.
w400
,
color:
Color
(
0xFFB4BEC0
),
fontSize:
14
),
enabledBorder:
InputBorder
.
none
,
focusedBorder:
InputBorder
.
none
,
),
),
),
),
SizedBox
(
height:
5
,),
ErrorWidget
(
context
,
provider
.
fsrError
)
]
],
Row
(
children:
[
Expanded
(
child:
Padding
(
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
5.0
,
vertical:
3
),
child:
Text
(
"Select Time"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
AppColors
.
semi_black
,
),
),
),
),
Expanded
(
child:
Padding
(
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
20.0
),
child:
Text
(
"Running Hours"
,
style:
TextStyle
(
fontWeight:
FontWeight
.
w400
,
color:
AppColors
.
semi_black
,
),
),
SizedBox
(
height:
5
,),
ErrorWidget
(
context
,
provider
.
statusError
),
if
(
provider
.
statusID
!.
isNotEmpty
)...[
if
(
provider
.
statusID
!=
"Pending"
)...[
Padding
(
padding:
const
EdgeInsets
.
only
(
bottom:
5.0
),
child:
Text
(
"FSR Number"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
AppColors
.
semi_black
,
),
),
],
),
Row
(
children:
[
Expanded
(
child:
Container
(
decoration:
BoxDecoration
(
color:
AppColors
.
text_field_color
,
borderRadius:
BorderRadius
.
circular
(
14
),
),
child:
InkWell
(
onTap:
()
{
provider
.
selectTime
(
context
);
},
child:
Container
(
alignment:
Alignment
.
center
,
height:
45
,
margin:
EdgeInsets
.
only
(
left:
15.0
,
right:
15.0
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
15.0
),
),
child:
Row
(
children:
[
Text
(
provider
.
selectedTime
.
hour
.
toString
()
+
":"
+
provider
.
selectedTime
.
minute
.
toString
()
??
"Enter in Time"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
fontWeight:
FontWeight
.
w400
),
),
]),
),
)),
),
SizedBox
(
width:
10
,),
Expanded
(
child:
Container
(
),
Container
(
height:
50
,
alignment:
Alignment
.
center
,
decoration:
BoxDecoration
(
color:
AppColors
.
text_field_color
,
...
...
@@ -284,130 +166,250 @@ class _UpdatecomplaintsState extends State<Updatecomplaints> {
10.0
,
0.0
,
10
,
0
),
child:
TextFormField
(
controller:
provider
.
runningHours
Controller
,
provider
.
fsrNumber
Controller
,
keyboardType:
TextInputType
.
text
,
onChanged:
(
value
)
{
provider
.
runningHours
Error
=
""
;
provider
.
fsr
Error
=
""
;
},
decoration:
InputDecoration
(
hintText:
"Enter
Running Hours
"
,
"Enter
FSR Number
"
,
hintStyle:
TextStyle
(
fontWeight:
FontWeight
.
w400
,
color:
Color
(
0xFFB4BEC0
),
fontSize:
14
),
enabledBorder:
InputBorder
.
none
,
focusedBorder:
InputBorder
.
none
,
),
),
),
),
),
],
),
ErrorWidget
(
context
,
provider
.
runningHoursError
),
InkResponse
(
onTap:
()
{
_showAttachmentSheet
(
context
);
},
child:
Container
(
margin:
EdgeInsets
.
symmetric
(
vertical:
10
),
height:
45
,
width:
MediaQuery
.
of
(
context
)
.
size
.
width
,
decoration:
BoxDecoration
(
color:
Color
(
0xFFE6F6FF
),
borderRadius:
BorderRadius
.
circular
(
12
),
border:
Border
.
all
(
color:
AppColors
.
app_blue
,
width:
0.5
)
),
child:
Center
(
child:
Text
(
"Scan Document"
,
style:
TextStyle
(
color:
AppColors
.
app_blue
),),
),
SizedBox
(
height:
5
,),
ErrorWidget
(
context
,
provider
.
fsrError
)
]
],
Row
(
children:
[
Expanded
(
child:
Padding
(
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
5.0
,
vertical:
3
),
child:
Text
(
"Select Time"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
AppColors
.
semi_black
,
),
),
),
),
Expanded
(
child:
Padding
(
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
20.0
),
child:
Text
(
"Running Hours"
,
style:
TextStyle
(
fontWeight:
FontWeight
.
w400
,
color:
AppColors
.
semi_black
,
),
),
),
),
],
),
),
if
(
provider
.
imagePicked
==
1
&&
provider
.
imagePath
!=
null
)...[
Padding
(
padding:
const
EdgeInsets
.
symmetric
(
vertical:
4.0
),
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
Text
(
"
${provider.imagePath}
"
,
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontSize:
11
,
fontWeight:
FontWeight
.
w600
Row
(
children:
[
Expanded
(
child:
Container
(
decoration:
BoxDecoration
(
color:
AppColors
.
text_field_color
,
borderRadius:
BorderRadius
.
circular
(
14
),
),
child:
InkWell
(
onTap:
()
{
provider
.
selectTime
(
context
);
},
child:
Container
(
alignment:
Alignment
.
center
,
height:
45
,
margin:
EdgeInsets
.
only
(
left:
15.0
,
right:
15.0
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
15.0
),
),
child:
Row
(
children:
[
Text
(
provider
.
selectedTime
.
hour
.
toString
()
+
":"
+
provider
.
selectedTime
.
minute
.
toString
()
??
"Enter in Time"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
fontWeight:
FontWeight
.
w400
),
),
]),
),
)),
),
SizedBox
(
width:
10
,),
Expanded
(
child:
Container
(
height:
50
,
alignment:
Alignment
.
center
,
decoration:
BoxDecoration
(
color:
AppColors
.
text_field_color
,
borderRadius:
BorderRadius
.
circular
(
14
),
),
child:
Padding
(
padding:
const
EdgeInsets
.
fromLTRB
(
10.0
,
0.0
,
10
,
0
),
child:
TextFormField
(
controller:
provider
.
runningHoursController
,
keyboardType:
TextInputType
.
text
,
onChanged:
(
value
)
{
provider
.
runningHoursError
=
""
;
},
decoration:
InputDecoration
(
hintText:
"Enter Running Hours"
,
hintStyle:
TextStyle
(
fontWeight:
FontWeight
.
w400
,
color:
Color
(
0xFFB4BEC0
),
fontSize:
14
),
enabledBorder:
InputBorder
.
none
,
focusedBorder:
InputBorder
.
none
,
),
),
),
),
),
],
),
ErrorWidget
(
context
,
provider
.
runningHoursError
),
InkResponse
(
onTap:
()
{
_showAttachmentSheet
(
context
);
},
child:
Container
(
margin:
EdgeInsets
.
symmetric
(
vertical:
10
),
height:
45
,
width:
MediaQuery
.
of
(
context
)
.
size
.
width
,
decoration:
BoxDecoration
(
color:
Color
(
0xFFE6F6FF
),
borderRadius:
BorderRadius
.
circular
(
12
),
border:
Border
.
all
(
color:
AppColors
.
app_blue
,
width:
0.5
)
),
child:
Center
(
child:
Text
(
"Scan Document"
,
style:
TextStyle
(
color:
AppColors
.
app_blue
),),
InkResponse
(
onTap:
()
{
provider
.
imagePicked
=
0
;
provider
.
imagePath
=
null
;
provider
.
imageFilePath
=
null
;
},
child:
SvgPicture
.
asset
(
"assets/svg/ic_close.svg"
,
width:
15
,
height:
15
,))
],
),
)
],
Padding
(
padding:
const
EdgeInsets
.
only
(
bottom:
5.0
),
child:
Text
(
"Feedback"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
AppColors
.
semi_black
,
),
),
),
),
Container
(
height:
150
,
alignment:
Alignment
.
center
,
decoration:
BoxDecoration
(
color:
AppColors
.
text_field_color
,
borderRadius:
BorderRadius
.
circular
(
14
),
if
(
provider
.
imagePicked
==
1
&&
provider
.
imagePath
!=
null
)...[
Padding
(
padding:
const
EdgeInsets
.
symmetric
(
vertical:
4.0
),
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
Text
(
"
${provider.imagePath}
"
,
style:
TextStyle
(
color:
AppColors
.
semi_black
,
fontSize:
11
,
fontWeight:
FontWeight
.
w600
),),
InkResponse
(
onTap:
()
{
provider
.
imagePicked
=
0
;
provider
.
imagePath
=
null
;
provider
.
imageFilePath
=
null
;
},
child:
SvgPicture
.
asset
(
"assets/svg/ic_close.svg"
,
width:
15
,
height:
15
,))
],
),
)
],
Padding
(
padding:
const
EdgeInsets
.
only
(
bottom:
5.0
),
child:
Text
(
"Feedback"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
AppColors
.
semi_black
,
),
),
),
child:
Padding
(
padding:
const
EdgeInsets
.
fromLTRB
(
10.0
,
0.0
,
10
,
0
),
child:
TextFormField
(
controller:
provider
.
feedbackController
,
maxLines:
60
,
keyboardType:
TextInputType
.
text
,
decoration:
InputDecoration
(
hintText:
"Enter Feedback"
,
hintStyle:
TextStyle
(
fontWeight:
FontWeight
.
w400
,
color:
Color
(
0xFFB4BEC0
),
fontSize:
14
Container
(
height:
150
,
alignment:
Alignment
.
center
,
decoration:
BoxDecoration
(
color:
AppColors
.
text_field_color
,
borderRadius:
BorderRadius
.
circular
(
14
),
),
child:
Padding
(
padding:
const
EdgeInsets
.
fromLTRB
(
10.0
,
0.0
,
10
,
0
),
child:
TextFormField
(
controller:
provider
.
feedbackController
,
maxLines:
60
,
keyboardType:
TextInputType
.
text
,
decoration:
InputDecoration
(
hintText:
"Enter Feedback"
,
hintStyle:
TextStyle
(
fontWeight:
FontWeight
.
w400
,
color:
Color
(
0xFFB4BEC0
),
fontSize:
14
),
enabledBorder:
InputBorder
.
none
,
focusedBorder:
InputBorder
.
none
,
),
enabledBorder:
InputBorder
.
none
,
focusedBorder:
InputBorder
.
none
,
),
),
),
),
]
,
],
)
,
),
),
),
...
...
lib/screens/serviceEngineer/VisitDetails.dart
View file @
d24e453e
...
...
@@ -43,251 +43,253 @@ class _VisitdetailsState extends State<Visitdetails> {
resizeToAvoidBottomInset:
true
,
appBar:
appbar
(
context
,
"Visit Details"
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
body:
Container
(
child:
SingleChildScrollView
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
"Customer Details"
),
Container
(
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
,
vertical:
10
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
List
.
generate
(
4
,
(
j
)
{
final
textheads
=
[
"
${customerDetails.cname}
"
,
"Mobile Number"
,
"Contact Person Number"
,
"Mail ID"
,
];
final
textSubheads
=
[
customerDetails
.
aname
??
"-"
,
customerDetails
.
mob1
??
"-"
,
customerDetails
.
mob2
??
"-"
,
customerDetails
.
mail
??
"-"
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
6
,
horizontal:
0
,
),
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
if
(
j
==
0
)
...[
SvgPicture
.
asset
(
"assets/svg/se_block_head.svg"
,
),
SizedBox
(
width:
5
),
],
Expanded
(
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
textheads
[
j
].
toString
(),
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,),
SizedBox
(
// height:45,
width:
MediaQuery
.
of
(
context
,
).
size
.
width
*
0.75
,
child:
Text
(
textSubheads
[
j
],
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
body:
SafeArea
(
child:
SizedBox
(
child:
SingleChildScrollView
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
"Customer Details"
),
Container
(
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
,
vertical:
10
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
List
.
generate
(
4
,
(
j
)
{
final
textheads
=
[
"
${customerDetails.cname}
"
,
"Mobile Number"
,
"Contact Person Number"
,
"Mail ID"
,
];
final
textSubheads
=
[
customerDetails
.
aname
??
"-"
,
customerDetails
.
mob1
??
"-"
,
customerDetails
.
mob2
??
"-"
,
customerDetails
.
mail
??
"-"
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
6
,
horizontal:
0
,
),
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
if
(
j
==
0
)
...[
SvgPicture
.
asset
(
"assets/svg/se_block_head.svg"
,
),
SizedBox
(
width:
5
),
],
Expanded
(
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
textheads
[
j
].
toString
(),
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,),
SizedBox
(
// height:45,
width:
MediaQuery
.
of
(
context
,
).
size
.
width
*
0.75
,
child:
Text
(
textSubheads
[
j
],
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
),
),
),
)
,
]
,
]
,
)
,
),
),
),
],
),
);
}),
),
),
Text
(
"Generator Details"
),
Container
(
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
,
vertical:
10
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
),
],
),
);
}),
),
),
child:
Column
(
children:
[
Row
(
children:
[
SvgPicture
.
asset
(
"assetName"
),
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
List
.
generate
(
6
,
(
j
)
{
final
textheads
=
[
"Gen ID"
,
"Engine Number"
,
"Address"
,
"Product Name"
,
"Engine Model"
,
"Date Of Supply"
,
];
final
textSubheads
=
[
"
${generatorDetails.genHashId}
"
,
"
${generatorDetails.engineNo}
"
,
"
${generatorDetails.address}
"
,
"
${generatorDetails.spname}
"
,
"
${generatorDetails.engineModel}
"
,
"
${complaintDetails.dateOfSupply}
"
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
),
child:
Column
(
children:
[
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
,
horizontal:
0
,
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
textheads
[
j
].
toString
()),
SizedBox
(
// height:45,
width:
MediaQuery
.
of
(
context
,
).
size
.
width
*
0.8
,
child:
Text
(
textSubheads
[
j
],
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
Text
(
"Generator Details"
),
Container
(
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
,
vertical:
10
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
),
),
child:
Column
(
children:
[
Row
(
children:
[
SvgPicture
.
asset
(
"assetName"
),
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
List
.
generate
(
6
,
(
j
)
{
final
textheads
=
[
"Gen ID"
,
"Engine Number"
,
"Address"
,
"Product Name"
,
"Engine Model"
,
"Date Of Supply"
,
];
final
textSubheads
=
[
"
${generatorDetails.genHashId}
"
,
"
${generatorDetails.engineNo}
"
,
"
${generatorDetails.address}
"
,
"
${generatorDetails.spname}
"
,
"
${generatorDetails.engineModel}
"
,
"
${complaintDetails.dateOfSupply}
"
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
),
child:
Column
(
children:
[
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
,
horizontal:
0
,
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
textheads
[
j
].
toString
()),
SizedBox
(
// height:45,
width:
MediaQuery
.
of
(
context
,
).
size
.
width
*
0.8
,
child:
Text
(
textSubheads
[
j
],
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
),
),
),
)
,
]
,
]
,
)
,
),
),
],
),
],
),
);
}),
),
],
),
],
),
),
Text
(
"Complaint Details"
),
Container
(
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
,
vertical:
10
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
),
],
),
],
),
);
}),
),
],
),
],
),
),
child:
Column
(
children:
[
Row
(
children:
[
SvgPicture
.
asset
(
"assetName"
),
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
List
.
generate
(
4
,
(
j
)
{
final
textheads
=
[
"Complaint ID"
,
"Complaint Description"
,
"Opened Date"
,
"Complaint Type"
,
];
final
textSubheads
=
[
"
${complaintDetails.complaintId}
"
,
"
${complaintDetails.complaintDesc}
"
,
"
${complaintDetails.openedDate}
"
,
"
${complaintDetails.complaintType}
"
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
),
child:
Column
(
children:
[
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
,
horizontal:
0
,
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
textheads
[
j
].
toString
()),
SizedBox
(
// height:45,
width:
MediaQuery
.
of
(
context
,
).
size
.
width
*
0.8
,
child:
Text
(
textSubheads
[
j
],
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
Text
(
"Complaint Details"
),
Container
(
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
,
vertical:
10
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
),
),
child:
Column
(
children:
[
Row
(
children:
[
SvgPicture
.
asset
(
"assetName"
),
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
List
.
generate
(
4
,
(
j
)
{
final
textheads
=
[
"Complaint ID"
,
"Complaint Description"
,
"Opened Date"
,
"Complaint Type"
,
];
final
textSubheads
=
[
"
${complaintDetails.complaintId}
"
,
"
${complaintDetails.complaintDesc}
"
,
"
${complaintDetails.openedDate}
"
,
"
${complaintDetails.complaintType}
"
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
),
child:
Column
(
children:
[
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
3
,
horizontal:
0
,
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
textheads
[
j
].
toString
()),
SizedBox
(
// height:45,
width:
MediaQuery
.
of
(
context
,
).
size
.
width
*
0.8
,
child:
Text
(
textSubheads
[
j
],
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
),
),
),
)
,
]
,
]
,
)
,
),
)
,
]
,
)
,
]
,
)
,
);
}
),
)
,
]
,
)
,
]
,
]
,
)
,
]
,
)
,
)
;
}),
),
]
,
)
,
]
,
)
,
),
),
SizedBox
(
height:
75
)
,
]
,
SizedBox
(
height:
75
),
]
,
)
,
),
),
),
...
...
lib/screens/serviceEngineer/scanComplaintDetails.dart
View file @
d24e453e
...
...
@@ -41,62 +41,64 @@ class _ScancomplaintdetailsState extends State<Scancomplaintdetails> {
resizeToAvoidBottomInset:
true
,
backgroundColor:
AppColors
.
scaffold_bg_color
,
appBar:
appbar
(
context
,
"Pending Complaints"
),
body:
Container
(
decoration:
BoxDecoration
(
color:
Colors
.
black
),
child:
Column
(
children:
[
Spacer
(),
Container
(
height:
250
,
child:
QRView
(
key:
provider
.
scannerKey
,
onQRViewCreated:
(
p0
)
{
provider
.
onQRViewCreated
(
p0
,
"pendingComplaints"
,
context
);
},
formatsAllowed:
[
BarcodeFormat
.
qrcode
],
cameraFacing:
CameraFacing
.
back
,
overlay:
QrScannerOverlayShape
(
borderColor:
AppColors
.
app_blue
,
borderRadius:
20
,
borderLength:
60
,
borderWidth:
10
,
cutOutSize:
250.0
,
body:
SafeArea
(
child:
Container
(
decoration:
BoxDecoration
(
color:
Colors
.
black
),
child:
Column
(
children:
[
Spacer
(),
Container
(
height:
250
,
child:
QRView
(
key:
provider
.
scannerKey
,
onQRViewCreated:
(
p0
)
{
provider
.
onQRViewCreated
(
p0
,
"pendingComplaints"
,
context
);
},
formatsAllowed:
[
BarcodeFormat
.
qrcode
],
cameraFacing:
CameraFacing
.
back
,
overlay:
QrScannerOverlayShape
(
borderColor:
AppColors
.
app_blue
,
borderRadius:
20
,
borderLength:
60
,
borderWidth:
10
,
cutOutSize:
250.0
,
),
),
),
),
SizedBox
(
height:
25
),
Text
(
"Scan QR"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
fontSize:
18
,
color:
Colors
.
white
),
),
Text
(
"to open Complaints"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
fontSize:
14
,
color:
Colors
.
white
),
),
Spacer
(),
Text
(
"or"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
fontSize:
18
,
color:
Colors
.
white
),
),
InkResponse
(
onTap:
()
async
{
_showPartIdBottomSheet
(
context
);
},
child:
Text
(
"Tap To Enter Generator ID"
,
SizedBox
(
height:
25
),
Text
(
"Scan QR"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
fontSize:
18
,
color:
Colors
.
white
),
),
Text
(
"to open Complaints"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
fontSize:
14
,
color:
Colors
.
white
),
),
),
SizedBox
(
height:
50
),
],
Spacer
(),
Text
(
"or"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
fontSize:
18
,
color:
Colors
.
white
),
),
InkResponse
(
onTap:
()
async
{
_showPartIdBottomSheet
(
context
);
},
child:
Text
(
"Tap To Enter Generator ID"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
fontSize:
14
,
color:
Colors
.
white
),
),
),
SizedBox
(
height:
50
),
],
),
),
),
),
...
...
lib/screens/serviceEngineer/serviceEngineerDashboard.dart
View file @
d24e453e
...
...
@@ -94,223 +94,225 @@ class _ServiceengineerdashboardState extends State<Serviceengineerdashboard> {
),
),
),
body:
Container
(
child:
SingleChildScrollView
(
child:
Column
(
children:
[
Container
(
margin:
EdgeInsets
.
only
(
top:
0
,
bottom:
15
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
vertical
(
bottom:
Radius
.
circular
(
16
),
body:
SafeArea
(
child:
Container
(
child:
SingleChildScrollView
(
child:
Column
(
children:
[
Container
(
margin:
EdgeInsets
.
only
(
top:
0
,
bottom:
15
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
vertical
(
bottom:
Radius
.
circular
(
16
),
),
),
),
child:
Column
(
children:
[
InkResponse
(
onTap:
()
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Pendingcomplaints
(),
child:
Column
(
children:
[
InkResponse
(
onTap:
()
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Pendingcomplaints
(),
),
);
},
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
15
,
),
);
},
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
15
,
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
15
,
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFFFEFEF
),
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
Expanded
(
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
children:
[
Text
(
"
${provider.pendingComplaints}
"
,
style:
TextStyle
(
fontSize:
30
,
color:
Color
(
0xFFED3424
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
15
,
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFFFEFEF
),
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
Expanded
(
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
children:
[
Text
(
"
${provider.pendingComplaints}
"
,
style:
TextStyle
(
fontSize:
30
,
color:
Color
(
0xFFED3424
),
),
),
),
Text
(
"Pending Complaints"
)
,
]
,
Text
(
"Pending Complaints"
),
]
,
)
,
),
),
)
,
]
,
]
,
)
,
),
),
),
],
),
),
Container
(
padding:
EdgeInsets
.
only
(
left:
15
),
alignment:
Alignment
.
topLeft
,
child:
Text
(
"Collections & Visits"
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
fontFamily:
"JakartaMedium"
,
fontSize:
14
),
),
),
Container
(
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
15
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
],
),
),
child:
GridView
.
builder
(
padding:
EdgeInsets
.
symmetric
(
vertical:
15
,
horizontal:
10
,
Container
(
padding:
EdgeInsets
.
only
(
left:
15
),
alignment:
Alignment
.
topLeft
,
child:
Text
(
"Collections & Visits"
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
fontFamily:
"JakartaMedium"
,
fontSize:
14
),
),
itemCount:
4
,
shrinkWrap:
true
,
physics:
NeverScrollableScrollPhysics
(),
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount
(
crossAxisCount:
2
,
crossAxisSpacing:
10
,
mainAxisSpacing:
10
,
childAspectRatio:
22
/
10
,
),
Container
(
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
15
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
itemBuilder:
(
context
,
index
)
{
final
numbers
=
[
provider
.
monthlyPaymentCollectionAmount
,
provider
.
paymentCollectionWalletBalanceAmount
,
provider
.
thisMonthsVisits
,
provider
.
todayVisits
,
];
final
names
=
[
"Month Collection"
,
"P.C. Wallet"
,
"Month Visits"
,
"Today Visits"
,
];
final
List
<
int
>
colorCodes
=
[
0xFFE7FFE5
,
0xFFFFFCD5
,
0xFFF3EDFF
,
0xFFFFF6F0
,
];
final
List
<
int
>
textColorCodes
=
[
0xFF0D9C00
,
0xFF605C00
,
0xFF493272
,
0xFF91481B
,
];
return
InkResponse
(
onTap:
()
{
var
route
;
switch
(
index
)
{
case
0
:
route
=
Monthlycollection
();
break
;
case
1
:
route
=
Pcwallet
();
break
;
case
2
:
route
=
Todaymontlyvisists
(
visitType:
"Month"
);
break
;
case
3
:
route
=
Todaymontlyvisists
(
visitType:
"Today"
);
break
;
}
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
route
),
);
},
child:
Container
(
padding:
EdgeInsets
.
only
(
left:
15
,
top:
5
,
bottom:
5
,
),
decoration:
BoxDecoration
(
color:
Color
(
colorCodes
[
index
]),
borderRadius:
BorderRadius
.
circular
(
12
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
Row
(
children:
[
if
([
0
,
1
].
contains
(
index
))...[
Text
(
"₹"
,
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
textColorCodes
[
index
]),
),),
],
Padding
(
padding:
EdgeInsets
.
only
(
top:
5
),
child:
Text
(
"
${numbers[index].toString()}
"
,
style:
TextStyle
(
fontSize:
27
,
color:
Color
(
textColorCodes
[
index
]),
child:
GridView
.
builder
(
padding:
EdgeInsets
.
symmetric
(
vertical:
15
,
horizontal:
10
,
),
itemCount:
4
,
shrinkWrap:
true
,
physics:
NeverScrollableScrollPhysics
(),
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount
(
crossAxisCount:
2
,
crossAxisSpacing:
10
,
mainAxisSpacing:
10
,
childAspectRatio:
22
/
10
,
),
itemBuilder:
(
context
,
index
)
{
final
numbers
=
[
provider
.
monthlyPaymentCollectionAmount
,
provider
.
paymentCollectionWalletBalanceAmount
,
provider
.
thisMonthsVisits
,
provider
.
todayVisits
,
];
final
names
=
[
"Month Collection"
,
"P.C. Wallet"
,
"Month Visits"
,
"Today Visits"
,
];
final
List
<
int
>
colorCodes
=
[
0xFFE7FFE5
,
0xFFFFFCD5
,
0xFFF3EDFF
,
0xFFFFF6F0
,
];
final
List
<
int
>
textColorCodes
=
[
0xFF0D9C00
,
0xFF605C00
,
0xFF493272
,
0xFF91481B
,
];
return
InkResponse
(
onTap:
()
{
var
route
;
switch
(
index
)
{
case
0
:
route
=
Monthlycollection
();
break
;
case
1
:
route
=
Pcwallet
();
break
;
case
2
:
route
=
Todaymontlyvisists
(
visitType:
"Month"
);
break
;
case
3
:
route
=
Todaymontlyvisists
(
visitType:
"Today"
);
break
;
}
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
route
),
);
},
child:
Container
(
padding:
EdgeInsets
.
only
(
left:
15
,
top:
5
,
bottom:
5
,
),
decoration:
BoxDecoration
(
color:
Color
(
colorCodes
[
index
]),
borderRadius:
BorderRadius
.
circular
(
12
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
Row
(
children:
[
if
([
0
,
1
].
contains
(
index
))...[
Text
(
"₹"
,
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
textColorCodes
[
index
]),
),),
],
Padding
(
padding:
EdgeInsets
.
only
(
top:
5
),
child:
Text
(
"
${numbers[index].toString()}
"
,
style:
TextStyle
(
fontSize:
27
,
color:
Color
(
textColorCodes
[
index
]),
),
),
),
)
,
]
,
),
Text
(
names
[
index
],
style:
TextStyle
(
color:
Color
(
0xFF818181
)
),)
,
]
,
]
,
)
,
Text
(
names
[
index
],
style:
TextStyle
(
color:
Color
(
0xFF818181
)
),),
]
,
)
,
),
),
);
},
),
),
InkResponse
(
onTap:
()
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Nearbygenerators
(),));
},
child:
Container
(
height:
60
,
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
0
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
),
);
},
),
child:
Row
(
children:
[
Expanded
(
flex:
1
,
child:
SvgPicture
.
asset
(
"assets/svg/find_generator.svg"
,
),
InkResponse
(
onTap:
()
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
Nearbygenerators
(),));
},
child:
Container
(
height:
60
,
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
0
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
20
),
),
child:
Row
(
children:
[
Expanded
(
flex:
1
,
child:
SvgPicture
.
asset
(
"assets/svg/find_generator.svg"
,
),
),
),
Expanded
(
flex:
4
,
child:
Text
(
"Find Nearby Generators"
),
)
,
]
,
Expanded
(
flex:
4
,
child:
Text
(
"Find Nearby Generators"
)
,
),
]
,
)
,
),
),
)
,
]
,
]
,
)
,
),
),
),
...
...
lib/screens/splash.dart
View file @
d24e453e
...
...
@@ -141,18 +141,20 @@ class _SplashState extends State<Splash> {
Widget
build
(
BuildContext
context
)
{
return
Scaffold
(
resizeToAvoidBottomInset:
true
,
body:
Consumer
<
SplashVersionNotifier
>(
builder:
(
context
,
value
,
child
)
{
return
Container
(
alignment:
Alignment
.
center
,
child:
Container
(
body:
SafeArea
(
child:
Consumer
<
SplashVersionNotifier
>(
builder:
(
context
,
value
,
child
)
{
return
Container
(
alignment:
Alignment
.
center
,
height:
300
,
width:
300
,
child:
splashImage
,
),
);
},
child:
Container
(
alignment:
Alignment
.
center
,
height:
300
,
width:
300
,
child:
splashImage
,
),
);
},
),
),
);
}
...
...
lib/services/api_calling.dart
View file @
d24e453e
...
...
@@ -1652,7 +1652,9 @@ class ApiCalling {
};
final
res
=
await
post
(
data
,
paymentRequesitionPaymentsListUrl
,
{});
if
(
res
!=
null
)
{
debugPrint
(
res
.
body
);
print
(
data
);
print
(
"payment req:
${res.body}
"
);
return
paymentRequisitionPaymentsListResponse
.
fromJson
(
jsonDecode
(
res
.
body
),
);
...
...
Prev
1
2
3
Next
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