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
c92f4c79
Commit
c92f4c79
authored
Jul 10, 2025
by
Sai Srinivas
Browse files
ios changes in Navigation swipe gestures.
parent
ee178d55
Changes
35
Hide whitespace changes
Inline
Side-by-side
ios/Podfile.lock
View file @
c92f4c79
PODS:
PODS:
- app_settings (5.1.1):
- Flutter
- camera_avfoundation (0.0.1):
- camera_avfoundation (0.0.1):
- Flutter
- Flutter
- connectivity_plus (0.0.1):
- connectivity_plus (0.0.1):
...
@@ -167,6 +169,7 @@ PODS:
...
@@ -167,6 +169,7 @@ PODS:
- FlutterMacOS
- FlutterMacOS
DEPENDENCIES:
DEPENDENCIES:
- app_settings (from `.symlinks/plugins/app_settings/ios`)
- camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`)
- camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
...
@@ -219,6 +222,8 @@ SPEC REPOS:
...
@@ -219,6 +222,8 @@ SPEC REPOS:
- SDWebImageWebPCoder
- SDWebImageWebPCoder
EXTERNAL SOURCES:
EXTERNAL SOURCES:
app_settings:
:path: ".symlinks/plugins/app_settings/ios"
camera_avfoundation:
camera_avfoundation:
:path: ".symlinks/plugins/camera_avfoundation/ios"
:path: ".symlinks/plugins/camera_avfoundation/ios"
connectivity_plus:
connectivity_plus:
...
@@ -281,6 +286,7 @@ EXTERNAL SOURCES:
...
@@ -281,6 +286,7 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/webview_flutter_wkwebview/darwin"
:path: ".symlinks/plugins/webview_flutter_wkwebview/darwin"
SPEC CHECKSUMS:
SPEC CHECKSUMS:
app_settings: 58017cd26b604ae98c3e65acbdd8ba173703cc82
camera_avfoundation: adb0207d868b2d873e895371d88448399ab78d87
camera_avfoundation: adb0207d868b2d873e895371d88448399ab78d87
connectivity_plus: 2a701ffec2c0ae28a48cf7540e279787e77c447d
connectivity_plus: 2a701ffec2c0ae28a48cf7540e279787e77c447d
device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342
device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342
...
...
lib/Notifiers/commonProvider/accountsListProvider.dart
View file @
c92f4c79
...
@@ -334,7 +334,7 @@ class Accountslistprovider extends ChangeNotifier {
...
@@ -334,7 +334,7 @@ class Accountslistprovider extends ChangeNotifier {
MaterialPageRoute
(
MaterialPageRoute
(
builder:
(
context
)
=>
Accountslistdetails
(
accountID:
data
.
id
),
builder:
(
context
)
=>
Accountslistdetails
(
accountID:
data
.
id
),
),
),
(
Route
<
dynamic
>
route
)
{
(
Route
<
dynamic
>
route
)
{
return
route
.
settings
.
arguments
==
'Financedashboard'
;
return
route
.
settings
.
arguments
==
'Financedashboard'
;
},
},
);
);
...
@@ -610,6 +610,7 @@ class Accountslistprovider extends ChangeNotifier {
...
@@ -610,6 +610,7 @@ class Accountslistprovider extends ChangeNotifier {
}
}
resetValues
()
{
resetValues
()
{
print
(
"rv"
);
_selectedAccountType
=
null
;
_selectedAccountType
=
null
;
_selectedState
=
null
;
_selectedState
=
null
;
_selectedDistricts
=
null
;
_selectedDistricts
=
null
;
...
...
lib/Notifiers/financeProvider/RequestionListProvider.dart
View file @
c92f4c79
...
@@ -975,6 +975,7 @@ class Requestionlistprovider extends ChangeNotifier {
...
@@ -975,6 +975,7 @@ class Requestionlistprovider extends ChangeNotifier {
// }
// }
void
resetForm
()
{
void
resetForm
()
{
print
(
"ios calling"
);
_submitClicked
=
false
;
_submitClicked
=
false
;
accountSearchController
.
clear
();
accountSearchController
.
clear
();
paymentAccountSearchController
.
clear
();
paymentAccountSearchController
.
clear
();
...
...
lib/Notifiers/financeProvider/paymentReceiptsProvider.dart
View file @
c92f4c79
...
@@ -448,10 +448,10 @@ class Paymentreceiptsprovider extends ChangeNotifier {
...
@@ -448,10 +448,10 @@ class Paymentreceiptsprovider extends ChangeNotifier {
...
data
.
receiptAccounts
!,
...
data
.
receiptAccounts
!,
];
];
_receiptPaymentModes
=
data
.
paymentModes
!;
_receiptPaymentModes
=
data
.
paymentModes
!;
_receiptPaymentModes
=
[
PaymentModes
(
_receiptPaymentModes
=
[
name:
"Select"
,
PaymentModes
(
name:
"Select"
,
id:
""
),
id:
""
...
data
.
paymentModes
!,
),...
data
.
paymentModes
!
];
];
_receiptAccounts
=
data
.
accounts
!;
_receiptAccounts
=
data
.
accounts
!;
_receiptAccounts
=
[
_receiptAccounts
=
[
Accounts
(
name:
"Select"
,
id:
""
),
Accounts
(
name:
"Select"
,
id:
""
),
...
@@ -709,6 +709,7 @@ class Paymentreceiptsprovider extends ChangeNotifier {
...
@@ -709,6 +709,7 @@ class Paymentreceiptsprovider extends ChangeNotifier {
}
}
void
resetForm
()
{
void
resetForm
()
{
print
(
"rf"
);
_submitClicked
=
false
;
_submitClicked
=
false
;
accountSearchController
.
clear
();
accountSearchController
.
clear
();
paymentAccountSearchController
.
clear
();
paymentAccountSearchController
.
clear
();
...
...
lib/Utils/GlobalConstants.dart
View file @
c92f4c79
String
didPushed
=
""
;
String
didPushed
=
""
;
String
didPopped
=
""
;
String
didPopped
=
""
;
String
routeSettingName
=
""
;
lib/Utils/commonWidgets.dart
View file @
c92f4c79
...
@@ -208,11 +208,10 @@ NoNetwork(context) {
...
@@ -208,11 +208,10 @@ NoNetwork(context) {
// Image.asset('assets/images/no_wifi.png', width: 100, height: 100),
// Image.asset('assets/images/no_wifi.png', width: 100, height: 100),
SizedBox
(
height:
10
),
SizedBox
(
height:
10
),
Center
(
Center
(
child:
Text
(
"You are Offline"
,
child:
Text
(
style:
TextStyle
(
"You are Offline"
,
fontSize:
16
,
style:
TextStyle
(
fontSize:
16
,
color:
AppColors
.
semi_black
),
color:
AppColors
.
semi_black
),
),),
),
),
SizedBox
(
height:
10
),
SizedBox
(
height:
10
),
Text
(
Text
(
...
@@ -306,16 +305,18 @@ class MyNavigatorObserver extends NavigatorObserver {
...
@@ -306,16 +305,18 @@ class MyNavigatorObserver extends NavigatorObserver {
super
.
didPush
(
route
,
previousRoute
);
super
.
didPush
(
route
,
previousRoute
);
// Called when a route has been pushed onto the navigator.
// Called when a route has been pushed onto the navigator.
didPushed
=
"true"
;
didPushed
=
"true"
;
routeSettingName
=
route
.
settings
.
name
.
toString
();
print
(
'Route pushed:
${route.settings.name}
'
);
print
(
'Route pushed:
${route.settings.name}
'
);
print
(
'didPushed
$didPushed
'
);
print
(
'didPushed
:
$didPushed
'
);
}
}
@override
@override
void
didPop
(
Route
route
,
Route
?
previousRoute
)
{
void
didPop
(
Route
route
,
Route
?
previousRoute
)
{
super
.
didPop
(
route
,
previousRoute
);
super
.
didPop
(
route
,
previousRoute
);
didPopped
=
"true"
;
didPopped
=
"true"
;
routeSettingName
=
route
.
settings
.
name
.
toString
();
// Called when a route has been popped off the navigator.
// Called when a route has been popped off the navigator.
print
(
'Route popped:
${route.settings.name}
'
);
print
(
'Route popped:
${route.settings.name}
'
);
print
(
'didPopped
${didPopped}
'
);
print
(
'didPopped
:
${didPopped}
'
);
}
}
}
}
lib/screens/commom/accountLedger.dart
View file @
c92f4c79
import
'dart:io'
;
import
'dart:io'
;
import
'package:auto_size_text/auto_size_text.dart'
;
import
'package:auto_size_text/auto_size_text.dart'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:generp/Notifiers/commonProvider/accountLedgerProvider.dart'
;
import
'package:generp/Notifiers/commonProvider/accountLedgerProvider.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:generp/screens/commom/transactionDetails.dart'
;
import
'package:generp/screens/commom/transactionDetails.dart'
;
import
'package:provider/provider.dart'
;
import
'package:provider/provider.dart'
;
...
@@ -24,10 +26,17 @@ class Accountledger extends StatefulWidget {
...
@@ -24,10 +26,17 @@ class Accountledger extends StatefulWidget {
class
_AccountledgerState
extends
State
<
Accountledger
>
{
class
_AccountledgerState
extends
State
<
Accountledger
>
{
Dropdowntheme
ddtheme
=
Dropdowntheme
();
Dropdowntheme
ddtheme
=
Dropdowntheme
();
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
@override
@override
void
initState
()
{
void
initState
()
{
// TODO: implement initState
// TODO: implement initState
super
.
initState
();
super
.
initState
();
_connectivity
.
initialise
();
_connectivity
.
myStream
.
listen
((
source
)
{
setState
(()
=>
_source
=
source
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
var
provider
=
Provider
.
of
<
Accountledgerprovider
>(
context
,
listen:
false
);
var
provider
=
Provider
.
of
<
Accountledgerprovider
>(
context
,
listen:
false
);
provider
.
dropDownAPI
(
context
);
provider
.
dropDownAPI
(
context
);
...
@@ -35,13 +44,48 @@ class _AccountledgerState extends State<Accountledger> {
...
@@ -35,13 +44,48 @@ class _AccountledgerState extends State<Accountledger> {
_showFilterSheet
(
context
);
_showFilterSheet
(
context
);
});
});
}
}
Future
<
bool
>
_onBackPressed
(
BuildContext
context
)
async
{
Future
<
bool
>
_onBackPressed
(
BuildContext
context
)
async
{
Provider
.
of
<
Accountledgerprovider
>(
context
,
listen:
false
).
resetAll
();
Provider
.
of
<
Accountledgerprovider
>(
context
,
listen:
false
).
resetAll
();
Navigator
.
pop
(
context
,
true
);
Navigator
.
pop
(
context
,
true
);
return
true
;
return
true
;
}
}
@override
void
dispose
()
{
// TODO: implement dispose
super
.
dispose
();
_connectivity
.
disposeStream
();
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
case
ConnectivityResult
.
mobile
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
wifi
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
none
:
default
:
connection
=
'Offline'
;
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer
<
Accountledgerprovider
>(
return
Consumer
<
Accountledgerprovider
>(
builder:
(
context
,
provider
,
child
)
{
builder:
(
context
,
provider
,
child
)
{
final
groupedData
=
provider
.
groupByDate
(
provider
.
ledgerList
);
final
groupedData
=
provider
.
groupByDate
(
provider
.
ledgerList
);
...
@@ -70,7 +114,7 @@ class _AccountledgerState extends State<Accountledger> {
...
@@ -70,7 +114,7 @@ class _AccountledgerState extends State<Accountledger> {
"Bank UPI ID"
,
"Bank UPI ID"
,
"State"
,
"State"
,
"District"
,
"District"
,
"Sub Locality"
"Sub Locality"
,
];
];
var
values
=
[
var
values
=
[
...
@@ -97,486 +141,530 @@ class _AccountledgerState extends State<Accountledger> {
...
@@ -97,486 +141,530 @@ class _AccountledgerState extends State<Accountledger> {
totalHeadings
=
[...
headings
,
...
headings2
];
totalHeadings
=
[...
headings
,
...
headings2
];
totalValues
=
[...
values
,
...
values2
];
totalValues
=
[...
values
,
...
values2
];
}
}
return
WillPopScope
(
return
Scaffold
(
child:
SafeArea
(
resizeToAvoidBottomInset:
true
,
top:
false
,
appBar:
appbar2
(
bottom:
Platform
.
isIOS
?
false
:
true
,
context
,
child:
Scaffold
(
"Account Ledger List"
,
resizeToAvoidBottomInset:
true
,
provider
.
resetAll
,
appBar:
appbar2
(
Row
(
context
,
children:
[
"Account Ledger List"
,
Container
(
provider
.
resetAll
,
padding:
EdgeInsets
.
symmetric
(
horizontal:
5
,
vertical:
5
),
Row
(
decoration:
BoxDecoration
(
children:
[
color:
Color
(
0xFFE6F6FF
),
Container
(
borderRadius:
BorderRadius
.
circular
(
8
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
5
,
vertical:
5
),
),
decoration:
BoxDecoration
(
child:
Row
(
children:
[
color:
Color
(
0xFFE6F6FF
),
SvgPicture
.
asset
(
"assets/svg/fin_ic.svg"
,
height:
12
),
borderRadius:
BorderRadius
.
circular
(
8
),
SizedBox
(
width:
5
),
Text
(
),
"
${provider.balanceDetails.balance.toString()}
"
??
"-"
,
child:
Row
(
style:
TextStyle
(
fontSize:
12
),
children:
[
SvgPicture
.
asset
(
"assets/svg/fin_ic.svg"
,
height:
12
,),
SizedBox
(
width:
5
,),
Text
(
"
${provider.balanceDetails.balance.toString()}
"
??
"-"
,
style:
TextStyle
(
fontSize:
12
,
),)
],
),
),
SizedBox
(
width:
10
,),
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
5
,
vertical:
5
),
child:
GestureDetector
(
onTap:
()
{
print
(
"Tapped"
);
_showFilterSheet
(
context
);
},
child:
SvgPicture
.
asset
(
"assets/svg/search_ic.svg"
,
height:
25
),
),
),
],
),
),
SizedBox
(
width:
10
),
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
5
,
vertical:
5
),
child:
GestureDetector
(
onTap:
()
{
print
(
"Tapped"
);
_showFilterSheet
(
context
);
},
child:
SvgPicture
.
asset
(
"assets/svg/search_ic.svg"
,
height:
25
,
),
),
]
,
)
,
),
),
),
],
backgroundColor:
AppColors
.
scaffold_bg_color
,
),
body:
provider
.
isLoading
),
?
Center
(
child:
CircularProgressIndicator
.
adaptive
(
backgroundColor:
AppColors
.
scaffold_bg_color
,
valueColor:
AlwaysStoppedAnimation
<
Color
>(
body:
AppColors
.
app_blue
)
provider
.
isLoading
)):
SizedBox
(
?
Center
(
child:
SingleChildScrollView
(
child:
CircularProgressIndicator
.
adaptive
(
child:
Column
(
valueColor:
AlwaysStoppedAnimation
<
Color
>(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
AppColors
.
app_blue
,
children:
[
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
Text
(
"
${provider.selectedAcVal??""}
"
+
" "
+
"Account Ledger List"
),
),
),
if
(
provider
.
ledgerList
.
isEmpty
)...[
),
Emptywidget
(
context
),
)
]
else
...[
:
SizedBox
(
Container
(
child:
SingleChildScrollView
(
decoration:
BoxDecoration
(
child:
Column
(
color:
Colors
.
white
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
borderRadius:
BorderRadius
.
circular
(
16
),
children:
[
Padding
(
padding:
const
EdgeInsets
.
all
(
8.0
),
child:
Text
(
"
${provider.selectedAcVal ?? ""}
"
+
" "
+
"Account Ledger List"
,
),
),
),
child:
Row
(
if
(
provider
.
ledgerList
.
isEmpty
)
...[
children:
[
Emptywidget
(
context
),
Expanded
(
]
else
...[
child:
Container
(
Container
(
padding:
EdgeInsets
.
symmetric
(
decoration:
BoxDecoration
(
horizontal:
10
,
color:
Colors
.
white
,
vertical:
15
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
),
margin:
EdgeInsets
.
symmetric
(
child:
Row
(
horizontal:
10
,
children:
[
vertical:
15
,
Expanded
(
),
child:
Container
(
decoration:
BoxDecoration
(
padding:
EdgeInsets
.
symmetric
(
color:
Color
(
0xFFFFEFEF
),
horizontal:
10
,
borderRadius:
BorderRadius
.
circular
(
16
),
vertical:
15
,
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
AutoSizeText
(
"
${provider.balanceDetails.totalCredit}
"
,
style:
TextStyle
(
color:
Color
(
0xFFED3424
),
fontFamily:
"JakartaRegular"
,
fontSize:
20
,
),
minFontSize:
20
,
maxFontSize:
25
,
),
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
15
,
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFFFEFEF
),
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
AutoSizeText
(
"
${provider.balanceDetails.totalCredit}
"
,
style:
TextStyle
(
color:
Color
(
0xFFED3424
),
fontFamily:
"JakartaRegular"
,
fontSize:
25
,
),
maxLines:
2
,
minFontSize:
18
,
maxFontSize:
25
,
),
Text
(
Text
(
"credit"
,
"credit"
,
style:
TextStyle
(
color:
Color
(
0xFF818181
)),
style:
TextStyle
(
color:
Color
(
0xFF818181
),
),
),
],
),
),
],
),
),
),
),
Expanded
(
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:
Column
(
Expanded
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
child:
Container
(
children:
[
padding:
EdgeInsets
.
symmetric
(
AutoSizeText
(
horizontal:
10
,
"
${provider.balanceDetails.totalDebit}
"
,
vertical:
15
,
style:
TextStyle
(
color:
Color
(
0xFFED3424
),
fontFamily:
"JakartaRegular"
,
fontSize:
20
,
),
minFontSize:
20
,
maxFontSize:
25
,
),
),
Text
(
margin:
EdgeInsets
.
symmetric
(
"debit"
,
horizontal:
10
,
style:
TextStyle
(
color:
Color
(
0xFF818181
))
,
vertical:
15
,
),
),
],
decoration:
BoxDecoration
(
color:
Color
(
0xFFFFEFEF
),
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
AutoSizeText
(
"
${provider.balanceDetails.totalDebit}
"
,
style:
TextStyle
(
color:
Color
(
0xFFED3424
),
fontFamily:
"JakartaRegular"
,
fontSize:
25
,
),
minFontSize:
18
,
maxFontSize:
25
,
maxLines:
2
,
),
Text
(
"debit"
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
),
),
],
),
),
),
),
)
,
]
,
),
),
],
),
),
Container
(
alignment:
Alignment
.
topLeft
,
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
),
child:
Text
(
"Account Details"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
Color
(
0xFF818181
),
),
),
),
),
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
children:
[
...
List
.
generate
(
totalHeadings
.
length
,
(
index
)
{
Container
(
alignment:
Alignment
.
topLeft
,
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
child:
Text
(
"Account Details"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
Color
(
0xFF818181
),
),
),
),
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
children:
[
...
List
.
generate
(
totalHeadings
.
length
,
(
index
,
)
{
return
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
,
),
child:
Row
(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisAlignment: MainAxisAlignment.start,
children:
[
Expanded
(
child:
Text
(
"
${totalHeadings[index]}
"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
),
),
),
Expanded
(
child:
Text
(
"
${totalValues[index]}
"
,
return
Container
(
style:
TextStyle
(
padding:
EdgeInsets
.
symmetric
(
color:
Color
(
0xFF818181
),
horizontal:
10
,
),
vertical:
5
,
),
),
child:
Row
(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisAlignment: MainAxisAlignment.start,
children:
[
Expanded
(
child:
Text
(
"
${totalHeadings[index]}
"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
),
),
)
,
]
,
),
),
);
Expanded
(
}),
child:
Text
(
InkResponse
(
"
${totalValues[index]}
"
,
onTap:
()
async
{
provider
.
showMoreDetails
=
style:
TextStyle
(
!
provider
.
showMoreDetails
;
color:
Color
(
0xFF818181
),
},
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
,
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
Text
(
provider
.
showMoreDetails
?
"- Show Less"
:
"+ More Details"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
app_blue
,
),
),
),
)
,
]
,
),
),
),
],
),
);
}),
InkResponse
(
onTap:
()
async
{
provider
.
showMoreDetails
=
!
provider
.
showMoreDetails
;
},
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
,
),
),
child:
Row
(
],
),
),
ListView
.
builder
(
physics:
NeverScrollableScrollPhysics
(),
shrinkWrap:
true
,
itemCount:
groupedData
.
keys
.
length
,
itemBuilder:
(
context
,
index
)
{
String
date
=
groupedData
.
keys
.
elementAt
(
index
);
List
<
LedgerList
>
items
=
groupedData
[
date
]!;
if
(
provider
.
ledgerList
.
isEmpty
)
{
return
Center
(
child:
Text
(
"No Data Available"
),
);
}
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
child:
Column
(
crossAxisAlignment:
crossAxisAlignment:
CrossAxisAlignment
.
center
,
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
children:
[
Text
(
Container
(
provider
.
showMoreDetails
?
"- Show Less"
:
"+ More Details"
,
padding:
EdgeInsets
.
only
(
bottom:
5
),
style:
TextStyle
(
child:
Text
(
fontFamily:
"JakartaMedium"
,
date
,
fontSize:
14
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontSize:
14
,
fontFamily:
"JakartaMedium"
,
color:
Color
(
0xFF818181
),
),
),
),
),
),
...
items
.
map
((
item
)
{
],
double
running_balance
=
0
;
),
int
currentIndex
=
provider
.
ledgerList
),
.
indexOf
(
item
);
),
for
(
],
var
i
=
0
;
),
i
<=
currentIndex
;
),
i
++
ListView
.
builder
(
)
{
physics:
NeverScrollableScrollPhysics
(),
var
ledgerItem
=
shrinkWrap:
true
,
provider
.
ledgerList
[
i
];
itemCount:
groupedData
.
keys
.
length
,
double
credit
=
itemBuilder:
(
context
,
index
)
{
double
.
tryParse
(
String
date
=
groupedData
.
keys
.
elementAt
(
index
);
ledgerItem
.
creditAmount
List
<
LedgerList
>
items
=
groupedData
[
date
]!;
.
toString
(),
if
(
provider
.
ledgerList
.
isEmpty
)
{
)
??
return
Center
(
child:
Text
(
"No Data Available"
));
}
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Container
(
padding:
EdgeInsets
.
only
(
bottom:
5
),
child:
Text
(
date
,
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaMedium"
,
color:
Color
(
0xFF818181
),
),
),
),
...
items
.
map
((
item
)
{
double
running_balance
=
0
;
int
currentIndex
=
provider
.
ledgerList
.
indexOf
(
item
,
);
for
(
var
i
=
0
;
i
<=
currentIndex
;
i
++)
{
var
ledgerItem
=
provider
.
ledgerList
[
i
];
double
credit
=
double
.
tryParse
(
ledgerItem
.
creditAmount
.
toString
(),
)
??
0
;
0
;
double
debit
=
double
debit
=
double
.
tryParse
(
double
.
tryParse
(
ledgerItem
.
debitAmount
.
toString
(),
ledgerItem
.
debitAmount
)
??
.
toString
(),
)
??
0
;
0
;
running_balance
+=
(
debit
-
credit
);
running_balance
+=
(
debit
-
credit
);
}
}
return
Container
(
return
Container
(
padding:
EdgeInsets
.
symmetric
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
horizontal:
10
,
vertical:
10
,
vertical:
10
,
),
),
margin:
EdgeInsets
.
symmetric
(
vertical:
5
),
margin:
EdgeInsets
.
symmetric
(
decoration:
BoxDecoration
(
vertical:
5
,
color:
Colors
.
white
,
)
,
borderRadius:
BorderRadius
.
circular
(
16
),
decoration:
BoxDecoration
(
)
,
color:
Colors
.
white
,
child:
Column
(
borderRadius:
BorderRadius
.
circular
(
children:
[
16
,
Row
(
),
mainAxisAlignment:
),
MainAxisAlignment
.
start
,
child:
Column
(
children:
[
children:
[
Expanded
(
Row
(
flex:
1
,
mainAxisAlignment:
child:
SizedBox
(
MainAxisAlignment
.
start
,
child:
children:
[
item
.
type
==
"Credit"
Expanded
(
?
Image
.
asset
(
flex:
1
,
"assets/images/trans_debit.png"
,
child:
SizedBox
(
height:
45
,
child:
width:
45
,
item
.
type
==
"Credit"
fit:
BoxFit
.
contain
,
?
Image
.
asset
(
)
"assets/images/trans_debit.png"
,
:
Image
.
asset
(
height:
45
,
"assets/images/trans_credit.png"
,
width:
45
,
height:
45
,
fit:
width:
45
,
BoxFit
fit:
BoxFit
.
contain
,
.
contain
,
)
:
Image
.
asset
(
"assets/images/trans_credit.png"
,
height:
45
,
width:
45
,
fit:
BoxFit
.
contain
,
),
),
),
),
),
SizedBox
(
width:
10
),
),
Expanded
(
SizedBox
(
width:
10
),
flex:
5
,
Expanded
(
child:
SizedBox
(
flex:
5
,
child:
Column
(
child:
SizedBox
(
crossAxisAlignment:
child:
Column
(
CrossAxisAlignment
crossAxisAlignment:
.
start
,
CrossAxisAlignment
.
start
,
children:
[
children:
[
Text
(
Text
(
item
.
description
??
item
.
description
??
"-"
,
"-"
,
maxLines:
2
,
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
overflow:
style:
TextStyle
(
TextOverflow
fontFamily:
.
ellipsis
,
"JakartaMedium"
,
style:
TextStyle
(
fontSize:
12
,
fontFamily:
),
"JakartaMedium"
,
fontSize:
12
,
),
),
],
),
),
]
,
)
,
),
),
),
Spacer
(),
),
Expanded
(
Spacer
(),
flex:
3
,
Expanded
(
child:
SizedBox
(
flex:
3
,
child:
RichText
(
child:
SizedBox
(
textAlign:
child:
RichText
(
TextAlign
.
right
,
textAlign:
TextAlign
.
right
,
maxLines:
1
,
maxLines:
1
,
overflow:
overflow:
TextOverflow
.
ellipsis
,
TextOverflow
text:
TextSpan
(
.
ellipsis
,
children:
[
text:
TextSpan
(
TextSpan
(
children:
[
text:
TextSpan
(
item
.
type
==
"Credit"
text:
?
"-"
item
.
type
==
:
"+"
,
"Credit"
style:
TextStyle
(
?
"-"
color:
Color
(
:
"+"
,
0xFF2D2D2D
,
style:
TextStyle
(
color:
Color
(
0xFF2D2D2D
,
),
fontSize:
13
,
fontFamily:
"JakartaRegular"
,
),
),
),
fontSize:
13
,
TextSpan
(
fontFamily
:
text
:
"JakartaRegular
"
,
"₹
${item.type == "Credit" ? "${item.creditAmount}
"
:
"
${item.debitAmount}
"
}
",
),
style: TextStyle(
),
color: Color(
TextSpan
(
0xFF2D2D2D,
text:
),
"₹
${item.type == "Credit" ? "${item.creditAmount}
"
:
"
${item.debitAmount}
"
}
"
,
fontSize: 13
,
style: TextStyle(
fontFamily:
color: Color(
"
JakartaMedium
",
0xFF2D2D2D
,
)
,
),
),
fontSize: 13,
],
fontFamily:
"
JakartaMedium
",
),
),
),
]
,
)
,
),
),
),
),
)
,
]
,
),
),
],
Divider(
),
thickness: 0.5,
Divider(
color: Color(0xFFd7d7d7),
thickness: 0.5,
color: Color(0xFFd7d7d7),
),
// Row(
// children: [
// Expanded(
// child: Text(
// "
Balance
",
// style: TextStyle(
// fontSize: 13,
// color: Color(0xFF2d2d2d),
// ),
// ),
// ),
// Expanded(
// child: Text(
// textAlign: TextAlign.right,
// "
₹$
{
running_balance
.
toString
()}
" ??
// "
-
",
// style: TextStyle(
// color: Color(0xFF818181),
// fontSize: 13,
// ),
// ),
// ),
// ],
// ),
InkResponse(
onTap: () async {
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Transactiondetails(
paymentID: item.refId,
type: item.type,
),
),
);
},
child: Container(
padding: EdgeInsets.symmetric(
vertical: 5,
),
),
child: Row(
// Row(
crossAxisAlignment:
// children: [
CrossAxisAlignment.center,
// Expanded(
mainAxisAlignment:
// child: Text(
MainAxisAlignment.start,
// "
Balance
",
children: [
// style: TextStyle(
Text(
// fontSize: 13,
"
View
Details
",
// color: Color(0xFF2d2d2d),
style: TextStyle(
// ),
fontFamily: "
JakartaMedium
",
// ),
fontSize: 14,
// ),
color: AppColors.app_blue,
// Expanded(
// child: Text(
// textAlign: TextAlign.right,
// "
₹$
{
running_balance
.
toString
()}
" ??
// "
-
",
// style: TextStyle(
// color: Color(0xFF818181),
// fontSize: 13,
// ),
// ),
// ),
// ],
// ),
InkResponse(
onTap: () async {
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Transactiondetails(
paymentID:
item.refId,
type: item.type,
),
settings: RouteSettings(
name:
"
Transactiondetails
",
),
),
),
);
},
child: Container(
padding: EdgeInsets.symmetric(
vertical: 5,
),
),
SizedBox(width: 5),
child: Row(
SvgPicture.asset(
crossAxisAlignment:
"
assets
/
svg
/
next_button
.
svg
",
CrossAxisAlignment
.center,
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Text(
"
View
Details
",
style: TextStyle(
fontFamily:
"
JakartaMedium
",
fontSize: 14,
color:
AppColors
.app_blue,
),
),
SizedBox(width: 5),
SvgPicture.asset(
"
assets
/
svg
/
next_button
.
svg
",
),
],
),
),
]
,
)
,
),
),
)
,
]
,
),
),
],
);
),
}).toList(),
);
],
}).toList(),
),
],
);
),
},
);
),
},
],
),
],
],
),
),
],
),
),
),
),
),
),
onWillPop: () {
return _onBackPressed(context);
},
);
);
},
},
);
);
}
}
Future<void> _showFilterSheet(BuildContext context) {
Future<void> _showFilterSheet(BuildContext context) {
return showModalBottomSheet(
return showModalBottomSheet(
useSafeArea: true,
useSafeArea: true,
...
@@ -593,7 +681,7 @@ class _AccountledgerState extends State<Accountledger> {
...
@@ -593,7 +681,7 @@ class _AccountledgerState extends State<Accountledger> {
child: Consumer<Accountledgerprovider>(
child: Consumer<Accountledgerprovider>(
builder: (context, provider, child) {
builder: (context, provider, child) {
return Container(
return Container(
height: MediaQuery.of(context).size.height
*
0.35,
height: MediaQuery.of(context).size.height
*
0.35,
padding: EdgeInsets.only(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
bottom: MediaQuery.of(context).viewInsets.bottom,
),
),
...
@@ -653,7 +741,12 @@ class _AccountledgerState extends State<Accountledger> {
...
@@ -653,7 +741,12 @@ class _AccountledgerState extends State<Accountledger> {
),
),
)
)
.toList(),
.toList(),
value:provider.accounts.contains(provider.selectedAccount)?provider.selectedAccount:null,
value:
provider.accounts.contains(
provider.selectedAccount,
)
? provider.selectedAccount
: null,
// value: provider.selectedAccount,
// value: provider.selectedAccount,
onChanged: (Accounts? value) {
onChanged: (Accounts? value) {
if (value != null) {
if (value != null) {
...
@@ -678,35 +771,33 @@ class _AccountledgerState extends State<Accountledger> {
...
@@ -678,35 +771,33 @@ class _AccountledgerState extends State<Accountledger> {
dropdownSearchData: DropdownSearchData(
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchInnerWidgetHeight: 50,
searchController:
searchController:
provider
provider.searchAccountController,
.searchAccountController,
searchInnerWidget: Padding(
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
padding: const EdgeInsets.all(8),
child: TextFormField(
child: TextFormField(
controller:
controller:
provider
provider.searchAccountController,
.searchAccountController,
decoration: InputDecoration(
decoration: InputDecoration(
isDense: true,
isDense: true,
contentPadding:
contentPadding:
const EdgeInsets.symmetric(
const EdgeInsets.symmetric(
horizontal: 10,
horizontal: 10,
vertical: 8,
vertical: 8,
),
),
hintText: 'Search account...',
hintText: 'Search account...',
border: OutlineInputBorder(
border: OutlineInputBorder(
borderRadius:
borderRadius:
BorderRadius.circular(8),
BorderRadius.circular(8),
),
),
),
),
),
),
),
),
searchMatchFn: (item, searchValue) {
searchMatchFn: (item, searchValue) {
return item.value?.name
return item.value?.name
?.toLowerCase()
?.toLowerCase()
.contains(
.contains(
searchValue.toLowerCase(),
searchValue.toLowerCase(),
) ??
) ??
false;
false;
},
},
...
@@ -720,8 +811,10 @@ class _AccountledgerState extends State<Accountledger> {
...
@@ -720,8 +811,10 @@ class _AccountledgerState extends State<Accountledger> {
},
},
buttonStyleData: ddtheme.buttonStyleData,
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
menuItemStyleData:
dropdownStyleData: ddtheme.dropdownStyleData,
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
),
),
),
),
],
],
...
...
lib/screens/commom/accountsList.dart
View file @
c92f4c79
import
'dart:io'
;
import
'dart:io'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:generp/Notifiers/commonProvider/accountsListProvider.dart'
;
import
'package:generp/Notifiers/commonProvider/accountsListProvider.dart'
;
import
'package:generp/Utils/app_colors.dart'
;
import
'package:generp/Utils/app_colors.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:generp/Utils/commonWidgets.dart'
;
import
'package:generp/Utils/commonWidgets.dart'
;
import
'package:generp/screens/commom/accountsListDetails.dart'
;
import
'package:generp/screens/commom/accountsListDetails.dart'
;
import
'package:provider/provider.dart'
;
import
'package:provider/provider.dart'
;
...
@@ -20,75 +22,102 @@ class _AccountslistState extends State<Accountslist> {
...
@@ -20,75 +22,102 @@ class _AccountslistState extends State<Accountslist> {
ScrollController
scrollController
=
ScrollController
();
ScrollController
scrollController
=
ScrollController
();
FocusNode
focusNode1
=
FocusNode
();
FocusNode
focusNode1
=
FocusNode
();
FocusNode
focusNode2
=
FocusNode
();
FocusNode
focusNode2
=
FocusNode
();
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
@override
@override
void
initState
()
{
void
initState
()
{
// TODO: implement initState
// TODO: implement initState
super
.
initState
();
super
.
initState
();
_connectivity
.
initialise
();
_connectivity
.
myStream
.
listen
((
source
)
{
setState
(()
=>
_source
=
source
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
var
provider
=
Provider
.
of
<
Accountslistprovider
>(
context
,
listen:
false
);
var
provider
=
Provider
.
of
<
Accountslistprovider
>(
context
,
listen:
false
);
provider
.
commonAccountListAPIFunction
(
context
);
provider
.
commonAccountListAPIFunction
(
context
);
provider
.
pageNum
=
1
;
provider
.
pageNum
=
1
;
provider
.
commonAccountListAPIFunction
(
context
);
provider
.
commonAccountListAPIFunction
(
context
);
// if (scrollController.position.maxScrollExtent ==
// if (scrollController.position.maxScrollExtent ==
// scrollController.offset) {
// scrollController.offset) {
scrollController
.
addListener
(()
{
scrollController
.
addListener
(()
{
if
(
scrollController
.
position
.
pixels
>=
if
(
scrollController
.
position
.
pixels
>=
scrollController
.
position
.
maxScrollExtent
*
0.9
&&
scrollController
.
position
.
maxScrollExtent
*
0.9
&&
!
provider
.
isLoading
&&
!
provider
.
isLoading
&&
provider
.
hasMoreData
)
{
provider
.
hasMoreData
)
{
provider
provider
.
commonAccountListAPIFunction
(
context
);
.
commonAccountListAPIFunction
(
context
);
}
}
});
});
});
});
}
}
@override
@override
void
dispose
()
{
void
dispose
()
{
// TODO: implement dispose
// TODO: implement dispose
super
.
dispose
();
super
.
dispose
();
scrollController
.
dispose
();
scrollController
.
dispose
();
_connectivity
.
disposeStream
();
}
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
case
ConnectivityResult
.
mobile
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
wifi
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
none
:
default
:
connection
=
'Offline'
;
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
@override
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer
<
Accountslistprovider
>(
return
Consumer
<
Accountslistprovider
>(
builder:
(
context
,
provider
,
child
)
{
builder:
(
context
,
provider
,
child
)
{
var
accountList
=
provider
.
accountsList
;
var
accountList
=
provider
.
accountsList
;
print
(
accountList
.
length
);
print
(
accountList
.
length
);
return
WillPopScope
(
return
Scaffold
(
child:
SafeArea
(
resizeToAvoidBottomInset:
true
,
top:
false
,
appBar:
appbar2
(
bottom:
Platform
.
isIOS
?
false
:
true
,
context
,
child:
Scaffold
(
"Account List"
,
resizeToAvoidBottomInset:
true
,
provider
.
resetValues
,
appBar:
appbar2
(
Container
(
context
,
padding:
EdgeInsets
.
symmetric
(
horizontal:
5
,
vertical:
5
),
"Account List"
,
provider
.
resetValues
,
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
5
,
vertical:
5
),
child:
InkResponse
(
child:
InkResponse
(
onTap:
()
{
onTap:
()
{
_showFilterSheet
(
context
);
_showFilterSheet
(
context
);
},
},
child:
SvgPicture
.
asset
(
child:
SvgPicture
.
asset
(
"assets/svg/filter_ic.svg"
,
height:
18
),
"assets/svg/filter_ic.svg"
,
height:
18
,
),
),
),
),
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
),
body:
provider
.
isLoading
?
),
Center
(
backgroundColor:
AppColors
.
scaffold_bg_color
,
body:
provider
.
isLoading
?
Center
(
child:
CircularProgressIndicator
(
child:
CircularProgressIndicator
(
valueColor:
AlwaysStoppedAnimation
(
AppColors
.
app_blue
),
valueColor:
AlwaysStoppedAnimation
(
AppColors
.
app_blue
),
),
),
)
)
:
:
accountList
.
isNotEmpty
accountList
.
isNotEmpty
?
SizedBox
(
?
SizedBox
(
child:
Scrollbar
(
child:
Scrollbar
(
child:
SingleChildScrollView
(
child:
SingleChildScrollView
(
...
@@ -96,7 +125,11 @@ class _AccountslistState extends State<Accountslist> {
...
@@ -96,7 +125,11 @@ class _AccountslistState extends State<Accountslist> {
child:
Column
(
child:
Column
(
children:
[
children:
[
ListView
.
builder
(
ListView
.
builder
(
itemCount:
accountList
.
length
+
(
provider
.
hasMoreData
&&
provider
.
isLoading
?
1
:
0
),
itemCount:
accountList
.
length
+
(
provider
.
hasMoreData
&&
provider
.
isLoading
?
1
:
0
),
shrinkWrap:
true
,
shrinkWrap:
true
,
physics:
NeverScrollableScrollPhysics
(),
physics:
NeverScrollableScrollPhysics
(),
itemBuilder:
(
context
,
index
)
{
itemBuilder:
(
context
,
index
)
{
...
@@ -112,13 +145,12 @@ class _AccountslistState extends State<Accountslist> {
...
@@ -112,13 +145,12 @@ class _AccountslistState extends State<Accountslist> {
return
Padding
(
return
Padding
(
padding:
EdgeInsets
.
all
(
8.0
),
padding:
EdgeInsets
.
all
(
8.0
),
child:
Center
(
child:
Center
(
child:
child:
CircularProgressIndicator
.
adaptive
(
CircularProgressIndicator
.
adaptive
(
valueColor:
valueColor:
AlwaysStoppedAnimation
<
Color
>(
AlwaysStoppedAnimation
<
Color
>(
AppColors
.
app_blue
,
AppColors
.
app_blue
,
),
),
),
),
),
),
);
);
}
}
...
@@ -171,8 +203,7 @@ class _AccountslistState extends State<Accountslist> {
...
@@ -171,8 +203,7 @@ class _AccountslistState extends State<Accountslist> {
"JakartaMedium"
,
"JakartaMedium"
,
fontSize:
14
,
fontSize:
14
,
color:
color:
AppColors
AppColors
.
semi_black
,
.
semi_black
,
),
),
),
),
Text
(
Text
(
...
@@ -183,8 +214,7 @@ class _AccountslistState extends State<Accountslist> {
...
@@ -183,8 +214,7 @@ class _AccountslistState extends State<Accountslist> {
fontFamily:
fontFamily:
"JakartaMedium"
,
"JakartaMedium"
,
fontSize:
14
,
fontSize:
14
,
color:
color:
AppColors
.
app_blue
,
AppColors
.
app_blue
,
),
),
),
),
],
],
...
@@ -223,11 +253,9 @@ class _AccountslistState extends State<Accountslist> {
...
@@ -223,11 +253,9 @@ class _AccountslistState extends State<Accountslist> {
child:
Text
(
child:
Text
(
headings
[
j
],
headings
[
j
],
style:
TextStyle
(
style:
TextStyle
(
fontFamily:
fontFamily:
"JakartaMedium"
,
"JakartaMedium"
,
fontSize:
14
,
fontSize:
14
,
color:
color:
AppColors
.
semi_black
,
AppColors
.
semi_black
,
),
),
),
),
),
),
...
@@ -236,11 +264,9 @@ class _AccountslistState extends State<Accountslist> {
...
@@ -236,11 +264,9 @@ class _AccountslistState extends State<Accountslist> {
child:
Text
(
child:
Text
(
subHeadings
[
j
]
??
"-"
,
subHeadings
[
j
]
??
"-"
,
style:
TextStyle
(
style:
TextStyle
(
fontFamily:
fontFamily:
"JakartaMedium"
,
"JakartaMedium"
,
fontSize:
14
,
fontSize:
14
,
color:
color:
AppColors
.
grey_thick
,
AppColors
.
grey_thick
,
),
),
),
),
),
),
...
@@ -303,12 +329,6 @@ class _AccountslistState extends State<Accountslist> {
...
@@ -303,12 +329,6 @@ class _AccountslistState extends State<Accountslist> {
),
),
)
)
:
Emptywidget
(
context
),
:
Emptywidget
(
context
),
),
),
onWillPop:
()
{
provider
.
pageNum
=
1
;
return
_onBackPressed
(
context
);
},
);
);
},
},
);
);
...
@@ -367,7 +387,7 @@ class _AccountslistState extends State<Accountslist> {
...
@@ -367,7 +387,7 @@ class _AccountslistState extends State<Accountslist> {
null
,
null
,
focusNode1
,
focusNode1
,
focusNode2
,
focusNode2
,
TextInputAction
.
next
TextInputAction
.
next
,
),
),
textControllerWidget
(
textControllerWidget
(
context
,
context
,
...
@@ -381,7 +401,7 @@ class _AccountslistState extends State<Accountslist> {
...
@@ -381,7 +401,7 @@ class _AccountslistState extends State<Accountslist> {
focusNode2
,
focusNode2
,
null
,
null
,
TextInputAction
.
done
,
TextInputAction
.
done
,
10
10
,
),
),
InkResponse
(
InkResponse
(
onTap:
()
{
onTap:
()
{
...
...
lib/screens/commom/accountsListDetails.dart
View file @
c92f4c79
import
'dart:io'
;
import
'dart:io'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:generp/Notifiers/commonProvider/accountDetailsProvider.dart'
;
import
'package:generp/Notifiers/commonProvider/accountDetailsProvider.dart'
;
import
'package:generp/Utils/app_colors.dart'
;
import
'package:generp/Utils/app_colors.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:generp/Utils/commonWidgets.dart'
;
import
'package:generp/Utils/commonWidgets.dart'
;
import
'package:generp/screens/commom/transactionDetails.dart'
;
import
'package:generp/screens/commom/transactionDetails.dart'
;
import
'package:generp/screens/finance/submitPaymentRequestionListsByMode.dart'
;
import
'package:generp/screens/finance/submitPaymentRequestionListsByMode.dart'
;
...
@@ -21,18 +23,58 @@ class Accountslistdetails extends StatefulWidget {
...
@@ -21,18 +23,58 @@ class Accountslistdetails extends StatefulWidget {
}
}
class
_AccountslistdetailsState
extends
State
<
Accountslistdetails
>
{
class
_AccountslistdetailsState
extends
State
<
Accountslistdetails
>
{
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
@override
@override
void
initState
()
{
void
initState
()
{
// TODO: implement initState
// TODO: implement initState
super
.
initState
();
super
.
initState
();
_connectivity
.
initialise
();
_connectivity
.
myStream
.
listen
((
source
)
{
setState
(()
=>
_source
=
source
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
var
prov
=
Provider
.
of
<
Accountdetailsprovider
>(
context
,
listen:
false
);
var
prov
=
Provider
.
of
<
Accountdetailsprovider
>(
context
,
listen:
false
);
prov
.
accountdetailsAPIFunction
(
context
,
widget
.
accountID
);
prov
.
accountdetailsAPIFunction
(
context
,
widget
.
accountID
);
});
});
}
}
@override
void
dispose
()
{
// TODO: implement dispose
super
.
dispose
();
_connectivity
.
disposeStream
();
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
case
ConnectivityResult
.
mobile
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
wifi
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
none
:
default
:
connection
=
'Offline'
;
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer
<
Accountdetailsprovider
>(
return
Consumer
<
Accountdetailsprovider
>(
builder:
(
context
,
provider
,
child
)
{
builder:
(
context
,
provider
,
child
)
{
final
groupedData
=
provider
.
groupByDate
(
provider
.
ledgerList
);
final
groupedData
=
provider
.
groupByDate
(
provider
.
ledgerList
);
...
@@ -49,499 +91,473 @@ class _AccountslistdetailsState extends State<Accountslistdetails> {
...
@@ -49,499 +91,473 @@ class _AccountslistdetailsState extends State<Accountslistdetails> {
}
}
overallBalance
=
totalDebit
-
totalCredit
;
overallBalance
=
totalDebit
-
totalCredit
;
return
WillPopScope
(
return
Scaffold
(
child:
SafeArea
(
appBar:
appbar2
(
top:
false
,
context
,
bottom:
Platform
.
isIOS
?
false
:
true
,
"Account Details"
,
child:
Scaffold
(
provider
.
resetValues
,
appBar:
appbar2
(
Container
(
context
,
padding:
EdgeInsets
.
symmetric
(
horizontal:
5
,
vertical:
5
),
"Account Details"
,
decoration:
BoxDecoration
(
provider
.
resetValues
,
color:
Color
(
0xFFE6F6FF
),
Container
(
borderRadius:
BorderRadius
.
circular
(
8
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
5
,
vertical:
5
),
),
decoration:
BoxDecoration
(
child:
Row
(
color:
Color
(
0xFFE6F6FF
),
children:
[
borderRadius:
BorderRadius
.
circular
(
8
),
SvgPicture
.
asset
(
"assets/svg/fin_ic.svg"
,
height:
12
),
),
SizedBox
(
width:
5
),
child:
Row
(
Text
(
children:
[
overallBalance
.
toString
()
??
"-"
,
SvgPicture
.
asset
(
"assets/svg/fin_ic.svg"
,
height:
12
),
style:
TextStyle
(
fontSize:
12
),
SizedBox
(
width:
5
),
Text
(
overallBalance
.
toString
()
??
"-"
,
style:
TextStyle
(
fontSize:
12
),
),
],
),
),
)
,
]
,
),
),
resizeToAvoidBottomInset:
true
,
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
),
body:
SizedBox
(
resizeToAvoidBottomInset:
true
,
child:
SingleChildScrollView
(
backgroundColor:
AppColors
.
scaffold_bg_color
,
child:
Column
(
body:
SizedBox
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
child:
SingleChildScrollView
(
children:
[
child:
Column
(
Container
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
decoration:
BoxDecoration
(
children:
[
color:
Colors
.
white
,
Container
(
borderRadius:
BorderRadius
.
circular
(
16
),
decoration:
BoxDecoration
(
),
color:
Colors
.
white
,
child:
Row
(
borderRadius:
BorderRadius
.
circular
(
16
),
children:
[
),
Expanded
(
child:
Row
(
child:
Container
(
children:
[
padding:
EdgeInsets
.
symmetric
(
Expanded
(
horizontal:
10
,
child:
Container
(
vertical:
15
,
padding:
EdgeInsets
.
symmetric
(
),
horizontal:
10
,
margin:
EdgeInsets
.
symmetric
(
vertical:
15
,
horizontal:
10
,
vertical:
15
,
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFFFEFEF
),
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
RichText
(
text:
TextSpan
(
children:
[
TextSpan
(
text:
"
${totalCredit}
"
,
style:
TextStyle
(
color:
Color
(
0xFFED3424
),
fontFamily:
"JakartaRegular"
,
fontSize:
25
,
),
),
],
),
),
Text
(
"credit"
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
),
),
],
),
),
),
),
Expanded
(
margin:
EdgeInsets
.
symmetric
(
child:
Container
(
horizontal:
10
,
padding:
EdgeInsets
.
symmetric
(
vertical:
15
,
horizontal:
10
,
vertical:
15
,
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
15
,
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFFFEFEF
),
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
RichText
(
text:
TextSpan
(
children:
[
TextSpan
(
text:
"
${totalDebit}
"
,
style:
TextStyle
(
color:
Color
(
0xFFED3424
),
fontFamily:
"JakartaRegular"
,
fontSize:
25
,
),
),
],
),
),
Text
(
"debit"
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
),
),
],
),
),
),
),
],
decoration:
BoxDecoration
(
),
color:
Color
(
0xFFFFEFEF
),
),
borderRadius:
BorderRadius
.
circular
(
16
),
// Text(
),
// "Account Details",
child:
Column
(
// style: TextStyle(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
// fontSize: 16,
children:
[
// color: AppColors.grey_thick,
RichText
(
// fontFamily: "JakartaMedium",
text:
TextSpan
(
// ),
children:
[
// ),
TextSpan
(
Container
(
text:
"
${totalCredit}
"
,
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Column
(
children:
[
...
List
.
generate
(
12
,
(
j
)
{
final
headings
=
[
"Name"
,
"Address"
,
"Date"
,
"Bank Name"
,
"Bank Branch"
,
"Bank IFSC Code"
,
"Account Holder"
,
"Account Number"
,
"Bank UPI ID"
,
"State"
,
"District"
,
"Sub Locality"
,
];
final
subHeadings
=
[
provider
.
accountDetails
.
name
??
"-"
,
provider
.
accountDetails
.
address
??
"-"
,
provider
.
accountDetails
.
createdDatetime
??
"-"
,
provider
.
accountDetails
.
bankName
??
"-"
,
provider
.
accountDetails
.
bankBranchName
??
"-"
,
provider
.
accountDetails
.
bankIfscCode
??
"-"
,
provider
.
accountDetails
.
bankAccountHolderName
??
"-"
,
provider
.
accountDetails
.
bankAccountNumber
??
"-"
,
provider
.
accountDetails
.
bankUpiId
??
"-"
,
provider
.
accountDetails
.
state
??
"-"
,
provider
.
accountDetails
.
district
??
"-"
,
provider
.
accountDetails
.
subLocality
??
"-"
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
headings
[
j
],
style:
TextStyle
(
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
Color
(
0xFFED3424
)
,
font
Size:
14
,
font
Family:
"JakartaRegular"
,
color:
AppColors
.
semi_black
,
fontSize:
25
,
),
),
),
),
),
],
SizedBox
(
width:
15
),
),
Expanded
(
),
child:
Text
(
Text
(
subHeadings
[
j
]
==
""
"credit"
,
?
"-"
style:
TextStyle
(
color:
Color
(
0xFF818181
)),
:
subHeadings
[
j
]
??
"-"
,
),
],
),
),
),
Expanded
(
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:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
RichText
(
text:
TextSpan
(
children:
[
TextSpan
(
text:
"
${totalDebit}
"
,
style:
TextStyle
(
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
color:
Color
(
0xFFED3424
)
,
font
Size:
14
,
font
Family:
"JakartaRegular"
,
color:
AppColors
.
grey_thick
,
fontSize:
25
,
),
),
),
),
)
,
]
,
]
,
)
,
),
),
);
Text
(
}),
"debit"
,
],
style:
TextStyle
(
color:
Color
(
0xFF818181
)),
),
],
),
),
),
),
),
],
ListView
.
builder
(
),
physics:
NeverScrollableScrollPhysics
(),
),
shrinkWrap:
true
,
// Text(
itemCount:
groupedData
.
keys
.
length
,
// "Account Details",
itemBuilder:
(
context
,
index
)
{
// style: TextStyle(
String
date
=
groupedData
.
keys
.
elementAt
(
index
);
// fontSize: 16,
List
<
LedgerList
>
items
=
groupedData
[
date
]!;
// color: AppColors.grey_thick,
// fontFamily: "JakartaMedium",
// ),
// ),
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Column
(
children:
[
...
List
.
generate
(
12
,
(
j
)
{
final
headings
=
[
"Name"
,
"Address"
,
"Date"
,
"Bank Name"
,
"Bank Branch"
,
"Bank IFSC Code"
,
"Account Holder"
,
"Account Number"
,
"Bank UPI ID"
,
"State"
,
"District"
,
"Sub Locality"
,
];
final
subHeadings
=
[
provider
.
accountDetails
.
name
??
"-"
,
provider
.
accountDetails
.
address
??
"-"
,
provider
.
accountDetails
.
createdDatetime
??
"-"
,
provider
.
accountDetails
.
bankName
??
"-"
,
provider
.
accountDetails
.
bankBranchName
??
"-"
,
provider
.
accountDetails
.
bankIfscCode
??
"-"
,
provider
.
accountDetails
.
bankAccountHolderName
??
"-"
,
provider
.
accountDetails
.
bankAccountNumber
??
"-"
,
provider
.
accountDetails
.
bankUpiId
??
"-"
,
provider
.
accountDetails
.
state
??
"-"
,
provider
.
accountDetails
.
district
??
"-"
,
provider
.
accountDetails
.
subLocality
??
"-"
,
];
return
Container
(
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
child:
Row
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
children:
[
Container
(
Expanded
(
padding:
EdgeInsets
.
only
(
bottom:
5
),
child:
Text
(
child:
Text
(
date
,
headings
[
j
]
,
style:
TextStyle
(
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
),
SizedBox
(
width:
15
),
Expanded
(
child:
Text
(
subHeadings
[
j
]
==
""
?
"-"
:
subHeadings
[
j
]
??
"-"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontFamily:
"JakartaMedium"
,
color:
Color
(
0xFF818181
),
fontSize:
14
,
color:
AppColors
.
grey_thick
,
),
),
),
),
),
),
...
items
.
map
((
item
)
{
],
double
running_balance
=
0
;
),
int
currentIndex
=
provider
.
ledgerList
);
.
indexOf
(
item
);
}),
for
(
var
i
=
0
;
i
<=
currentIndex
;
i
++)
{
],
var
ledgerItem
=
provider
.
ledgerList
[
i
];
),
double
credit
=
),
double
.
tryParse
(
ListView
.
builder
(
ledgerItem
.
creditAmount
.
toString
(),
physics:
NeverScrollableScrollPhysics
(),
)
??
shrinkWrap:
true
,
0
;
itemCount:
groupedData
.
keys
.
length
,
double
debit
=
itemBuilder:
(
context
,
index
)
{
double
.
tryParse
(
String
date
=
groupedData
.
keys
.
elementAt
(
index
);
ledgerItem
.
debitAmount
.
toString
(),
List
<
LedgerList
>
items
=
groupedData
[
date
]!;
)
??
0
;
running_balance
+=
(
debit
-
credit
);
}
return
Container
(
return
Container
(
padding:
EdgeInsets
.
symmetric
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
horizontal:
10
,
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
vertical:
10
,
child:
Column
(
),
crossAxisAlignment:
CrossAxisAlignment
.
start
,
margin:
EdgeInsets
.
symmetric
(
vertical:
5
),
children:
[
decoration:
BoxDecoration
(
Container
(
color:
Colors
.
white
,
padding:
EdgeInsets
.
only
(
bottom:
5
),
borderRadius:
BorderRadius
.
circular
(
16
),
child:
Text
(
),
date
,
child:
Column
(
style:
TextStyle
(
fontSize:
14
,
fontFamily:
"JakartaMedium"
,
color:
Color
(
0xFF818181
),
),
),
),
...
items
.
map
((
item
)
{
double
running_balance
=
0
;
int
currentIndex
=
provider
.
ledgerList
.
indexOf
(
item
,
);
for
(
var
i
=
0
;
i
<=
currentIndex
;
i
++)
{
var
ledgerItem
=
provider
.
ledgerList
[
i
];
double
credit
=
double
.
tryParse
(
ledgerItem
.
creditAmount
.
toString
(),
)
??
0
;
double
debit
=
double
.
tryParse
(
ledgerItem
.
debitAmount
.
toString
(),
)
??
0
;
running_balance
+=
(
debit
-
credit
);
}
return
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
margin:
EdgeInsets
.
symmetric
(
vertical:
5
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Column
(
children:
[
Row
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
children:
[
Row
(
Expanded
(
mainAxisAlignment:
flex:
1
,
MainAxisAlignment
.
start
,
child:
SizedBox
(
children:
[
child:
Expanded
(
item
.
type
==
"Credit"
flex:
1
,
?
Image
.
asset
(
child:
SizedBox
(
"assets/images/trans_debit.png"
,
child:
height:
45
,
item
.
type
==
"Credit"
width:
45
,
?
Image
.
asset
(
fit:
BoxFit
.
contain
,
"assets/images/trans_debit.png"
,
)
height:
45
,
:
Image
.
asset
(
width:
45
,
"assets/images/trans_credit.png"
,
fit:
BoxFit
.
contain
,
height:
45
,
)
width:
45
,
:
Image
.
asset
(
fit:
BoxFit
.
contain
,
"assets/images/trans_credit.png"
,
height:
45
,
width:
45
,
fit:
BoxFit
.
contain
,
),
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
5
,
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
item
.
description
??
"-"
,
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
12
,
),
),
),
],
),
),
),
),
SizedBox
(
width:
10
),
),
Expanded
(
Spacer
(),
flex:
5
,
Expanded
(
child:
SizedBox
(
flex:
3
,
child:
Column
(
child:
SizedBox
(
crossAxisAlignment:
child:
RichText
(
CrossAxisAlignment
.
start
,
maxLines:
1
,
children:
[
textAlign:
TextAlign
.
right
,
Text
(
item
.
description
??
"-"
,
maxLines:
2
,
overflow:
overflow:
TextOverflow
.
ellipsis
,
TextOverflow
.
ellipsis
,
text:
TextSpan
(
style:
TextStyle
(
children:
[
fontFamily:
"JakartaMedium"
,
TextSpan
(
fontSize:
12
,
text:
item
.
type
==
"Credit"
?
"-"
:
"+"
,
style:
TextStyle
(
color:
Color
(
0xFF2D2D2D
,
),
fontSize:
13
,
fontFamily:
"JakartaRegular"
,
),
),
TextSpan
(
text:
"₹
${item.type == "Credit" ? "${item.creditAmount}
"
:
"
${item.debitAmount}
"
}
",
style: TextStyle(
color: Color(
0xFF2D2D2D,
),
fontSize: 13,
fontFamily:
"
JakartaMedium
",
),
),
],
),
),
),
),
)
,
]
,
),
),
],
),
),
Divider(
thickness: 0.5,
color: Color(0xFFd7d7d7),
),
),
Row(
Spacer
(),
children: [
Expanded
(
Expanded(
flex:
3
,
child: Text(
child:
SizedBox
(
"
Balance
",
child:
RichText
(
style: TextStyle(
maxLines:
1
,
fontSize: 13,
textAlign:
TextAlign
.
right
,
color: Color(0xFF2d2d2d),
overflow:
TextOverflow
.
ellipsis
,
),
text:
TextSpan
(
),
children:
[
),
TextSpan
(
Expanded(
text:
child: Text(
item
.
type
==
"Credit"
textAlign: TextAlign.right,
?
"-"
"
$
{
running_balance
.
toString
()}
" ??
:
"+"
,
"
-
",
style:
TextStyle
(
style: TextStyle(
color:
Color
(
0xFF2D2D2D
),
color: Color(0xFF818181),
fontSize:
13
,
fontSize: 13,
fontFamily:
),
"JakartaRegular"
,
),
),
TextSpan
(
text:
"₹
${item.type == "Credit" ? "${item.creditAmount}
"
:
"
${item.debitAmount}
"
}
",
style: TextStyle(
color: Color(0xFF2D2D2D),
fontSize: 13,
fontFamily:
"
JakartaMedium
",
),
),
],
),
),
),
),
]
,
)
,
),
),
InkResponse(
],
onTap: () async {
),
Navigator.push(
Divider(
context,
thickness: 0.5,
MaterialPageRoute(
color: Color(0xFFd7d7d7),
builder:
),
(context) =>
Row(
Transactiondetails(
children: [
paymentID: item.refId,
Expanded(
type: item.type,
child: Text(
),
"
Balance
",
),
style: TextStyle(
);
fontSize: 13,
},
color: Color(0xFF2d2d2d),
child: Container(
padding: EdgeInsets.symmetric(
vertical: 5,
),
),
child: Row(
),
crossAxisAlignment:
),
CrossAxisAlignment.center,
Expanded(
mainAxisAlignment:
child: Text(
MainAxisAlignment.start,
textAlign: TextAlign.right,
children: [
"
$
{
running_balance
.
toString
()}
" ??
Text(
"
-
",
"
View
Details
",
style: TextStyle(
style: TextStyle(
color: Color(0xFF818181),
fontFamily: "
JakartaMedium
",
fontSize: 13,
fontSize: 14,
color: AppColors.app_blue,
),
),
SizedBox(width: 5),
SvgPicture.asset(
"
assets
/
svg
/
next_button
.
svg
",
),
],
),
),
),
),
),
),
],
],
),
),
);
InkResponse(
}).toList(),
onTap: () async {
],
Navigator.push(
),
context,
);
MaterialPageRoute(
},
builder:
),
(context) => Transactiondetails(
if(["
Vendor
","
Customer
"].contains(provider.accountDetails.type))...[
paymentID: item.refId,
InkWell(
type: item.type,
onTap: () {
),
Navigator.push(
),
context,
);
MaterialPageRoute(
},
builder:
child: Container(
(context) =>
padding: EdgeInsets.symmetric(
Submitpaymentrequestionlistsbymode(
vertical: 5,
mode: "
other
",
),
pageTitleName:
child: Row(
"
Add
Payment
Request
(
Other
)
",
crossAxisAlignment:
accountId:provider.accountDetails.id!
CrossAxisAlignment.center,
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Text(
"
View
Details
",
style: TextStyle(
fontFamily: "
JakartaMedium
",
fontSize: 14,
color: AppColors.app_blue,
),
),
SizedBox(width: 5),
SvgPicture.asset(
"
assets
/
svg
/
next_button
.
svg
",
),
],
),
),
),
),
),
);
],
},
),
child: Container(
);
alignment: Alignment.center,
}).toList(),
height: 45,
],
margin: EdgeInsets.only(
),
left: 5.0,
);
right: 5.0,
},
top: 5.0,
),
bottom: 5.0,
if ([
),
"
Vendor
",
decoration: BoxDecoration(
"
Customer
",
color: AppColors.app_blue, //1487C9
].contains(provider.accountDetails.type)) ...[
borderRadius: BorderRadius.circular(15.0),
InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Submitpaymentrequestionlistsbymode(
mode: "
other
",
pageTitleName: "
Add
Payment
Request
(
Other
)
",
accountId: provider.accountDetails.id!,
),
),
),
child: Center(
);
child: Text(
},
"
Add
Payment
Request
(
Other
)
",
child: Container(
textAlign: TextAlign.center,
alignment: Alignment.center,
style: TextStyle(
height: 45,
color: Colors.white,
margin: EdgeInsets.only(
fontFamily: "
JakartaMedium
",
left: 5.0,
fontSize: 15,
right: 5.0,
),
top: 5.0,
bottom: 5.0,
),
decoration: BoxDecoration(
color: AppColors.app_blue, //1487C9
borderRadius: BorderRadius.circular(15.0),
),
child: Center(
child: Text(
"
Add
Payment
Request
(
Other
)
",
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
fontFamily: "
JakartaMedium
",
fontSize: 15,
),
),
),
),
),
),
),
),
]
),
],
],
),
],
),
),
),
),
),
),
),
onWillPop: () {
return _onBackPressed(context);
},
);
);
},
},
);
);
...
...
lib/screens/commom/addCommonPayment.dart
View file @
c92f4c79
import
'dart:io'
;
import
'dart:io'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter/services.dart'
;
...
@@ -7,6 +8,7 @@ import 'package:flutter_svg/svg.dart';
...
@@ -7,6 +8,7 @@ import 'package:flutter_svg/svg.dart';
import
'package:generp/Notifiers/commonProvider/accountsListProvider.dart'
;
import
'package:generp/Notifiers/commonProvider/accountsListProvider.dart'
;
import
'package:generp/Utils/ShakeWidget.dart'
;
import
'package:generp/Utils/ShakeWidget.dart'
;
import
'package:generp/Utils/app_colors.dart'
;
import
'package:generp/Utils/app_colors.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:generp/Utils/commonWidgets.dart'
;
import
'package:generp/Utils/commonWidgets.dart'
;
import
'package:generp/Utils/dropdownTheme.dart'
;
import
'package:generp/Utils/dropdownTheme.dart'
;
import
'package:provider/provider.dart'
;
import
'package:provider/provider.dart'
;
...
@@ -17,880 +19,954 @@ import '../../Models/commonModels/commonAddAccountsViewResponse.dart';
...
@@ -17,880 +19,954 @@ import '../../Models/commonModels/commonAddAccountsViewResponse.dart';
class
Addcommonpayment
extends
StatefulWidget
{
class
Addcommonpayment
extends
StatefulWidget
{
final
from
;
final
from
;
const
Addcommonpayment
({
super
.
key
,
required
this
.
from
});
const
Addcommonpayment
({
super
.
key
,
required
this
.
from
});
@override
@override
State
<
Addcommonpayment
>
createState
()
=>
_AddcommonpaymentState
();
State
<
Addcommonpayment
>
createState
()
=>
_AddcommonpaymentState
();
}
}
class
_AddcommonpaymentState
extends
State
<
Addcommonpayment
>{
class
_AddcommonpaymentState
extends
State
<
Addcommonpayment
>
{
Dropdowntheme
ddtheme
=
Dropdowntheme
();
Dropdowntheme
ddtheme
=
Dropdowntheme
();
List
<
FocusNode
>
focusNodes
=
List
.
generate
(
20
,
(
index
)
=>
FocusNode
());
List
<
FocusNode
>
focusNodes
=
List
.
generate
(
20
,
(
index
)
=>
FocusNode
());
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
@override
@override
void
initState
()
{
void
initState
()
{
// TODO: implement initState
// TODO: implement initState
super
.
initState
();
super
.
initState
();
_connectivity
.
initialise
();
_connectivity
.
myStream
.
listen
((
source
)
{
setState
(()
=>
_source
=
source
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
var
prov
=
Provider
.
of
<
Accountslistprovider
>(
context
,
listen:
false
);
var
prov
=
Provider
.
of
<
Accountslistprovider
>(
context
,
listen:
false
);
prov
.
addCommonAccountViewAPI
(
context
);
prov
.
addCommonAccountViewAPI
(
context
);
});
});
}
}
@override
@override
void
dispose
()
{
void
dispose
()
{
focusNodes
.
map
((
e
)
=>
e
.
dispose
()
,
);
focusNodes
.
map
((
e
)
=>
e
.
dispose
());
super
.
dispose
();
super
.
dispose
();
_connectivity
.
disposeStream
();
}
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
case
ConnectivityResult
.
mobile
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
wifi
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
none
:
default
:
connection
=
'Offline'
;
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer
<
Accountslistprovider
>(
return
Consumer
<
Accountslistprovider
>(
builder:
(
context
,
provider
,
child
)
{
builder:
(
context
,
provider
,
child
)
{
return
WillPopScope
(
return
Scaffold
(
onWillPop:
()
async
{
resizeToAvoidBottomInset:
true
,
provider
.
resetValues
();
appBar:
appbar2
(
return
onBackPressed
(
context
);
context
,
},
"Add Account"
,
child:
SafeArea
(
provider
.
resetValues
,
top:
false
,
SizedBox
(
width:
0
),
bottom:
Platform
.
isIOS
?
false
:
true
,
),
child:
Scaffold
(
backgroundColor:
AppColors
.
white
,
resizeToAvoidBottomInset:
true
,
body:
SizedBox
(
appBar:
appbar2
(
child:
SingleChildScrollView
(
context
,
child:
Column
(
"Add Account"
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
provider
.
resetValues
,
children:
[
SizedBox
(
width:
0
),
Container
(
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
),
backgroundColor:
AppColors
.
white
,
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
),
body:
SizedBox
(
decoration:
BoxDecoration
(
child:
SingleChildScrollView
(
color:
Colors
.
white
,
child:
Column
(
borderRadius:
BorderRadius
.
circular
(
16
),
crossAxisAlignment:
CrossAxisAlignment
.
start
,
),
children:
[
child:
Column
(
Container
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
padding:
EdgeInsets
.
symmetric
(
children:
[
horizontal:
10
,
Text
(
vertical:
10
,
"Account Details"
,
),
style:
TextStyle
(
margin:
EdgeInsets
.
symmetric
(
color:
AppColors
.
app_blue
,
horizontal:
10
,
fontSize:
16
,
vertical:
10
,
fontFamily:
"JakartaMedium"
,
),
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
),
child:
Column
(
SizedBox
(
height:
10
),
crossAxisAlignment:
CrossAxisAlignment
.
start
,
Text
(
"Account"
),
children:
[
DropdownButtonHideUnderline
(
Text
(
child:
Row
(
"Account Details"
,
children:
[
style:
TextStyle
(
Expanded
(
color:
AppColors
.
app_blue
,
child:
DropdownButton2
<
String
>(
fontSize:
16
,
isExpanded:
true
,
fontFamily:
"JakartaMedium"
,
hint:
const
Row
(
),
children:
[
),
Expanded
(
SizedBox
(
height:
10
),
child:
Text
(
Text
(
"Account"
),
'Select Account'
,
DropdownButtonHideUnderline
(
style:
TextStyle
(
fontSize:
14
),
child:
Row
(
overflow:
TextOverflow
.
ellipsis
,
children:
[
),
Expanded
(
child:
DropdownButton2
<
String
>(
isExpanded:
true
,
hint:
const
Row
(
children:
[
Expanded
(
child:
Text
(
'Select Account'
,
style:
TextStyle
(
fontSize:
14
),
overflow:
TextOverflow
.
ellipsis
,
),
),
],
),
),
items:
],
provider
.
accountTypes
.
map
(
(
act
)
=>
DropdownMenuItem
<
String
>(
value:
act
,
child:
Text
(
act
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
)
.
toList
(),
// value: provider.selectedAccountType,
value:
provider
.
accountTypes
.
contains
(
provider
.
selectedAccountType
,
)
?
provider
.
selectedAccountType
:
null
,
onChanged:
(
value
)
{
if
(
value
!=
null
)
{
provider
.
selectedAccountType
=
value
;
print
(
"statusId:
${provider.selectedAccountType}
"
,
);
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
),
),
],
items:
provider
.
accountTypes
.
map
(
(
act
)
=>
DropdownMenuItem
<
String
>(
value:
act
,
child:
Text
(
act
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
)
.
toList
(),
// value: provider.selectedAccountType,
value:
provider
.
accountTypes
.
contains
(
provider
.
selectedAccountType
,
)
?
provider
.
selectedAccountType
:
null
,
onChanged:
(
value
)
{
if
(
value
!=
null
)
{
provider
.
selectedAccountType
=
value
;
print
(
"statusId:
${provider.selectedAccountType}
"
,
);
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
),
),
),
],
errorWidget
(
context
,
provider
.
accountError
),
),
textControllerWidget
(
),
context
,
errorWidget
(
context
,
provider
.
accountError
),
provider
.
nameController
,
textControllerWidget
(
"Company Name"
,
context
,
"Enter Company Name"
,
provider
.
nameController
,
(
p0
)
{
"Company Name"
,
provider
.
updateName
(
p0
);
"Enter Company Name"
,
provider
.
checkInputsAPI
(
(
p0
)
{
context
,
provider
.
updateName
(
p0
);
"name"
,
provider
.
checkInputsAPI
(
provider
.
nameController
.
text
,
);
},
TextInputType
.
text
,
false
,
null
,
focusNodes
[
0
],
focusNodes
[
1
],
TextInputAction
.
next
),
errorWidget
(
context
,
provider
.
nameError
),
textControllerWidget
(
context
,
context
,
provider
.
mobileController
,
"name"
,
"Mobile Number"
,
provider
.
nameController
.
text
,
"Enter Mobile"
,
);
(
p0
)
{
},
provider
.
updateMobile
(
p0
);
TextInputType
.
text
,
provider
.
checkInputsAPI
(
false
,
context
,
null
,
"mob1"
,
focusNodes
[
0
],
provider
.
mobileController
.
text
,
focusNodes
[
1
],
);
TextInputAction
.
next
,
},
),
TextInputType
.
phone
,
errorWidget
(
context
,
provider
.
nameError
),
false
,
textControllerWidget
(
FilteringTextInputFormatter
.
digitsOnly
,
context
,
focusNodes
[
1
],
provider
.
mobileController
,
focusNodes
[
2
],
"Mobile Number"
,
TextInputAction
.
next
,
"Enter Mobile"
,
10
,
(
p0
)
{
),
provider
.
updateMobile
(
p0
);
errorWidget
(
context
,
provider
.
mobileError
),
provider
.
checkInputsAPI
(
textControllerWidget
(
context
,
provider
.
contactPersonController
,
"Contact Person Name"
,
"Enter Contact Person Name"
,
provider
.
updateContactPerson
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
12
],
focusNodes
[
13
],
TextInputAction
.
next
),
errorWidget
(
context
,
context
,
provider
.
contactPersonError
,
"mob1"
,
provider
.
mobileController
.
text
,
);
},
TextInputType
.
phone
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
focusNodes
[
1
],
focusNodes
[
2
],
TextInputAction
.
next
,
10
,
),
errorWidget
(
context
,
provider
.
mobileError
),
textControllerWidget
(
context
,
provider
.
contactPersonController
,
"Contact Person Name"
,
"Enter Contact Person Name"
,
provider
.
updateContactPerson
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
12
],
focusNodes
[
13
],
TextInputAction
.
next
,
),
errorWidget
(
context
,
provider
.
contactPersonError
),
],
),
),
SizedBox
(
height:
12
),
Column
(
children:
[
InkResponse
(
onTap:
()
=>
provider
.
isVisible
=
!
provider
.
isVisible
,
child:
Center
(
child:
Text
(
provider
.
isVisible
?
"- Hide More Details"
:
"+ Add More Details"
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontSize:
16
,
fontFamily:
"JakartaMedium"
,
),
),
]
,
)
,
),
),
),
),
SizedBox
(
height:
12
),
if
(
provider
.
addMoreDetailsError
!=
null
)
...[
Column
(
Center
(
children:
[
child:
ShakeWidget
(
InkResponse
(
key:
Key
(
"value"
),
onTap:
duration:
Duration
(
milliseconds:
700
),
()
=>
provider
.
isVisible
=
!
provider
.
isVisible
,
child:
Text
(
child:
Center
(
provider
.
addMoreDetailsError
??
""
,
child:
Text
(
style:
TextStyle
(
provider
.
isVisible
color:
Colors
.
red
,
?
"- Hide More Details"
fontSize:
13
,
:
"+ Add More Details"
,
fontFamily:
"JakartaMedium"
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontSize:
16
,
fontFamily:
"JakartaMedium"
,
),
),
),
),
),
),
),
if
(
provider
.
addMoreDetailsError
!=
null
)...[
),
Center
(
],
child:
ShakeWidget
(
Visibility
(
key:
Key
(
"value"
),
visible:
provider
.
isVisible
,
duration:
Duration
(
milliseconds:
700
),
child:
Column
(
child:
Text
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
provider
.
addMoreDetailsError
??
""
,
children:
[
style:
TextStyle
(
Container
(
color:
Colors
.
red
,
margin:
EdgeInsets
.
symmetric
(
fontSize:
13
,
horizontal:
10
,
fontFamily:
"JakartaMedium"
,
vertical:
10
,
),
),
),
),
padding:
EdgeInsets
.
symmetric
(
),
horizontal:
10
,
],
vertical:
10
,
Visibility
(
),
visible:
provider
.
isVisible
,
decoration:
BoxDecoration
(
child:
Column
(
color:
Colors
.
white
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
borderRadius:
BorderRadius
.
circular
(
16
),
children:
[
),
child:
Column
(
Container
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
margin:
EdgeInsets
.
symmetric
(
children:
[
horizontal:
10
,
Text
(
"State"
),
vertical:
10
,
DropdownButtonHideUnderline
(
),
child:
Row
(
padding:
EdgeInsets
.
symmetric
(
children:
[
horizontal:
10
,
Expanded
(
vertical:
10
,
child:
DropdownButton2
<
States
>(
),
focusNode:
focusNodes
[
2
],
decoration:
BoxDecoration
(
autofocus:
color:
Colors
.
white
,
focusNodes
[
2
].
hasFocus
borderRadius:
BorderRadius
.
circular
(
16
),
?
true
),
:
false
,
child:
Column
(
isExpanded:
true
,
crossAxisAlignment:
hint:
Text
(
CrossAxisAlignment
.
start
,
'Select State'
,
children:
[
style:
TextStyle
(
fontSize:
14
),
Text
(
"State"
),
overflow:
TextOverflow
.
ellipsis
,
DropdownButtonHideUnderline
(
),
child:
Row
(
items:
children:
[
Expanded
(
child:
DropdownButton2
<
States
>(
focusNode:
focusNodes
[
2
],
autofocus:
focusNodes
[
2
].
hasFocus
?
true
:
false
,
isExpanded:
true
,
hint:
Text
(
'Select State'
,
style:
TextStyle
(
fontSize:
14
),
overflow:
TextOverflow
.
ellipsis
,
),
items:
provider
.
states
provider
.
states
.
map
(
.
map
(
(
states
)
=>
(
DropdownMenuItem
<
States
>(
states
,
)
=>
DropdownMenuItem
<
States
>(
value:
states
,
value:
states
,
child:
Text
(
child:
Text
(
states
.
name
??
''
,
states
.
name
??
''
,
style:
const
TextStyle
(
style:
fontSize:
14
,
const
TextStyle
(
),
fontSize:
14
,
),
overflow:
overflow:
TextOverflow
TextOverflow
.
ellipsis
,
.
ellipsis
,
),
),
),
),
)
)
.
toList
(),
.
toList
(),
value:
value:
provider
.
states
.
contains
(
provider
.
states
.
contains
(
provider
.
selectedState
,
provider
.
selectedState
,
)
)
?
provider
.
selectedState
?
provider
.
selectedState
:
null
,
:
null
,
// value: provider.selectedState,
// value: provider.selectedState,
onChanged:
(
States
?
value
)
{
onChanged:
(
States
?
value
)
{
if
(
value
!=
null
)
{
if
(
value
!=
null
)
{
if
(
provider
.
states
.
isNotEmpty
)
{
if
(
provider
provider
.
selectedState
=
value
;
.
states
print
(
.
isNotEmpty
)
{
"Selected Complaint Type:
${value.name}
, ID:
${value.id}
"
,
provider
.
selectedState
=
);
value
;
provider
.
selectedStateID
=
print
(
"Selected Complaint Type:
${value.name}
, ID:
${value.id}
"
,
);
provider
.
selectedStateID
=
value
.
id
!;
value
.
id
!;
print
(
print
(
"hfjkshfg"
+
"hfjkshfg"
+
provider
.
selectedStateID
provider
.
selectedStateID
.
toString
(),
.
toString
(),
);
);
if
(
provider
.
selectedDistricts
!=
if
(
provider
null
)
{
.
selectedDistricts
!=
provider
.
states
.
clear
();
null
)
{
// provider.selectedDistricts = null;
provider
.
states
.
clear
();
provider
.
selectedDistrictId
=
// provider.selectedDistricts = null;
provider
.
selectedDistrictId
=
null
;
null
;
provider
.
selectedDistrictValue
=
provider
.
selectedDistrictValue
=
null
;
null
;
}
provider
.
getDistrictAPI
(
context
,
provider
.
selectedStateID
,
);
}
}
}
},
dropdownSearchData:
DropdownSearchData
(
provider
.
getDistrictAPI
(
searchInnerWidgetHeight:
50
,
context
,
searchController:
provider
.
selectedStateID
,
provider
.
stateSearchController
,
);
searchInnerWidget:
Padding
(
}
padding:
const
EdgeInsets
.
all
(
8
),
}
child:
TextFormField
(
},
controller:
provider
.
stateSearchController
,
dropdownSearchData:
DropdownSearchData
(
decoration:
InputDecoration
(
searchInnerWidgetHeight:
50
,
isDense:
true
,
searchController:
contentPadding:
provider
.
stateSearchController
,
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
,
),
child:
TextFormField
(
controller:
provider
.
stateSearchController
,
decoration:
InputDecoration
(
isDense:
true
,
contentPadding:
const
EdgeInsets
.
symmetric
(
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
horizontal:
10
,
vertical:
8
,
vertical:
8
,
),
),
hintText:
'Search States...'
,
hintText:
border:
OutlineInputBorder
(
'Search States...'
,
borderRadius:
border:
OutlineInputBorder
(
BorderRadius
.
circular
(
8
),
borderRadius:
),
BorderRadius
.
circular
(
),
8
,
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
)
{
),
return
item
.
value
?.
name
),
searchMatchFn:
(
item
,
searchValue
,
)
{
return
item
.
value
?.
name
?.
toLowerCase
()
?.
toLowerCase
()
.
contains
(
.
contains
(
searchValue
.
toLowerCase
(),
searchValue
)
??
.
toLowerCase
(),
false
;
)
??
},
false
;
),
},
onMenuStateChange:
(
isOpen
)
{
),
if
(!
isOpen
)
{
onMenuStateChange:
(
isOpen
)
{
provider
.
stateSearchController
if
(!
isOpen
)
{
.
clear
();
provider
.
stateSearchController
}
.
clear
();
},
}
buttonStyleData:
ddtheme
.
buttonStyleData
,
},
iconStyleData:
ddtheme
.
iconStyleData
,
buttonStyleData:
menuItemStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
ddtheme
.
dropdownStyleData
,
),
),
),
],
),
),
),
],
errorWidget
(
context
,
provider
.
stateError
),
),
Text
(
"District"
),
),
DropdownButtonHideUnderline
(
errorWidget
(
context
,
provider
.
stateError
),
child:
Row
(
Text
(
"District"
),
children:
[
DropdownButtonHideUnderline
(
Expanded
(
child:
Row
(
child:
DropdownButton2
<
Districts
>(
children:
[
focusNode:
focusNodes
[
3
],
Expanded
(
isExpanded:
true
,
child:
DropdownButton2
<
Districts
>(
hint:
Text
(
focusNode:
focusNodes
[
3
],
'Select District'
,
isExpanded:
true
,
style:
TextStyle
(
fontSize:
14
),
hint:
Text
(
overflow:
TextOverflow
.
ellipsis
,
'Select District'
,
),
style:
TextStyle
(
fontSize:
14
),
items:
overflow:
TextOverflow
.
ellipsis
,
),
items:
provider
.
districts
provider
.
districts
.
map
(
.
map
(
(
dist
)
=>
(
DropdownMenuItem
<
Districts
>(
dist
,
)
=>
DropdownMenuItem
<
Districts
>(
value:
dist
,
value:
dist
,
child:
Text
(
child:
Text
(
dist
.
district
??
''
,
dist
.
district
??
''
,
style:
const
TextStyle
(
style:
fontSize:
14
,
const
TextStyle
(
),
fontSize:
14
,
),
overflow:
overflow:
TextOverflow
TextOverflow
.
ellipsis
,
.
ellipsis
,
),
),
),
),
)
)
.
toList
(),
.
toList
(),
value:
value:
provider
.
districts
.
contains
(
provider
.
districts
.
contains
(
provider
.
selectedDistricts
,
provider
)
.
selectedDistricts
,
)
?
provider
.
selectedDistricts
?
provider
.
selectedDistricts
:
null
,
:
null
,
// value: provider.selectedDistricts,
// value: provider.selectedDistricts,
onChanged:
(
Districts
?
value
)
{
onChanged:
(
Districts
?
value
)
{
if
(
value
!=
null
)
{
if
(
value
!=
null
)
{
if
(
provider
.
districts
.
isNotEmpty
)
{
if
(
provider
provider
.
selectedDistricts
=
value
;
.
districts
print
(
"Selected ID:
${value.id}
"
);
.
isNotEmpty
)
{
provider
.
selectedDistrictId
=
provider
.
selectedDistricts
=
value
;
print
(
"Selected ID:
${value.id}
"
,
);
provider
.
selectedDistrictId
=
value
.
id
!;
value
.
id
!;
provider
.
selectedDistrictValue
=
provider
.
selectedDistrictValue
=
value
.
district
!;
value
.
district
!;
print
(
print
(
"hfjkshfg"
+
"hfjkshfg"
+
provider
.
selectedDistrictId
provider
.
toString
(),
.
selectedDistrictId
);
.
toString
(),
if
(
provider
.
selectedSubLocations
!=
);
null
)
{
if
(
provider
// provider.selectedSubLocations =
.
selectedSubLocations
!=
// null;
null
)
{
provider
.
selectedSubLocID
=
null
;
// provider.selectedSubLocations =
provider
.
selectedSubLocValue
=
// null;
provider
.
selectedSubLocID
=
null
;
provider
.
selectedSubLocValue
=
null
;
null
;
}
provider
.
getSubLocationAPI
(
context
,
provider
.
selectedDistrictId
,
);
}
}
}
},
provider
.
getSubLocationAPI
(
dropdownSearchData:
DropdownSearchData
(
context
,
searchInnerWidgetHeight:
50
,
provider
.
selectedDistrictId
,
searchController:
);
provider
.
districtSearchController
,
}
searchInnerWidget:
Padding
(
}
padding:
const
EdgeInsets
.
all
(
8
),
},
child:
TextFormField
(
dropdownSearchData:
DropdownSearchData
(
controller:
searchInnerWidgetHeight:
50
,
searchController:
provider
.
districtSearchController
,
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
,
),
child:
TextFormField
(
controller:
provider
provider
.
districtSearchController
,
.
districtSearchController
,
decoration:
InputDecoration
(
decoration:
InputDecoration
(
isDense:
true
,
isDense:
true
,
contentPadding:
contentPadding:
const
EdgeInsets
.
symmetric
(
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
horizontal:
10
,
vertical:
8
,
vertical:
8
,
),
),
hintText:
'Search Districts...'
,
hintText:
border:
OutlineInputBorder
(
'Search Districts...'
,
borderRadius:
border:
OutlineInputBorder
(
BorderRadius
.
circular
(
8
),
borderRadius:
),
BorderRadius
.
circular
(
),
8
,
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
)
{
),
return
item
.
value
?.
district
),
searchMatchFn:
(
item
,
searchValue
,
)
{
return
item
.
value
?.
district
?.
toLowerCase
()
?.
toLowerCase
()
.
contains
(
.
contains
(
searchValue
.
toLowerCase
(),
searchValue
)
??
.
toLowerCase
(),
false
;
)
??
},
false
;
),
},
onMenuStateChange:
(
isOpen
)
{
),
if
(!
isOpen
)
{
onMenuStateChange:
(
isOpen
)
{
provider
.
districtSearchController
if
(!
isOpen
)
{
.
clear
();
provider
}
.
districtSearchController
},
.
clear
();
buttonStyleData:
ddtheme
.
buttonStyleData
,
}
iconStyleData:
ddtheme
.
iconStyleData
,
},
menuItemStyleData:
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
ddtheme
.
dropdownStyleData
,
),
),
),
],
),
),
),
],
errorWidget
(
context
,
provider
.
districtError
),
),
Text
(
"Sub Locality"
),
),
DropdownButtonHideUnderline
(
errorWidget
(
context
,
provider
.
districtError
),
child:
Row
(
Text
(
"Sub Locality"
),
children:
[
DropdownButtonHideUnderline
(
Expanded
(
child:
Row
(
child:
DropdownButton2
<
SubLocations
>(
children:
[
focusNode:
focusNodes
[
4
],
Expanded
(
isExpanded:
true
,
child:
DropdownButton2
<
SubLocations
>(
hint:
Text
(
focusNode:
focusNodes
[
4
],
'Select Sub Locality'
,
isExpanded:
true
,
style:
TextStyle
(
fontSize:
14
),
hint:
Text
(
overflow:
TextOverflow
.
ellipsis
,
'Select Sub Locality'
,
),
style:
TextStyle
(
fontSize:
14
),
items:
overflow:
TextOverflow
.
ellipsis
,
),
items:
provider
.
subLocations
provider
.
subLocations
.
map
(
.
map
(
(
subloc
)
=>
DropdownMenuItem
<
(
SubLocations
subloc
,
>(
)
=>
DropdownMenuItem
<
value:
subloc
,
SubLocations
child:
Text
(
>(
subloc
.
subLocality
??
''
,
value:
subloc
,
style:
const
TextStyle
(
child:
Text
(
fontSize:
14
,
subloc
.
subLocality
??
''
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
),
overflow:
)
TextOverflow
.
ellipsis
,
),
),
)
.
toList
(),
.
toList
(),
// value: provider.selectedSubLocations,
// value: provider.selectedSubLocations,
value:
value:
provider
.
subLocations
.
contains
(
provider
.
subLocations
.
contains
(
provider
.
selectedSubLocations
,
provider
)
.
selectedSubLocations
,
?
provider
.
selectedSubLocations
)
?
provider
.
selectedSubLocations
:
null
,
:
null
,
onChanged:
(
SubLocations
?
value
)
{
onChanged:
(
SubLocations
?
value
)
{
if
(
value
!=
null
)
{
if
(
value
!=
null
)
{
if
(
provider
if
(
provider
.
subLocations
.
subLocations
.
isNotEmpty
)
{
.
isNotEmpty
)
{
provider
.
selectedSubLocations
=
provider
.
selectedSubLocations
=
value
;
value
;
print
(
"Selected ID:
${value.id}
"
);
print
(
provider
.
selectedSubLocID
=
"Selected ID:
${value.id}
"
,
);
provider
.
selectedSubLocID
=
value
.
id
!;
value
.
id
!;
provider
.
selectedSubLocValue
=
provider
.
selectedSubLocValue
=
value
.
subLocality
!;
value
.
subLocality
!;
print
(
print
(
"hfjkshfg"
+
"hfjkshfg"
+
provider
.
selectedSubLocID
provider
.
toString
(),
.
selectedSubLocID
);
.
toString
(),
}
);
}
}
},
}
dropdownSearchData:
DropdownSearchData
(
},
searchInnerWidgetHeight:
50
,
dropdownSearchData:
DropdownSearchData
(
searchController:
searchInnerWidgetHeight:
50
,
provider
.
subLocSearchController
,
searchController:
searchInnerWidget:
Padding
(
provider
padding:
const
EdgeInsets
.
all
(
8
),
.
subLocSearchController
,
child:
TextFormField
(
searchInnerWidget:
Padding
(
controller:
padding:
const
EdgeInsets
.
all
(
provider
.
subLocSearchController
,
8
,
decoration:
InputDecoration
(
),
isDense:
true
,
child:
TextFormField
(
contentPadding:
controller:
provider
.
subLocSearchController
,
decoration:
InputDecoration
(
isDense:
true
,
contentPadding:
const
EdgeInsets
.
symmetric
(
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
horizontal:
10
,
vertical:
8
,
vertical:
8
,
),
),
hintText:
hintText:
'Search Sub Locality...'
,
'Search Sub Locality...'
,
border:
OutlineInputBorder
(
border:
OutlineInputBorder
(
borderRadius:
borderRadius:
BorderRadius
.
circular
(
8
),
BorderRadius
.
circular
(
)
,
8
,
),
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
)
{
),
return
item
.
value
?.
subLocality
),
searchMatchFn:
(
item
,
searchValue
,
)
{
return
item
.
value
?.
subLocality
?.
toLowerCase
()
?.
toLowerCase
()
.
contains
(
.
contains
(
searchValue
.
toLowerCase
(),
searchValue
)
??
.
toLowerCase
(),
false
;
)
??
},
false
;
),
},
onMenuStateChange:
(
isOpen
)
{
),
if
(!
isOpen
)
{
onMenuStateChange:
(
isOpen
)
{
provider
.
subLocSearchController
if
(!
isOpen
)
{
.
clear
();
provider
.
subLocSearchController
}
.
clear
();
},
}
buttonStyleData:
ddtheme
.
buttonStyleData
,
},
iconStyleData:
ddtheme
.
iconStyleData
,
buttonStyleData:
menuItemStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
ddtheme
.
dropdownStyleData
,
),
),
),
],
),
),
errorWidget
(
context
,
provider
.
localityError
),
textControllerWidget
(
context
,
provider
.
addressController
,
"Address"
,
"Enter Address"
,
provider
.
updateAddress
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
5
],
null
,
TextInputAction
.
done
,
),
errorWidget
(
context
,
provider
.
addressError
),
Text
(
"Bank Details"
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontSize:
16
,
fontFamily:
"JakartaMedium"
,
),
),
),
],
textControllerWidget
(
),
context
,
provider
.
bankNameController
,
"Bank Name"
,
"Enter Bank Name"
,
provider
.
updateBankName
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
6
],
focusNodes
[
7
],
TextInputAction
.
next
,
),
errorWidget
(
context
,
provider
.
banknameError
,
),
textControllerWidget
(
context
,
provider
.
branchNameController
,
"Bank Branch"
,
"Enter Bank Branch"
,
provider
.
updateBankBranch
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
7
],
focusNodes
[
8
],
TextInputAction
.
next
),
errorWidget
(
context
,
provider
.
bankBranchError
,
),
textControllerWidget
(
context
,
provider
.
bankIfscCotroller
,
"Bank IFSC"
,
"Enter Bank IFSC"
,
provider
.
updateIFSC
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
8
],
focusNodes
[
9
],
TextInputAction
.
next
),
errorWidget
(
context
,
provider
.
bankIFSCError
,
),
textControllerWidget
(
context
,
provider
.
bankHolderNameController
,
"Bank Holder Name"
,
"Enter Bank Holder Name"
,
provider
.
updateHolder
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
9
],
focusNodes
[
10
],
TextInputAction
.
next
),
errorWidget
(
context
,
provider
.
bankHolderNameError
,
),
textControllerWidget
(
context
,
provider
.
bankAcNumberController
,
"Bank Account Number"
,
"Enter Bank Account Number"
,
provider
.
updateNumber
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
focusNodes
[
10
],
focusNodes
[
11
],
TextInputAction
.
next
),
errorWidget
(
context
,
provider
.
bankAcNumberError
,
),
textControllerWidget
(
context
,
provider
.
bankUpiController
,
"Bank UPI ID"
,
"Enter Bank UPI ID"
,
provider
.
updateUPI
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
11
],
focusNodes
[
12
],
TextInputAction
.
next
),
errorWidget
(
context
,
provider
.
upiError
),
],
),
),
),
errorWidget
(
context
,
provider
.
localityError
),
Container
(
textControllerWidget
(
margin:
EdgeInsets
.
symmetric
(
context
,
horizontal:
10
,
provider
.
addressController
,
vertical:
10
,
"Address"
,
"Enter Address"
,
provider
.
updateAddress
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
5
],
null
,
TextInputAction
.
done
,
),
),
padding:
EdgeInsets
.
symmetric
(
errorWidget
(
context
,
provider
.
addressError
),
horizontal:
10
,
Text
(
vertical:
10
,
"Bank Details"
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontSize:
16
,
fontFamily:
"JakartaMedium"
,
),
),
),
decoration:
BoxDecoration
(
textControllerWidget
(
color:
Colors
.
white
,
context
,
borderRadius:
BorderRadius
.
circular
(
16
),
provider
.
bankNameController
,
"Bank Name"
,
"Enter Bank Name"
,
provider
.
updateBankName
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
6
],
focusNodes
[
7
],
TextInputAction
.
next
,
),
errorWidget
(
context
,
provider
.
banknameError
),
textControllerWidget
(
context
,
provider
.
branchNameController
,
"Bank Branch"
,
"Enter Bank Branch"
,
provider
.
updateBankBranch
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
7
],
focusNodes
[
8
],
TextInputAction
.
next
,
),
errorWidget
(
context
,
provider
.
bankBranchError
,
),
textControllerWidget
(
context
,
provider
.
bankIfscCotroller
,
"Bank IFSC"
,
"Enter Bank IFSC"
,
provider
.
updateIFSC
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
8
],
focusNodes
[
9
],
TextInputAction
.
next
,
),
errorWidget
(
context
,
provider
.
bankIFSCError
),
textControllerWidget
(
context
,
provider
.
bankHolderNameController
,
"Bank Holder Name"
,
"Enter Bank Holder Name"
,
provider
.
updateHolder
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
9
],
focusNodes
[
10
],
TextInputAction
.
next
,
),
errorWidget
(
context
,
provider
.
bankHolderNameError
,
),
textControllerWidget
(
context
,
provider
.
bankAcNumberController
,
"Bank Account Number"
,
"Enter Bank Account Number"
,
provider
.
updateNumber
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
focusNodes
[
10
],
focusNodes
[
11
],
TextInputAction
.
next
,
),
errorWidget
(
context
,
provider
.
bankAcNumberError
,
),
textControllerWidget
(
context
,
provider
.
bankUpiController
,
"Bank UPI ID"
,
"Enter Bank UPI ID"
,
provider
.
updateUPI
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
11
],
focusNodes
[
12
],
TextInputAction
.
next
,
),
errorWidget
(
context
,
provider
.
upiError
),
],
),
),
Container
(
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
,
),
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
"Contact Details"
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontSize:
16
,
fontFamily:
"JakartaMedium"
,
),
),
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
"Contact Details"
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
fontSize:
16
,
fontFamily:
"JakartaMedium"
,
),
),
textControllerWidget
(
textControllerWidget
(
context
,
provider
.
contectPersonDesignationController
,
"Contact Person Designation"
,
"Enter Contact Person Designation"
,
provider
.
updateDesignation
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
13
],
focusNodes
[
14
],
TextInputAction
.
next
,
),
errorWidget
(
context
,
provider
.
desigantionError
,
),
textControllerWidget
(
context
,
provider
.
contectPersonAltMobController
,
"Alternative Mobile Number"
,
"Enter Alternative Mobile Number"
,
(
p0
)
{
provider
.
updateAltMobile
(
p0
);
provider
.
checkInputsAPI
(
context
,
context
,
"mob2"
,
provider
provider
.
contectPersonDesignationController
,
.
contectPersonAltMobController
"Contact Person Designation"
,
.
text
,
"Enter Contact Person Designation"
,
);
provider
.
updateDesignation
,
},
TextInputType
.
text
,
TextInputType
.
number
,
false
,
false
,
null
,
FilteringTextInputFormatter
.
digitsOnly
,
focusNodes
[
13
],
focusNodes
[
14
],
focusNodes
[
14
],
TextInputAction
.
next
focusNodes
[
15
],
),
TextInputAction
.
next
,
errorWidget
(
10
,
context
,
provider
.
desigantionError
,
),
textControllerWidget
(
context
,
provider
.
contectPersonAltMobController
,
"Alternative Mobile Number"
,
"Enter Alternative Mobile Number"
,
(
p0
)
{
provider
.
updateAltMobile
(
p0
);
provider
.
checkInputsAPI
(
context
,
"mob2"
,
provider
.
contectPersonAltMobController
.
text
,
);
},
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
focusNodes
[
14
],
focusNodes
[
15
],
TextInputAction
.
next
,
10
,
),
errorWidget
(
context
,
provider
.
altMobError
,
),
textControllerWidget
(
context
,
provider
.
contectPersonTeleController
,
"Telephone Number"
,
"Enter Telephone Number"
,
provider
.
updateTeleMobile
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
focusNodes
[
15
],
focusNodes
[
16
],
TextInputAction
.
next
),
errorWidget
(
context
,
provider
.
teleError
),
textControllerWidget
(
context
,
provider
.
contectPersonMailController
,
"Customer Mail ID"
,
"Enter Customer Mail ID"
,
provider
.
updateMail
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
16
],
focusNodes
[
17
],
TextInputAction
.
next
),
errorWidget
(
context
,
provider
.
mailError
),
],
),
),
),
errorWidget
(
context
,
provider
.
altMobError
),
],
textControllerWidget
(
context
,
provider
.
contectPersonTeleController
,
"Telephone Number"
,
"Enter Telephone Number"
,
provider
.
updateTeleMobile
,
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
focusNodes
[
15
],
focusNodes
[
16
],
TextInputAction
.
next
,
),
errorWidget
(
context
,
provider
.
teleError
),
textControllerWidget
(
context
,
provider
.
contectPersonMailController
,
"Customer Mail ID"
,
"Enter Customer Mail ID"
,
provider
.
updateMail
,
TextInputType
.
text
,
false
,
null
,
focusNodes
[
16
],
focusNodes
[
17
],
TextInputAction
.
next
,
),
errorWidget
(
context
,
provider
.
mailError
),
],
),
),
),
)
,
]
,
]
,
)
,
),
),
],
],
),
),
)
,
]
,
),
),
),
),
bottomNavigationBar:
InkResponse
(
bottomNavigationBar:
InkResponse
(
onTap:
onTap:
provider
.
submitClickced
provider
.
submitClickced
?
null
?
null
:
()
{
:
()
{
provider
.
submitClickced
=
true
;
provider
.
submitClickced
=
true
;
provider
.
submitCommonAccountsAPI
(
context
,
widget
.
from
);
provider
.
submitCommonAccountsAPI
(
context
,
widget
.
from
);
},
},
child:
Container
(
child:
Container
(
height:
45
,
height:
45
,
alignment:
Alignment
.
center
,
alignment:
Alignment
.
center
,
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
15
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
15
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
decoration:
BoxDecoration
(
decoration:
BoxDecoration
(
color:
AppColors
.
app_blue
,
color:
AppColors
.
app_blue
,
borderRadius:
BorderRadius
.
circular
(
15
),
borderRadius:
BorderRadius
.
circular
(
15
),
),
child:
provider
.
submitClickced
?
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
(
AppColors
.
white
),
)
:
Text
(
"Submit"
,
style:
TextStyle
(
fontSize:
15
,
fontFamily:
"JakartaMedium"
,
color:
Colors
.
white
,
),
),
),
),
),
child:
provider
.
submitClickced
?
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
(
AppColors
.
white
),
)
:
Text
(
"Submit"
,
style:
TextStyle
(
fontSize:
15
,
fontFamily:
"JakartaMedium"
,
color:
Colors
.
white
,
),
),
),
),
),
),
);
);
...
...
lib/screens/crm/LeadDetailsByMode.dart
View file @
c92f4c79
import
'dart:io'
;
import
'dart:io'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:generp/Notifiers/crmProvider/crmLeadDetailsProvider.dart'
;
import
'package:generp/Notifiers/crmProvider/crmLeadDetailsProvider.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:generp/screens/crm/AppointmentDetails.dart'
;
import
'package:generp/screens/crm/AppointmentDetails.dart'
;
import
'package:generp/screens/crm/FollowUpDetails.dart'
;
import
'package:generp/screens/crm/FollowUpDetails.dart'
;
import
'package:generp/screens/crm/QuotationDetails.dart'
;
import
'package:generp/screens/crm/QuotationDetails.dart'
;
...
@@ -32,10 +34,17 @@ class LeadDetailsByMode extends StatefulWidget {
...
@@ -32,10 +34,17 @@ class LeadDetailsByMode extends StatefulWidget {
}
}
class
_LeadDetailsByModeState
extends
State
<
LeadDetailsByMode
>
{
class
_LeadDetailsByModeState
extends
State
<
LeadDetailsByMode
>
{
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
@override
@override
void
initState
()
{
void
initState
()
{
// TODO: implement initState
// TODO: implement initState
super
.
initState
();
super
.
initState
();
_connectivity
.
initialise
();
_connectivity
.
myStream
.
listen
((
source
)
{
setState
(()
=>
_source
=
source
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
final
provider
=
Provider
.
of
<
crmLeadDetailsProvider
>(
final
provider
=
Provider
.
of
<
crmLeadDetailsProvider
>(
context
,
context
,
...
@@ -45,33 +54,60 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
...
@@ -45,33 +54,60 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
});
});
}
}
@override
void
dispose
()
{
// TODO: implement dispose
super
.
dispose
();
_connectivity
.
disposeStream
();
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
case
ConnectivityResult
.
mobile
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
wifi
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
none
:
default
:
connection
=
'Offline'
;
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer
<
crmLeadDetailsProvider
>(
return
Consumer
<
crmLeadDetailsProvider
>(
builder:
(
context
,
provider
,
child
)
{
builder:
(
context
,
provider
,
child
)
{
var
leadDetails
=
provider
.
leadDetails
;
var
leadDetails
=
provider
.
leadDetails
;
var
headings1
=
[
var
headings1
=
[
"Account Manager Name"
,
"Account Manager Name"
,
"Account Created By"
,
"Account Created By"
,
"Address"
,
"Address"
,
"Lead Status"
,
"Lead Status"
,
"Last Followup Date"
"Last Followup Date"
,
];
];
var
subHeadings1
=
[
var
subHeadings1
=
[
provider
.
accountDetails
!.
accManager
??
"-"
,
provider
.
accountDetails
!.
accManager
??
"-"
,
provider
.
accountDetails
!.
owner
??
"-"
,
provider
.
accountDetails
!.
owner
??
"-"
,
provider
.
leadDetails
!.
address
??
"-"
,
provider
.
leadDetails
!.
address
??
"-"
,
provider
.
leadDetails
!.
status
??
"-"
,
provider
.
leadDetails
!.
status
??
"-"
,
provider
.
followupDetails
.
first
!.
fdate
??
"-"
,
provider
.
followupDetails
.
first
!.
fdate
??
"-"
,
];
];
var
headings2
=
[
var
headings2
=
[
"State"
,
"State"
,
"District"
,
"District"
,
...
@@ -84,216 +120,207 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
...
@@ -84,216 +120,207 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
];
];
var
subHeadings2
=
[
var
subHeadings2
=
[
provider
.
accountDetails
!.
state
??
"-"
,
provider
.
accountDetails
!.
state
??
"-"
,
provider
.
accountDetails
!.
district
??
"-"
,
provider
.
accountDetails
!.
district
??
"-"
,
provider
.
accountDetails
!.
subLocality
??
"-"
,
provider
.
accountDetails
!.
subLocality
??
"-"
,
provider
.
accountDetails
!.
source
??
"-"
,
provider
.
accountDetails
!.
source
??
"-"
,
provider
.
accountDetails
!.
reference
??
"-"
,
provider
.
accountDetails
!.
reference
??
"-"
,
provider
.
accountDetails
!.
team
??
"-"
,
provider
.
accountDetails
!.
team
??
"-"
,
provider
.
accountDetails
!.
segment
??
"-"
,
provider
.
accountDetails
!.
segment
??
"-"
,
"
${provider.leadDetails!.lage??"-"}
days"
,
"
${provider.leadDetails!.lage
??
"-"}
days"
,
];
];
var
totalHeadings
=
[...
headings1
];
var
totalHeadings
=
[...
headings1
];
var
totalSubHeadings
=
[...
subHeadings1
];
var
totalSubHeadings
=
[...
subHeadings1
];
if
(
provider
.
showMoreDetails
){
if
(
provider
.
showMoreDetails
)
{
totalHeadings
=
[...
headings1
,...
headings2
];
totalHeadings
=
[...
headings1
,
...
headings2
];
totalSubHeadings
=
[...
subHeadings1
,...
subHeadings2
];
totalSubHeadings
=
[...
subHeadings1
,
...
subHeadings2
];
}
}
return
WillPopScope
(
return
Scaffold
(
child:
SafeArea
(
resizeToAvoidBottomInset:
true
,
top:
false
,
appBar:
appbar2
(
bottom:
Platform
.
isIOS
?
false
:
true
,
context
,
child:
Scaffold
(
"Lead Details (
${widget.mode}
)"
,
resizeToAvoidBottomInset:
true
,
provider
.
resetAll
,
appBar:
appbar2
(
InkResponse
(
context
,
onTap:
()
{
"Lead Details (
${widget.mode}
)"
,
_showOptionsSheet
(
context
);
provider
.
resetAll
,
},
InkResponse
(
child:
SvgPicture
.
asset
(
"assets/svg/ic_more.svg"
,
height:
30
),
onTap:
()
{
),
_showOptionsSheet
(
context
);
),
},
backgroundColor:
AppColors
.
scaffold_bg_color
,
child:
SvgPicture
.
asset
(
"assets/svg/ic_more.svg"
,
height:
30
),
body:
Container
(
child:
SingleChildScrollView
(
child:
Container
(
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
),
),
margin:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
padding:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
),
body:
Container
(
child:
Column
(
child:
SingleChildScrollView
(
children:
[
child:
Container
(
Row
(
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
margin:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
),
padding:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
),
child:
Column
(
children:
[
children:
[
Row
(
Expanded
(
children:
[
flex:
1
,
Expanded
(
child:
Container
(
flex:
1
,
height:
50
,
width:
35
,
padding:
EdgeInsets
.
all
(
8.0
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFE6F6FF
),
borderRadius:
BorderRadius
.
circular
(
8
),
),
child:
SvgPicture
.
asset
(
"assets/svg/se_block_head.svg"
,
),
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
4
,
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
leadDetails
.
name
??
"-"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
],
),
),
),
SizedBox
(
width:
10
),
if
(
provider
.
showEditButton
==
"1"
)
Expanded
(
flex:
1
,
child:
InkResponse
(
onTap:
()
async
{
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
EditAccountDetails
(
leadID:
leadDetails
.
id
,
mode:
widget
.
mode
,
accountID:
leadDetails
.
accId
,
companyName:
leadDetails
.
name
,
),
),
);
if
(
res
==
true
)
{
provider
.
crmLeadDetailsAPIFunction
(
context
,
widget
.
leadId
,
widget
.
mode
,
);
}
},
child:
Container
(
child:
Container
(
height:
50
,
height:
32
,
width:
3
5
,
width:
3
0
,
padding:
EdgeInsets
.
all
(
8.0
),
padding:
EdgeInsets
.
all
(
8.0
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFE6F6FF
),
borderRadius:
BorderRadius
.
circular
(
8
),
),
child:
SvgPicture
.
asset
(
child:
SvgPicture
.
asset
(
"assets/svg/
se_block_head
.svg"
,
"assets/svg/
crm_contact_edit
.svg"
,
),
),
),
),
),
),
SizedBox
(
width:
10
),
),
],
),
Divider
(
thickness:
0.5
,
color:
Color
(
0xFFD7D7D7
)),
...
List
.
generate
(
totalSubHeadings
.
length
,
(
j
)
{
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
Expanded
(
flex:
4
,
child:
Text
(
child:
SizedBox
(
totalHeadings
[
j
],
child:
Column
(
style:
TextStyle
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
fontFamily:
"JakartaMedium"
,
children:
[
fontSize:
14
,
Text
(
color:
AppColors
.
semi_black
,
leadDetails
.
name
??
"-"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
],
),
),
),
),
),
),
SizedBox
(
width:
10
),
if
(
provider
.
showEditButton
==
"1"
)
Expanded
(
Expanded
(
flex:
1
,
child:
InkResponse
(
child:
InkResponse
(
onTap:
()
async
{
child:
var
res
=
await
Navigator
.
push
(
totalHeadings
[
j
]
==
"Lead Age"
context
,
?
Tooltip
(
MaterialPageRoute
(
triggerMode:
TooltipTriggerMode
.
tap
,
builder:
(
context
)
=>
EditAccountDetails
(
message:
leadID:
leadDetails
.
id
,
"
${provider.leadDetails.createdDatetime}
"
,
mode:
widget
.
mode
,
child:
Text
(
accountID:
leadDetails
.
accId
,
totalSubHeadings
[
j
]
==
""
companyName:
leadDetails
.
name
,
?
"-"
:
totalSubHeadings
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
decorationColor:
AppColors
.
grey_semi
,
decoration:
TextDecoration
.
underline
,
),
),
),
),
)
);
:
Text
(
if
(
res
==
true
){
totalSubHeadings
[
j
]
==
""
provider
.
crmLeadDetailsAPIFunction
(
context
,
widget
.
leadId
,
widget
.
mode
);
?
"-"
}
:
totalSubHeadings
[
j
],
},
style:
TextStyle
(
child:
Container
(
fontSize:
14
,
height:
32
,
color:
Color
(
0xFF818181
),
width:
30
,
),
padding:
EdgeInsets
.
all
(
8.0
),
),
child:
SvgPicture
.
asset
(
"assets/svg/crm_contact_edit.svg"
,
),
),
),
),
),
),
],
],
),
),
Divider
(
thickness:
0.5
,
color:
Color
(
0xFFD7D7D7
)),
);
...
List
.
generate
(
totalSubHeadings
.
length
,
(
j
)
{
}),
return
Container
(
InkResponse
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
),
onTap:
()
async
{
child:
Row
(
provider
.
showMoreDetails
=
!
provider
.
showMoreDetails
;
crossAxisAlignment:
CrossAxisAlignment
.
start
,
},
children:
[
child:
Container
(
Expanded
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
child:
Text
(
child:
Row
(
totalHeadings
[
j
],
crossAxisAlignment:
CrossAxisAlignment
.
center
,
style:
TextStyle
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
fontFamily:
"JakartaMedium"
,
children:
[
fontSize:
14
,
Text
(
color:
AppColors
.
semi_black
,
provider
.
showMoreDetails
),
?
"- Show Less"
),
:
"+ More Details"
,
),
style:
TextStyle
(
Expanded
(
fontFamily:
"JakartaMedium"
,
child:
InkResponse
(
fontSize:
14
,
child:
color:
AppColors
.
app_blue
,
totalHeadings
[
j
]
==
"Lead Age"
),
?
Tooltip
(
triggerMode:
TooltipTriggerMode
.
tap
,
message:
"
${provider.leadDetails.createdDatetime}
"
,
child:
Text
(
totalSubHeadings
[
j
]
==
""
?
"-"
:
totalSubHeadings
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
decorationColor:
AppColors
.
grey_semi
,
decoration:
TextDecoration
.
underline
,
),
),
)
:
Text
(
totalSubHeadings
[
j
]
==
""
?
"-"
:
totalSubHeadings
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
),
),
),
),
],
),
);
}),
InkResponse
(
onTap:
()
async
{
provider
.
showMoreDetails
=
!
provider
.
showMoreDetails
;
},
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
,
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
Text
(
provider
.
showMoreDetails
?
"- Show Less"
:
"+ More Details"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
app_blue
,
),
),
],
),
),
)
,
]
,
),
),
]
,
)
,
),
),
)
,
]
,
),
),
),
),
),
),
),
),
onWillPop:
()
{
return
onBackPressed
(
context
);
},
);
);
},
},
);
);
...
@@ -336,7 +363,10 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
...
@@ -336,7 +363,10 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
left:
15
,
left:
15
,
right:
15
,
right:
15
,
top:
10
,
top:
10
,
),
padding:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,),
),
padding:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
),
child:
SingleChildScrollView
(
child:
SingleChildScrollView
(
child:
Column
(
child:
Column
(
...
@@ -345,19 +375,19 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
...
@@ -345,19 +375,19 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
SizedBox
(
height:
15
),
SizedBox
(
height:
15
),
...
List
.
generate
(
assetnames
.
length
,
(
index
)
{
...
List
.
generate
(
assetnames
.
length
,
(
index
)
{
return
ListTile
(
return
ListTile
(
onTap:
()
{
onTap:
()
{
Navigator
.
pop
(
context
,
true
);
Navigator
.
pop
(
context
,
true
);
switch
(
index
)
{
switch
(
index
)
{
case
0
:
case
0
:
Navigator
.
push
(
Navigator
.
push
(
context
,
context
,
MaterialPageRoute
(
MaterialPageRoute
(
builder:
(
context
)
=>
Productdetails
(
builder:
leadID:
provider
.
leadDetails
.
id
,
(
context
)
=>
Productdetails
(
mode:
widget
.
mode
,
leadID:
provider
.
leadDetails
.
id
,
),
mode:
widget
.
mode
,
),
),
),
);
);
break
;
break
;
...
@@ -418,8 +448,6 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
...
@@ -418,8 +448,6 @@ class _LeadDetailsByModeState extends State<LeadDetailsByMode> {
),
),
);
);
}),
}),
],
],
),
),
),
),
...
...
lib/screens/crm/LeadListByMode.dart
View file @
c92f4c79
import
'dart:io'
;
import
'dart:io'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter/services.dart'
;
...
@@ -10,6 +11,7 @@ import 'package:generp/Models/crmModels/GetSourceOnReferenceResponse.dart';
...
@@ -10,6 +11,7 @@ import 'package:generp/Models/crmModels/GetSourceOnReferenceResponse.dart';
import
'package:generp/Models/crmModels/GetSubLocOnDistrictResponse.dart'
;
import
'package:generp/Models/crmModels/GetSubLocOnDistrictResponse.dart'
;
import
'package:generp/Models/crmModels/LeadListViewResponse.dart'
;
import
'package:generp/Models/crmModels/LeadListViewResponse.dart'
;
import
'package:generp/Notifiers/crmProvider/LeadListProvider.dart'
;
import
'package:generp/Notifiers/crmProvider/LeadListProvider.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:provider/provider.dart'
;
import
'package:provider/provider.dart'
;
import
'package:generp/screens/screensExports.dart'
;
import
'package:generp/screens/screensExports.dart'
;
...
@@ -36,11 +38,17 @@ class Leadlistbymode extends StatefulWidget {
...
@@ -36,11 +38,17 @@ class Leadlistbymode extends StatefulWidget {
class
_LeadlistbymodeState
extends
State
<
Leadlistbymode
>
{
class
_LeadlistbymodeState
extends
State
<
Leadlistbymode
>
{
Dropdowntheme
ddtheme
=
Dropdowntheme
();
Dropdowntheme
ddtheme
=
Dropdowntheme
();
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
@override
@override
void
initState
()
{
void
initState
()
{
// TODO: implement initState
// TODO: implement initState
super
.
initState
();
super
.
initState
();
_connectivity
.
initialise
();
_connectivity
.
myStream
.
listen
((
source
)
{
setState
(()
=>
_source
=
source
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
final
provider
=
Provider
.
of
<
Leadlistprovider
>(
context
,
listen:
false
);
final
provider
=
Provider
.
of
<
Leadlistprovider
>(
context
,
listen:
false
);
provider
.
crmLeadListViewAPIFunction
(
context
,
widget
.
mode
);
provider
.
crmLeadListViewAPIFunction
(
context
,
widget
.
mode
);
...
@@ -78,40 +86,67 @@ class _LeadlistbymodeState extends State<Leadlistbymode> {
...
@@ -78,40 +86,67 @@ class _LeadlistbymodeState extends State<Leadlistbymode> {
});
});
}
}
@override
void
dispose
()
{
// TODO: implement dispose
super
.
dispose
();
_connectivity
.
disposeStream
();
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
case
ConnectivityResult
.
mobile
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
wifi
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
none
:
default
:
connection
=
'Offline'
;
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer
<
Leadlistprovider
>(
return
Consumer
<
Leadlistprovider
>(
builder:
(
context
,
provider
,
child
)
{
builder:
(
context
,
provider
,
child
)
{
final
crmLists
=
provider
.
crmLeadList
;
final
crmLists
=
provider
.
crmLeadList
;
return
WillPopScope
(
return
Scaffold
(
onWillPop:
()
{
resizeToAvoidBottomInset:
true
,
return
onBackPressed
(
context
);
appBar:
appbar2
(
},
context
,
child:
SafeArea
(
widget
.
pageTitleName
,
top:
false
,
provider
.
resetForm
,
bottom:
Platform
.
isIOS
?
false
:
true
,
Row
(
child:
Scaffold
(
children:
[
resizeToAvoidBottomInset:
true
,
InkResponse
(
appBar:
appbar2
(
onTap:
()
async
{
context
,
_showFilterSheet
(
context
);
widget
.
pageTitleName
,
},
provider
.
resetForm
,
child:
SvgPicture
.
asset
(
Row
(
"assets/svg/filter_ic.svg"
,
children:
[
height:
25
,
InkResponse
(
),
onTap:
()
async
{
_showFilterSheet
(
context
);
},
child:
SvgPicture
.
asset
(
"assets/svg/filter_ic.svg"
,
height:
25
,
),
),
],
),
),
),
],
backgroundColor:
AppColors
.
scaffold_bg_color
,
),
body:
provider
.
isLoading
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
body:
provider
.
isLoading
?
Center
(
?
Center
(
child:
CircularProgressIndicator
.
adaptive
(
child:
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
<
Color
>(
valueColor:
AlwaysStoppedAnimation
<
Color
>(
...
@@ -130,9 +165,7 @@ class _LeadlistbymodeState extends State<Leadlistbymode> {
...
@@ -130,9 +165,7 @@ class _LeadlistbymodeState extends State<Leadlistbymode> {
itemBuilder:
(
context
,
index
)
{
itemBuilder:
(
context
,
index
)
{
if
(
crmLists
.
isEmpty
)
{
if
(
crmLists
.
isEmpty
)
{
return
SizedBox
(
return
SizedBox
(
child:
Center
(
child:
Center
(
child:
Text
(
"No Data Available"
)),
child:
Text
(
"No Data Available"
),
),
);
);
}
}
return
Container
(
return
Container
(
...
@@ -160,8 +193,9 @@ class _LeadlistbymodeState extends State<Leadlistbymode> {
...
@@ -160,8 +193,9 @@ class _LeadlistbymodeState extends State<Leadlistbymode> {
padding:
EdgeInsets
.
all
(
8.0
),
padding:
EdgeInsets
.
all
(
8.0
),
decoration:
BoxDecoration
(
decoration:
BoxDecoration
(
color:
Color
(
0xFFE6F6FF
),
color:
Color
(
0xFFE6F6FF
),
borderRadius:
borderRadius:
BorderRadius
.
circular
(
BorderRadius
.
circular
(
8
),
8
,
),
),
),
child:
SvgPicture
.
asset
(
child:
SvgPicture
.
asset
(
"assets/svg/se_block_head.svg"
,
"assets/svg/se_block_head.svg"
,
...
@@ -196,8 +230,9 @@ class _LeadlistbymodeState extends State<Leadlistbymode> {
...
@@ -196,8 +230,9 @@ class _LeadlistbymodeState extends State<Leadlistbymode> {
vertical:
10
,
vertical:
10
,
),
),
decoration:
BoxDecoration
(
decoration:
BoxDecoration
(
borderRadius:
borderRadius:
BorderRadius
.
circular
(
BorderRadius
.
circular
(
8
),
8
,
),
color:
Color
(
0xFFE3FFE0
),
color:
Color
(
0xFFE3FFE0
),
),
),
child:
Center
(
child:
Center
(
...
@@ -234,9 +269,7 @@ class _LeadlistbymodeState extends State<Leadlistbymode> {
...
@@ -234,9 +269,7 @@ class _LeadlistbymodeState extends State<Leadlistbymode> {
crmLists
[
index
].
openStatus
,
crmLists
[
index
].
openStatus
,
];
];
return
Container
(
return
Container
(
padding:
EdgeInsets
.
symmetric
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
vertical:
5
,
),
child:
Row
(
child:
Row
(
crossAxisAlignment:
crossAxisAlignment:
CrossAxisAlignment
.
start
,
CrossAxisAlignment
.
start
,
...
@@ -283,9 +316,7 @@ class _LeadlistbymodeState extends State<Leadlistbymode> {
...
@@ -283,9 +316,7 @@ class _LeadlistbymodeState extends State<Leadlistbymode> {
);
);
},
},
child:
Container
(
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
vertical:
5
,
),
child:
Row
(
child:
Row
(
crossAxisAlignment:
crossAxisAlignment:
CrossAxisAlignment
.
center
,
CrossAxisAlignment
.
center
,
...
@@ -316,8 +347,6 @@ class _LeadlistbymodeState extends State<Leadlistbymode> {
...
@@ -316,8 +347,6 @@ class _LeadlistbymodeState extends State<Leadlistbymode> {
),
),
)
)
:
Emptywidget
(
context
),
:
Emptywidget
(
context
),
),
),
);
);
},
},
);
);
...
...
lib/screens/crm/NearbyOpenLeads.dart
View file @
c92f4c79
import
'dart:io'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:flutter/foundation.dart'
;
import
'package:flutter/foundation.dart'
;
import
'package:flutter/gestures.dart'
;
import
'package:flutter/gestures.dart'
;
...
@@ -5,6 +8,7 @@ import 'package:flutter/material.dart';
...
@@ -5,6 +8,7 @@ import 'package:flutter/material.dart';
import
'package:flutter_svg/svg.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:generp/Notifiers/NearByGeneratorsProvider.dart'
;
import
'package:generp/Notifiers/NearByGeneratorsProvider.dart'
;
import
'package:generp/Utils/app_colors.dart'
;
import
'package:generp/Utils/app_colors.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:generp/Utils/commonWidgets.dart'
;
import
'package:generp/Utils/commonWidgets.dart'
;
import
'package:google_maps_flutter/google_maps_flutter.dart'
;
import
'package:google_maps_flutter/google_maps_flutter.dart'
;
import
'package:interactive_slider/interactive_slider.dart'
;
import
'package:interactive_slider/interactive_slider.dart'
;
...
@@ -21,37 +25,85 @@ class NearbyOpenLeads extends StatefulWidget {
...
@@ -21,37 +25,85 @@ class NearbyOpenLeads extends StatefulWidget {
}
}
class
_NearbyOpenLeadsState
extends
State
<
NearbyOpenLeads
>
{
class
_NearbyOpenLeadsState
extends
State
<
NearbyOpenLeads
>
{
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
Dropdowntheme
ddtheme
=
Dropdowntheme
();
Dropdowntheme
ddtheme
=
Dropdowntheme
();
@override
@override
void
initState
()
{
void
initState
()
{
// TODO: implement initState
// TODO: implement initState
super
.
initState
();
super
.
initState
();
_connectivity
.
initialise
();
_connectivity
.
myStream
.
listen
((
source
)
{
setState
(()
=>
_source
=
source
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
_
)
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
_
)
{
final
provider
=
Provider
.
of
<
crmNearbyOpenLeadsProvider
>(
context
,
listen:
false
);
final
provider
=
Provider
.
of
<
crmNearbyOpenLeadsProvider
>(
context
,
listen:
false
,
);
provider
.
getLocationPermission
(
context
);
provider
.
getLocationPermission
(
context
);
},);
});
}
@override
void
dispose
()
{
// TODO: implement dispose
super
.
dispose
();
_connectivity
.
disposeStream
();
}
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
case
ConnectivityResult
.
mobile
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
wifi
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
none
:
default
:
connection
=
'Offline'
;
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
Widget
_scaffold
(
BuildContext
context
)
{
debugPrint
(
"Nearbygenerators widget rebuilt"
);
debugPrint
(
"Nearbygenerators widget rebuilt"
);
return
Consumer
<
crmNearbyOpenLeadsProvider
>(
builder:
(
context
,
provider
,
child
)
{
return
Consumer
<
crmNearbyOpenLeadsProvider
>(
var
sendWidget
=
GestureDetector
(
builder:
(
context
,
provider
,
child
)
{
var
sendWidget
=
GestureDetector
(
onTap:
()
{
onTap:
()
{
_showFilterBottomSheet
(
context
);
_showFilterBottomSheet
(
context
);
},
},
child:
SvgPicture
.
asset
(
"assets/svg/filter_ic.svg"
,
height:
25
,));
child:
SvgPicture
.
asset
(
"assets/svg/filter_ic.svg"
,
height:
25
),
);
return
WillPopScope
(
return
Scaffold
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
Scaffold
(
resizeToAvoidBottomInset:
true
,
resizeToAvoidBottomInset:
true
,
appBar:
appbar2
(
context
,
"Nearby Leads (Open)"
,
provider
.
resetAll
,
sendWidget
),
appBar:
appbar2
(
context
,
"Nearby Leads (Open)"
,
provider
.
resetAll
,
sendWidget
,
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
backgroundColor:
AppColors
.
scaffold_bg_color
,
body:
SafeArea
(
body:
SafeArea
(
child:
Container
(
child:
Container
(
child:
SingleChildScrollView
(
child:
SingleChildScrollView
(
child:
Column
(
child:
Column
(
children:
[
children:
[
ClipRRect
(
ClipRRect
(
// Apply border radius using ClipRRect
// Apply border radius using ClipRRect
...
@@ -62,32 +114,40 @@ class _NearbyOpenLeadsState extends State<NearbyOpenLeads> {
...
@@ -62,32 +114,40 @@ class _NearbyOpenLeadsState extends State<NearbyOpenLeads> {
// padding: EdgeInsets.fromLTRB(10, 20, 10, 20),
// padding: EdgeInsets.fromLTRB(10, 20, 10, 20),
child:
Container
(
child:
Container
(
height:
MediaQuery
.
of
(
context
).
size
.
height
,
height:
MediaQuery
.
of
(
context
).
size
.
height
,
child:
Stack
(
children:
[
child:
Stack
(
GoogleMap
(
children:
[
myLocationEnabled:
true
,
GoogleMap
(
zoomGesturesEnabled:
true
,
myLocationEnabled:
true
,
zoomControlsEnabled:
true
,
zoomGesturesEnabled:
true
,
gestureRecognizers:
{
zoomControlsEnabled:
true
,
Factory
<
OneSequenceGestureRecognizer
>(()
=>
EagerGestureRecognizer
()),
gestureRecognizers:
{
Factory
<
PanGestureRecognizer
>(()
=>
PanGestureRecognizer
()),
Factory
<
OneSequenceGestureRecognizer
>(
Factory
<
ScaleGestureRecognizer
>(()
=>
ScaleGestureRecognizer
()),
// Prioritize pinch-to-zoom
()
=>
EagerGestureRecognizer
(),
},
),
initialCameraPosition:
CameraPosition
(
Factory
<
PanGestureRecognizer
>(
()
=>
PanGestureRecognizer
(),
),
Factory
<
ScaleGestureRecognizer
>(
()
=>
ScaleGestureRecognizer
(),
),
// Prioritize pinch-to-zoom
},
initialCameraPosition:
CameraPosition
(
target:
provider
.
startLocation
,
target:
provider
.
startLocation
,
zoom:
14.0
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
);
},
),
]),
),
),
),
),
],
],
...
@@ -95,12 +155,11 @@ class _NearbyOpenLeadsState extends State<NearbyOpenLeads> {
...
@@ -95,12 +155,11 @@ class _NearbyOpenLeadsState extends State<NearbyOpenLeads> {
),
),
),
),
),
),
)
,
)
;
);
},
},
);
);
}
}
Future
<
void
>
_showFilterBottomSheet
(
BuildContext
context
)
{
Future
<
void
>
_showFilterBottomSheet
(
BuildContext
context
)
{
return
showModalBottomSheet
(
return
showModalBottomSheet
(
useSafeArea:
true
,
useSafeArea:
true
,
...
@@ -115,123 +174,131 @@ class _NearbyOpenLeadsState extends State<NearbyOpenLeads> {
...
@@ -115,123 +174,131 @@ class _NearbyOpenLeadsState extends State<NearbyOpenLeads> {
builder:
(
context
,
setState
)
{
builder:
(
context
,
setState
)
{
return
SafeArea
(
return
SafeArea
(
child:
Consumer
<
crmNearbyOpenLeadsProvider
>(
child:
Consumer
<
crmNearbyOpenLeadsProvider
>(
builder:
(
context
,
provider
,
child
)
{
builder:
(
context
,
provider
,
child
)
{
return
Container
(
return
Container
(
margin:
EdgeInsets
.
only
(
margin:
EdgeInsets
.
only
(
bottom:
15
,
bottom:
15
,
left:
15
,
left:
15
,
right:
15
,
right:
15
,
top:
15
,
top:
15
,
),
padding:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,),
),
padding:
EdgeInsets
.
only
(
child:
SingleChildScrollView
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
child:
Column
(
),
mainAxisSize:
MainAxisSize
.
min
,
children:
[
child:
SingleChildScrollView
(
Column
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisSize:
MainAxisSize
.
min
,
children:
[
children:
[
Text
(
Column
(
"Filter"
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
style:
TextStyle
(
children:
[
color:
AppColors
.
app_blue
,
Text
(
fontFamily:
"JakartaSemiBold"
,
"Filter"
,
fontSize:
16
,
style:
TextStyle
(
),
color:
AppColors
.
app_blue
,
fontFamily:
"JakartaSemiBold"
,
fontSize:
16
,
),
),
SizedBox
(
height:
15
),
),
SizedBox
(
height:
15
),
Row
(
Row
(
children:
[
children:
[
Text
(
Text
(
"Radius"
,
"Radius"
,
style:
TextStyle
(
style:
TextStyle
(
fontSize:
18.0
,
fontSize:
18.0
,
fontWeight:
FontWeight
.
w500
,
fontWeight:
FontWeight
.
w500
,
),
),
),
Spacer
(
),
),
Text
(
Spacer
(),
'
${provider.currentValue.toStringAsFixed(2)}
KM'
,
Text
(
style:
TextStyle
(
'
${provider.currentValue.toStringAsFixed(2)}
KM'
,
fontSize:
18.0
,
style:
TextStyle
(
font
Weight:
FontWeight
.
w50
0
,
font
Size:
18.
0
,
)
,
fontWeight:
FontWeight
.
w500
,
),
),
],
),
],
),
InteractiveSlider
(
min:
1.0
,
max:
50.0
,
padding:
EdgeInsets
.
symmetric
(
horizontal:
0
,
vertical:
0
,
),
),
InteractiveSlider
(
iconSize:
0.0
,
min:
1.0
,
max:
50.0
,
enabled:
true
,
padding:
EdgeInsets
.
symmetric
(
horizontal:
0
,
vertical:
0
),
// backgroundColor: AppColors.app_blue,
iconSize:
0.0
,
foregroundColor:
AppColors
.
app_blue
,
segmentDividerColor:
Color
(
0xFFF6F6F8
),
enabled:
true
,
onChanged:
(
value
)
{
provider
.
currentValue
=
value
;
// backgroundColor: AppColors.app_blue,
// provider.debounce(() {
foregroundColor:
AppColors
.
app_blue
,
// provider.LoadNearbyOpenLeadsAPI(context);
segmentDividerColor:
Color
(
0xFFF6F6F8
),
// }, Duration(milliseconds: 200));
onChanged:
(
value
)
{
},
provider
.
currentValue
=
value
;
),
// provider.debounce(() {
// Slider(
// provider.LoadNearbyOpenLeadsAPI(context);
// value: provider.currentValue,
// }, Duration(milliseconds: 200));
// max: 100,
// divisions: 100,
//
// label: provider.currentValue.toStringAsFixed(2),
// inactiveColor: Color(0xFFD7D7D7),
// activeColor: AppColors.cyan_blue,
// onChanged: (value) {
// provider.currentValue = value;
// provider.debounce(() {
// provider.LoadNearbyOpenLeadsAPI(context);
// }, Duration(milliseconds: 200));
// },
// ),
SizedBox
(
height:
30.0
),
Container
(
child:
InkWell
(
onTap:
()
{
provider
.
debounce
(()
{
provider
.
LoadNearbyOpenLeadsAPI
(
context
,
provider
.
currentValue
,
);
Navigator
.
pop
(
context
);
},
Duration
(
milliseconds:
500
));
},
},
),
child:
Container
(
// Slider(
alignment:
Alignment
.
center
,
// value: provider.currentValue,
height:
45
,
// max: 100,
margin:
EdgeInsets
.
only
(
// divisions: 100,
left:
15.0
,
//
right:
15.0
,
// label: provider.currentValue.toStringAsFixed(2),
),
// inactiveColor: Color(0xFFD7D7D7),
decoration:
BoxDecoration
(
// activeColor: AppColors.cyan_blue,
borderRadius:
BorderRadius
.
circular
(
14.0
),
// onChanged: (value) {
color:
AppColors
.
app_blue
,
// provider.currentValue = value;
),
// provider.debounce(() {
child:
Text
(
// provider.LoadNearbyOpenLeadsAPI(context);
"Search"
,
// }, Duration(milliseconds: 200));
textAlign:
TextAlign
.
center
,
// },
style:
TextStyle
(
// ),
fontFamily:
'JakartaMedium'
,
SizedBox
(
height:
30.0
),
color:
Colors
.
white
,
Container
(
child:
InkWell
(
onTap:
()
{
provider
.
debounce
(()
{
provider
.
LoadNearbyOpenLeadsAPI
(
context
,
provider
.
currentValue
);
Navigator
.
pop
(
context
);
},
Duration
(
milliseconds:
500
));
},
child:
Container
(
alignment:
Alignment
.
center
,
height:
45
,
margin:
EdgeInsets
.
only
(
left:
15.0
,
right:
15.0
,
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
14.0
),
color:
AppColors
.
app_blue
),
child:
Text
(
"Search"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
fontFamily:
'JakartaMedium'
,
color:
Colors
.
white
),
),
),
),
),
),
),
),
),
]
,
)
,
)
,
]
,
]
,
)
,
)
,
]
,
),
),
);
),
}
);
},
),
),
);
);
},
},
...
...
lib/screens/crm/ProspectDetailsByMode.dart
View file @
c92f4c79
import
'dart:io'
;
import
'dart:io'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:generp/Notifiers/crmProvider/crmEditProspectAccountProvider.dart'
;
import
'package:generp/Notifiers/crmProvider/crmEditProspectAccountProvider.dart'
;
import
'package:generp/Notifiers/crmProvider/crmLeadDetailsProvider.dart'
;
import
'package:generp/Notifiers/crmProvider/crmLeadDetailsProvider.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:generp/Utils/dropdownTheme.dart'
;
import
'package:generp/Utils/dropdownTheme.dart'
;
import
'package:generp/screens/crm/prospectContactDetails.dart'
;
import
'package:generp/screens/crm/prospectContactDetails.dart'
;
import
'package:generp/screens/crm/prospectLeadDetails.dart'
;
import
'package:generp/screens/crm/prospectLeadDetails.dart'
;
...
@@ -39,11 +41,17 @@ class ProspectDetailsByMode extends StatefulWidget {
...
@@ -39,11 +41,17 @@ class ProspectDetailsByMode extends StatefulWidget {
class
ProspectDetailsByModeState
extends
State
<
ProspectDetailsByMode
>
{
class
ProspectDetailsByModeState
extends
State
<
ProspectDetailsByMode
>
{
Dropdowntheme
ddtheme
=
Dropdowntheme
();
Dropdowntheme
ddtheme
=
Dropdowntheme
();
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
@override
@override
void
initState
()
{
void
initState
()
{
// TODO: implement initState
// TODO: implement initState
super
.
initState
();
super
.
initState
();
_connectivity
.
initialise
();
_connectivity
.
myStream
.
listen
((
source
)
{
setState
(()
=>
_source
=
source
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
final
provider
=
Provider
.
of
<
crmProspectDetailsProvider
>(
final
provider
=
Provider
.
of
<
crmProspectDetailsProvider
>(
context
,
context
,
...
@@ -63,6 +71,13 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
...
@@ -63,6 +71,13 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
});
});
}
}
@override
void
dispose
()
{
// TODO: implement dispose
super
.
dispose
();
_connectivity
.
disposeStream
();
}
void
prefill
()
async
{
void
prefill
()
async
{
final
editProvider
=
Provider
.
of
<
Crmeditprospectaccountprovider
>(
final
editProvider
=
Provider
.
of
<
Crmeditprospectaccountprovider
>(
context
,
context
,
...
@@ -160,6 +175,32 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
...
@@ -160,6 +175,32 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
case
ConnectivityResult
.
mobile
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
wifi
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
none
:
default
:
connection
=
'Offline'
;
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer2
<
return
Consumer2
<
crmProspectDetailsProvider
,
crmProspectDetailsProvider
,
Crmeditprospectaccountprovider
Crmeditprospectaccountprovider
...
@@ -167,184 +208,174 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
...
@@ -167,184 +208,174 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
builder:
(
context
,
provider
,
editProvider
,
child
)
{
builder:
(
context
,
provider
,
editProvider
,
child
)
{
var
leadDetails
=
provider
.
accountDetails
;
var
leadDetails
=
provider
.
accountDetails
;
return
WillPopScope
(
return
Scaffold
(
child:
SafeArea
(
resizeToAvoidBottomInset:
true
,
top:
false
,
appBar:
appbar2
(
bottom:
Platform
.
isIOS
?
false
:
true
,
context
,
child:
Scaffold
(
widget
.
pageTitleName
,
resizeToAvoidBottomInset:
true
,
provider
.
resetAll
,
appBar:
appbar2
(
InkResponse
(
context
,
onTap:
()
{
widget
.
pageTitleName
,
_showOptionsSheet
(
context
);
provider
.
resetAll
,
},
InkResponse
(
child:
SvgPicture
.
asset
(
"assets/svg/ic_more.svg"
,
height:
30
),
onTap:
()
{
),
_showOptionsSheet
(
context
);
),
},
backgroundColor:
AppColors
.
scaffold_bg_color
,
child:
SvgPicture
.
asset
(
"assets/svg/ic_more.svg"
,
height:
30
),
body:
Container
(
child:
SingleChildScrollView
(
child:
Container
(
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
),
),
margin:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
padding:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
),
body:
Container
(
child:
Column
(
child:
SingleChildScrollView
(
children:
[
child:
Container
(
Row
(
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
BorderRadius
.
circular
(
16
),
),
margin:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
),
padding:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
),
child:
Column
(
children:
[
children:
[
Row
(
Expanded
(
children:
[
flex:
1
,
Expanded
(
child:
Container
(
flex:
1
,
height:
50
,
width:
35
,
padding:
EdgeInsets
.
all
(
8.0
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFE6F6FF
),
borderRadius:
BorderRadius
.
circular
(
8
),
),
child:
SvgPicture
.
asset
(
"assets/svg/se_block_head.svg"
,
),
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
4
,
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
"
${leadDetails.salutationName ?? "-"}
${leadDetails.name ?? "-"}
"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
],
),
),
),
if
(
provider
.
showTransferAccount
==
"1"
)
...[
SizedBox
(
width:
5
),
Expanded
(
flex:
1
,
child:
InkResponse
(
onTap:
()
async
{
_showTransferAccountSheet
(
context
,
provider
.
accountDetails
.
id
!,
);
},
child:
Container
(
child:
Container
(
height:
50
,
height:
32
,
width:
3
5
,
width:
3
0
,
padding:
EdgeInsets
.
all
(
8.0
),
padding:
EdgeInsets
.
all
(
8.0
),
decoration:
BoxDecoration
(
color:
Color
(
0xFFE6F6FF
),
borderRadius:
BorderRadius
.
circular
(
8
),
),
child:
SvgPicture
.
asset
(
child:
SvgPicture
.
asset
(
"assets/svg/
se_block_head
.svg"
,
"assets/svg/
transfer_ac
.svg"
,
),
),
),
),
),
),
SizedBox
(
width:
10
),
),
Expanded
(
],
flex:
4
,
SizedBox
(
width:
5
),
child:
SizedBox
(
Expanded
(
child:
Column
(
flex:
1
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
child:
InkResponse
(
children:
[
onTap:
()
async
{
Text
(
editProvider
.
checkDropDownValues
();
"
${leadDetails.salutationName ?? "-"}
${leadDetails.name ?? "-"}
"
,
prefill
();
style:
TextStyle
(
await
_showEditAccountSheet
(
fontFamily:
"JakartaMedium"
,
context
,
fontSize:
14
,
provider
.
accountDetails
.
id
!,
color:
AppColors
.
semi_black
,
);
),
},
),
child:
Container
(
],
height:
32
,
),
width:
30
,
padding:
EdgeInsets
.
all
(
8.0
),
child:
SvgPicture
.
asset
(
"assets/svg/crm_contact_edit.svg"
,
),
),
),
),
),
if
(
provider
.
showTransferAccount
==
"1"
)...[
),
SizedBox
(
width:
5
),
],
),
Divider
(
thickness:
0.5
,
color:
Color
(
0xFFD7D7D7
)),
...
List
.
generate
(
provider
.
subHeadings
.
length
,
(
j
)
{
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
7
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
Expanded
(
flex:
1
,
child:
Text
(
child:
InkResponse
(
provider
.
Headings
[
j
],
onTap:
()
async
{
style:
TextStyle
(
_showTransferAccountSheet
(
fontFamily:
"JakartaMedium"
,
context
,
fontSize:
14
,
provider
.
accountDetails
.
id
!,
color:
AppColors
.
semi_black
,
);
},
child:
Container
(
height:
32
,
width:
30
,
padding:
EdgeInsets
.
all
(
8.0
),
child:
SvgPicture
.
asset
(
"assets/svg/transfer_ac.svg"
,
),
),
),
),
),
),
),
],
SizedBox
(
width:
5
),
Expanded
(
Expanded
(
flex:
1
,
child:
InkResponse
(
child:
InkResponse
(
onTap:
()
async
{
child:
editProvider
.
checkDropDownValues
();
provider
.
Headings
[
j
]
==
"Lead Age"
prefill
();
?
Tooltip
(
await
_showEditAccountSheet
(
triggerMode:
TooltipTriggerMode
.
tap
,
context
,
provider
.
accountDetails
.
id
!,
message:
);
"
${provider.accountDetails.createdDatetime}
"
,
},
child:
Text
(
child:
Container
(
provider
.
subHeadings
[
j
]
==
""
height:
32
,
?
"-"
width:
30
,
:
provider
.
subHeadings
[
j
],
padding:
EdgeInsets
.
all
(
8.0
),
style:
TextStyle
(
child:
SvgPicture
.
asset
(
fontSize:
14
,
"assets/svg/crm_contact_edit.svg"
,
color:
Color
(
0xFF818181
),
),
decorationColor:
),
AppColors
.
grey_semi
,
decoration:
TextDecoration
.
underline
,
),
),
)
:
Text
(
provider
.
subHeadings
[
j
]
==
""
?
"-"
:
provider
.
subHeadings
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
),
),
),
),
),
),
],
],
),
),
Divider
(
thickness:
0.5
,
color:
Color
(
0xFFD7D7D7
)),
);
...
List
.
generate
(
provider
.
subHeadings
.
length
,
(
j
)
{
}),
return
Container
(
],
padding:
EdgeInsets
.
symmetric
(
vertical:
7
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
provider
.
Headings
[
j
],
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
),
Expanded
(
child:
InkResponse
(
child:
provider
.
Headings
[
j
]
==
"Lead Age"
?
Tooltip
(
triggerMode:
TooltipTriggerMode
.
tap
,
message:
"
${provider.accountDetails.createdDatetime}
"
,
child:
Text
(
provider
.
subHeadings
[
j
]
==
""
?
"-"
:
provider
.
subHeadings
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
decorationColor:
AppColors
.
grey_semi
,
decoration:
TextDecoration
.
underline
,
),
),
)
:
Text
(
provider
.
subHeadings
[
j
]
==
""
?
"-"
:
provider
.
subHeadings
[
j
],
style:
TextStyle
(
fontSize:
14
,
color:
Color
(
0xFF818181
),
),
),
),
),
],
),
);
}),
],
),
),
),
),
),
),
),
),
),
),
onWillPop:
()
{
return
onBackPressed
(
context
);
},
);
);
},
},
);
);
...
@@ -560,8 +591,11 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
...
@@ -560,8 +591,11 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
return
StatefulBuilder
(
return
StatefulBuilder
(
builder:
(
context
,
setState
)
{
builder:
(
context
,
setState
)
{
return
SafeArea
(
return
SafeArea
(
child:
Consumer2
<
Crmeditprospectaccountprovider
,
crmProspectDetailsProvider
>(
child:
Consumer2
<
builder:
(
context
,
provider
,
prosDetProvider
,
child
)
{
Crmeditprospectaccountprovider
,
crmProspectDetailsProvider
>(
builder:
(
context
,
provider
,
prosDetProvider
,
child
)
{
return
Container
(
return
Container
(
margin:
EdgeInsets
.
only
(
margin:
EdgeInsets
.
only
(
bottom:
15
,
bottom:
15
,
...
@@ -746,11 +780,11 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
...
@@ -746,11 +780,11 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
)
)
.
toList
(),
.
toList
(),
value:
value:
provider
.
districtsList
.
contains
(
provider
.
districtsList
.
contains
(
provider
.
selectedDistricts
,
provider
.
selectedDistricts
,
)
)
?
provider
.
selectedDistricts
?
provider
.
selectedDistricts
:
null
,
:
null
,
// value: provider.selectedDistricts,
// value: provider.selectedDistricts,
onChanged:
(
Districts
?
value
)
{
onChanged:
(
Districts
?
value
)
{
if
(
value
!=
null
)
{
if
(
value
!=
null
)
{
...
@@ -777,7 +811,11 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
...
@@ -777,7 +811,11 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
widget
.
mode
,
widget
.
mode
,
provider
.
selectedDistrictId
,
provider
.
selectedDistrictId
,
);
);
prosDetProvider
.
crmProspectDetailsAPIFunction
(
context
,
widget
.
leadId
);
prosDetProvider
.
crmProspectDetailsAPIFunction
(
context
,
widget
.
leadId
,
);
}
}
}
}
},
},
...
@@ -821,11 +859,11 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
...
@@ -821,11 +859,11 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
)
)
.
toList
(),
.
toList
(),
value:
value:
provider
.
subLocationsList
.
contains
(
provider
.
subLocationsList
.
contains
(
provider
.
selectedSubLocations
,
provider
.
selectedSubLocations
,
)
)
?
provider
.
selectedSubLocations
?
provider
.
selectedSubLocations
:
null
,
:
null
,
// value: provider.selectedSubLocations,
// value: provider.selectedSubLocations,
onChanged:
(
SubLocations
?
value
)
{
onChanged:
(
SubLocations
?
value
)
{
if
(
value
!=
null
)
{
if
(
value
!=
null
)
{
...
@@ -892,7 +930,6 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
...
@@ -892,7 +930,6 @@ class ProspectDetailsByModeState extends State<ProspectDetailsByMode> {
provider
.
selectedSubLocationId
,
provider
.
selectedSubLocationId
,
);
);
Navigator
.
pop
(
context
);
Navigator
.
pop
(
context
);
},
},
child:
Container
(
child:
Container
(
height:
45
,
height:
45
,
...
...
lib/screens/crm/ProspectListByMode.dart
View file @
c92f4c79
import
'dart:io'
;
import
'dart:io'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:generp/Utils/dropdownTheme.dart'
;
import
'package:generp/Utils/dropdownTheme.dart'
;
import
'package:provider/provider.dart'
;
import
'package:provider/provider.dart'
;
...
@@ -23,83 +25,113 @@ class ProspectListByMode extends StatefulWidget {
...
@@ -23,83 +25,113 @@ class ProspectListByMode extends StatefulWidget {
}
}
class
_ProspectListByModeState
extends
State
<
ProspectListByMode
>
{
class
_ProspectListByModeState
extends
State
<
ProspectListByMode
>
{
Dropdowntheme
ddtheme
=
Dropdowntheme
();
Dropdowntheme
ddtheme
=
Dropdowntheme
();
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
@override
@override
void
initState
()
{
void
initState
()
{
// TODO: implement initState
// TODO: implement initState
super
.
initState
();
super
.
initState
();
_connectivity
.
initialise
();
_connectivity
.
myStream
.
listen
((
source
)
{
setState
(()
=>
_source
=
source
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
final
provider
=
Provider
.
of
<
ProspectListProvider
>(
context
,
listen:
false
);
final
provider
=
Provider
.
of
<
ProspectListProvider
>(
provider
.
crmProspectListViewAPIFunction
(
context
,
widget
.
mode
);
provider
.
crmProspectListAPIFunction
(
context
,
context
,
widget
.
mode
,
listen:
false
,
""
,
);
);
provider
.
crmProspectListViewAPIFunction
(
context
,
widget
.
mode
);
provider
.
crmProspectListAPIFunction
(
context
,
widget
.
mode
,
""
);
});
});
}
}
@override
void
dispose
()
{
// TODO: implement dispose
super
.
dispose
();
_connectivity
.
disposeStream
();
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
case
ConnectivityResult
.
mobile
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
wifi
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
none
:
default
:
connection
=
'Offline'
;
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer
<
ProspectListProvider
>(
return
Consumer
<
ProspectListProvider
>(
builder:
(
context
,
provider
,
child
)
{
builder:
(
context
,
provider
,
child
)
{
final
crmLists
=
provider
.
accountList
;
final
crmLists
=
provider
.
accountList
;
return
WillPopScope
(
// ignore: deprecated_member_use
onWillPop:
()
{
return
Scaffold
(
return
onBackPressed
(
context
);
resizeToAvoidBottomInset:
true
,
},
appBar:
appbar2
(
child:
SafeArea
(
context
,
top:
false
,
widget
.
pageTitleName
,
bottom:
Platform
.
isIOS
?
false
:
true
,
provider
.
resetForm
,
child:
Scaffold
(
Row
(
resizeToAvoidBottomInset:
true
,
children:
[
appBar:
appbar2
(
InkResponse
(
context
,
onTap:
()
async
{
widget
.
pageTitleName
,
_showFilterSheet
(
context
);
provider
.
resetForm
,
},
Row
(
child:
SvgPicture
.
asset
(
children:
[
"assets/svg/filter_ic.svg"
,
InkResponse
(
height:
25
,
onTap:
()
async
{
_showFilterSheet
(
context
);
},
child:
SvgPicture
.
asset
(
"assets/svg/filter_ic.svg"
,
height:
25
,
),
),
],
),
),
),
),
backgroundColor:
AppColors
.
scaffold_bg_color
,
],
body:
provider
.
isLoading
),
?
Center
(
),
child:
CircularProgressIndicator
.
adaptive
(
backgroundColor:
AppColors
.
scaffold_bg_color
,
valueColor:
AlwaysStoppedAnimation
<
Color
>(
body:
AppColors
.
app_blue
,
provider
.
isLoading
?
Center
(
child:
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
<
Color
>(
AppColors
.
app_blue
,
),
),
),
),
)
)
:
crmLists
.
isNotEmpty
:
crmLists
.
isNotEmpty
?
SizedBox
(
?
SizedBox
(
child:
Scrollbar
(
child:
Scrollbar
(
thumbVisibility:
false
,
thumbVisibility:
false
,
child:
ListView
.
builder
(
child:
ListView
.
builder
(
itemCount:
crmLists
.
length
,
itemCount:
crmLists
.
length
,
shrinkWrap:
true
,
shrinkWrap:
true
,
physics:
AlwaysScrollableScrollPhysics
(),
physics:
AlwaysScrollableScrollPhysics
(),
itemBuilder:
(
context
,
index
)
{
itemBuilder:
(
context
,
index
)
{
if
(
crmLists
.
isEmpty
)
{
if
(
crmLists
.
isEmpty
)
{
return
SizedBox
(
return
SizedBox
(
child:
Center
(
child:
Text
(
"No Data Available"
)),
child:
Center
(
);
child:
Text
(
"No Data Available"
),
}
),
);
}
// if(crmLists[index].aid=="1726"){
// if(crmLists[index].aid=="1726"){
return
Container
(
return
Container
(
padding:
EdgeInsets
.
symmetric
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
horizontal:
10
,
...
@@ -125,8 +157,9 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
...
@@ -125,8 +157,9 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
padding:
EdgeInsets
.
all
(
8.0
),
padding:
EdgeInsets
.
all
(
8.0
),
decoration:
BoxDecoration
(
decoration:
BoxDecoration
(
color:
Color
(
0xFFE6F6FF
),
color:
Color
(
0xFFE6F6FF
),
borderRadius:
borderRadius:
BorderRadius
.
circular
(
BorderRadius
.
circular
(
8
),
8
,
),
),
),
child:
SvgPicture
.
asset
(
child:
SvgPicture
.
asset
(
"assets/svg/se_block_head.svg"
,
"assets/svg/se_block_head.svg"
,
...
@@ -139,7 +172,7 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
...
@@ -139,7 +172,7 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
child:
SizedBox
(
child:
SizedBox
(
child:
Column
(
child:
Column
(
crossAxisAlignment:
crossAxisAlignment:
CrossAxisAlignment
.
start
,
CrossAxisAlignment
.
start
,
children:
[
children:
[
Text
(
Text
(
crmLists
[
index
].
aname
!,
crmLists
[
index
].
aname
!,
...
@@ -153,7 +186,6 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
...
@@ -153,7 +186,6 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
),
),
),
),
),
),
],
],
),
),
Divider
(
Divider
(
...
@@ -179,12 +211,10 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
...
@@ -179,12 +211,10 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
crmLists
[
index
].
gstNumber
,
crmLists
[
index
].
gstNumber
,
];
];
return
Container
(
return
Container
(
padding:
EdgeInsets
.
symmetric
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
vertical:
5
,
),
child:
Row
(
child:
Row
(
crossAxisAlignment:
crossAxisAlignment:
CrossAxisAlignment
.
start
,
CrossAxisAlignment
.
start
,
children:
[
children:
[
Expanded
(
Expanded
(
child:
Text
(
child:
Text
(
...
@@ -215,26 +245,25 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
...
@@ -215,26 +245,25 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
context
,
context
,
MaterialPageRoute
(
MaterialPageRoute
(
builder:
builder:
(
context
)
=>
(
context
)
=>
ProspectDetailsByMode
(
ProspectDetailsByMode
(
pageTitleName:
pageTitleName:
widget
widget
.
pageTitleName
,
.
pageTitleName
,
mode:
widget
.
mode
,
mode:
widget
.
mode
,
leadId:
provider
.
accountList
[
index
].
aid
,
leadId:
provider
.
accountList
[
index
]
.
aid
,
),
),
),
),
);
);
},
},
child:
Container
(
child:
Container
(
padding:
EdgeInsets
.
symmetric
(
padding:
EdgeInsets
.
symmetric
(
vertical:
5
),
vertical:
5
,
),
child:
Row
(
child:
Row
(
crossAxisAlignment:
crossAxisAlignment:
CrossAxisAlignment
.
center
,
CrossAxisAlignment
.
center
,
mainAxisAlignment:
mainAxisAlignment:
MainAxisAlignment
.
start
,
MainAxisAlignment
.
start
,
children:
[
children:
[
Text
(
Text
(
"View Details"
,
"View Details"
,
...
@@ -255,16 +284,11 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
...
@@ -255,16 +284,11 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
],
],
),
),
);
);
},
),
},
),
),
),
)
)
:
Emptywidget
(
context
),
:
Emptywidget
(
context
)
),
),
);
);
},
},
);
);
...
@@ -292,7 +316,9 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
...
@@ -292,7 +316,9 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
right:
15
,
right:
15
,
top:
10
,
top:
10
,
),
),
padding:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,),
padding:
EdgeInsets
.
only
(
bottom:
MediaQuery
.
of
(
context
).
viewInsets
.
bottom
,
),
child:
SingleChildScrollView
(
child:
SingleChildScrollView
(
child:
Column
(
child:
Column
(
...
@@ -314,7 +340,7 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
...
@@ -314,7 +340,7 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
],
],
),
),
if
(
widget
.
mode
!=
"executive"
)...[
if
(
widget
.
mode
!=
"executive"
)
...[
TextWidget
(
context
,
"Employee"
),
TextWidget
(
context
,
"Employee"
),
DropdownButtonHideUnderline
(
DropdownButtonHideUnderline
(
child:
Row
(
child:
Row
(
...
@@ -326,66 +352,72 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
...
@@ -326,66 +352,72 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
style:
TextStyle
(
fontSize:
14
),
style:
TextStyle
(
fontSize:
14
),
),
),
items:
items:
provider
.
employeesList
provider
.
employeesList
.
map
(
.
map
(
(
slist
)
=>
(
slist
)
=>
DropdownMenuItem
<
Employees
>(
DropdownMenuItem
<
Employees
>(
value:
slist
,
value:
slist
,
child:
Text
(
child:
Text
(
slist
.
name
!,
slist
.
name
!,
style:
TextStyle
(
style:
TextStyle
(
fontSize:
14
,
fontSize:
14
,
),
),
),
),
),
),
)
)
.
toList
(),
.
toList
(),
value:
provider
.
employeesList
.
contains
(
provider
.
selectedEmployees
)
value:
?
provider
.
selectedEmployees
provider
.
employeesList
.
contains
(
:
null
,
provider
.
selectedEmployees
,
)
?
provider
.
selectedEmployees
:
null
,
// value: provider.selectedEmployees,
// value: provider.selectedEmployees,
onChanged:
(
Employees
?
value
)
{
onChanged:
(
Employees
?
value
)
{
if
(
value
!=
null
)
{
if
(
value
!=
null
)
{
if
(
provider
.
employeesList
.
isNotEmpty
){
if
(
provider
.
employeesList
.
isNotEmpty
)
{
provider
.
selectedEmployees
=
value
;
provider
.
selectedEmployees
=
value
;
provider
.
selectedEmployeeId
=
value
!.
id
!;
provider
.
selectedEmployeeId
=
provider
.
selectedEmployeeValue
=
value
!.
name
!;
value
!.
id
!;
provider
.
selectedEmployeeValue
=
value
!.
name
!;
}
}
}
}
},
},
isExpanded:
true
,
isExpanded:
true
,
dropdownSearchData:
DropdownSearchData
(
dropdownSearchData:
DropdownSearchData
(
searchInnerWidgetHeight:
50
,
searchInnerWidgetHeight:
50
,
searchController:
provider
.
searchController
,
searchController:
provider
.
searchController
,
searchInnerWidget:
Padding
(
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
),
padding:
const
EdgeInsets
.
all
(
8
),
child:
TextFormField
(
child:
TextFormField
(
controller:
controller:
provider
provider
.
searchController
,
.
searchController
,
decoration:
InputDecoration
(
decoration:
InputDecoration
(
isDense:
true
,
isDense:
true
,
contentPadding:
contentPadding:
const
EdgeInsets
.
symmetric
(
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
horizontal:
10
,
vertical:
8
,
vertical:
8
,
),
),
hintText:
'Search account...'
,
hintText:
'Search account...'
,
border:
OutlineInputBorder
(
border:
OutlineInputBorder
(
borderRadius:
borderRadius:
BorderRadius
.
circular
(
8
),
BorderRadius
.
circular
(
8
),
),
),
),
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
)
{
searchMatchFn:
(
item
,
searchValue
)
{
return
item
.
value
?.
name
return
item
.
value
?.
name
?.
toLowerCase
()
?.
toLowerCase
()
.
contains
(
.
contains
(
searchValue
.
toLowerCase
(),
searchValue
.
toLowerCase
(),
)
??
)
??
false
;
false
;
},
},
),
),
...
@@ -396,8 +428,10 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
...
@@ -396,8 +428,10 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
},
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
menuItemStyleData:
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
),
),
),
],
],
...
@@ -426,17 +460,23 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
...
@@ -426,17 +460,23 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
null
,
null
,
),
),
InkResponse
(
InkResponse
(
onTap:
()
{
onTap:
()
{
provider
.
crmProspectListAPIFunction
(
context
,
widget
.
mode
,
provider
.
selectedEmployeeId
);
provider
.
crmProspectListAPIFunction
(
context
,
widget
.
mode
,
provider
.
selectedEmployeeId
,
);
Navigator
.
pop
(
context
);
Navigator
.
pop
(
context
);
},
},
child:
Container
(
child:
Container
(
height:
45
,
height:
45
,
alignment:
Alignment
.
center
,
alignment:
Alignment
.
center
,
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
,
),
decoration:
BoxDecoration
(
decoration:
BoxDecoration
(
color:
AppColors
.
app_blue
,
color:
AppColors
.
app_blue
,
borderRadius:
BorderRadius
.
circular
(
15
),
borderRadius:
BorderRadius
.
circular
(
15
),
...
@@ -450,7 +490,7 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
...
@@ -450,7 +490,7 @@ class _ProspectListByModeState extends State<ProspectListByMode> {
),
),
),
),
),
),
)
)
,
],
],
),
),
),
),
...
...
lib/screens/crm/addProspectLeads.dart
View file @
c92f4c79
import
'dart:io'
;
import
'dart:io'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:dropdown_button2/dropdown_button2.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter/services.dart'
;
import
'package:generp/Notifiers/crmProvider/addProspectLeadsProvider.dart'
;
import
'package:generp/Notifiers/crmProvider/addProspectLeadsProvider.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:generp/Utils/dropdownTheme.dart'
;
import
'package:generp/Utils/dropdownTheme.dart'
;
import
'package:provider/provider.dart'
;
import
'package:provider/provider.dart'
;
import
'../../Models/crmModels/crmProspectDetailsAddLeadsResponse.dart'
;
import
'../../Models/crmModels/crmProspectDetailsAddLeadsResponse.dart'
;
...
@@ -23,384 +25,434 @@ class AddProspectLeads extends StatefulWidget {
...
@@ -23,384 +25,434 @@ class AddProspectLeads extends StatefulWidget {
class
_AddProspectLeadsState
extends
State
<
AddProspectLeads
>
{
class
_AddProspectLeadsState
extends
State
<
AddProspectLeads
>
{
Dropdowntheme
ddtheme
=
Dropdowntheme
();
Dropdowntheme
ddtheme
=
Dropdowntheme
();
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
@override
@override
void
initState
()
{
void
initState
()
{
super
.
initState
();
super
.
initState
();
_connectivity
.
initialise
();
_connectivity
.
myStream
.
listen
((
source
)
{
setState
(()
=>
_source
=
source
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
_
)
async
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
_
)
async
{
final
provider
=
Provider
.
of
<
Addprospectleadsprovider
>(
context
,
listen:
false
);
final
provider
=
Provider
.
of
<
Addprospectleadsprovider
>(
await
provider
.
crmProspectDetailsAddLeadsViewAPIFunction
(
context
,
widget
.
mode
);
context
,
listen:
false
,
);
await
provider
.
crmProspectDetailsAddLeadsViewAPIFunction
(
context
,
widget
.
mode
,
);
// Initialize controllers and dropdowns after API call
// Initialize controllers and dropdowns after API call
provider
.
initializeForm
(
context
);
provider
.
initializeForm
(
context
);
});
});
}
}
@override
void
dispose
()
{
// TODO: implement dispose
super
.
dispose
();
_connectivity
.
disposeStream
();
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
case
ConnectivityResult
.
mobile
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
wifi
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
none
:
default
:
connection
=
'Offline'
;
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer
<
Addprospectleadsprovider
>(
return
Consumer
<
Addprospectleadsprovider
>(
builder:
(
context
,
editProvider
,
child
)
{
builder:
(
context
,
editProvider
,
child
)
{
return
WillPopScope
(
return
Scaffold
(
onWillPop:
()
async
{
resizeToAvoidBottomInset:
true
,
editProvider
.
resetForm
();
backgroundColor:
AppColors
.
white
,
return
true
;
appBar:
appbar2
(
},
context
,
child:
SafeArea
(
"Add Lead"
,
top:
false
,
editProvider
.
resetForm
,
bottom:
Platform
.
isIOS
?
false
:
true
,
const
SizedBox
(
width:
0
),
child:
Scaffold
(
),
resizeToAvoidBottomInset:
true
,
body:
Container
(
backgroundColor:
AppColors
.
white
,
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
),
appBar:
appbar2
(
child:
SingleChildScrollView
(
context
,
child:
Column
(
"Add Lead"
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
editProvider
.
resetForm
,
children:
[
const
SizedBox
(
width:
0
),
TextWidget
(
context
,
"Employee"
),
),
DropdownButtonHideUnderline
(
body:
Container
(
child:
Row
(
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
),
children:
[
child:
SingleChildScrollView
(
Expanded
(
child:
Column
(
child:
DropdownButton2
<
Employees
>(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
hint:
Text
(
children:
[
"Select Source"
,
TextWidget
(
context
,
"Employee"
),
style:
TextStyle
(
fontSize:
14
),
DropdownButtonHideUnderline
(
),
child:
Row
(
items:
children:
[
Expanded
(
child:
DropdownButton2
<
Employees
>(
hint:
Text
(
"Select Source"
,
style:
TextStyle
(
fontSize:
14
),
),
items:
editProvider
.
employeeList
editProvider
.
employeeList
.
map
(
.
map
(
(
slist
)
=>
(
slist
)
=>
DropdownMenuItem
<
Employees
>(
DropdownMenuItem
<
Employees
>(
value:
slist
,
value:
slist
,
child:
Text
(
child:
Text
(
slist
.
name
!,
slist
.
name
!,
style:
TextStyle
(
style:
TextStyle
(
fontSize:
14
),
fontSize:
14
,
),
),
),
),
),
)
)
.
toList
(),
.
toList
(),
value:
value:
editProvider
.
employeeList
.
contains
(
editProvider
.
employeeList
.
contains
(
editProvider
editProvider
.
selectedEmployee
,
.
selectedEmployee
,
)
)
?
editProvider
.
selectedEmployee
?
editProvider
.
selectedEmployee
:
null
,
:
null
,
// value: provider.selectedEmployees,
// value: provider.selectedEmployees,
onChanged:
(
Employees
?
value
)
{
onChanged:
(
Employees
?
value
)
{
if
(
value
!=
null
)
{
if
(
value
!=
null
)
{
if
(
editProvider
if
(
editProvider
.
employeeList
.
isNotEmpty
)
{
.
employeeList
editProvider
.
selectedEmployee
=
value
;
.
isNotEmpty
)
{
editProvider
.
selectedEmployeeId
=
value
!.
id
!;
editProvider
.
selectedEmployee
=
editProvider
.
selectedEmployeeValue
=
value
;
editProvider
.
selectedEmployeeId
=
value
!.
id
!;
editProvider
.
selectedEmployeeValue
=
value
!.
name
!;
value
!.
name
!;
}
}
}
}
},
},
isExpanded:
true
,
isExpanded:
true
,
dropdownSearchData:
DropdownSearchData
(
dropdownSearchData:
DropdownSearchData
(
searchInnerWidgetHeight:
50
,
searchInnerWidgetHeight:
50
,
searchController:
searchController:
editProvider
.
searchController
,
editProvider
.
searchController
,
searchInnerWidget:
Padding
(
searchInnerWidget:
Padding
(
padding:
const
EdgeInsets
.
all
(
8
),
padding:
const
EdgeInsets
.
all
(
8
),
child:
TextFormField
(
child:
TextFormField
(
controller:
editProvider
.
searchController
,
controller:
decoration:
InputDecoration
(
editProvider
.
searchController
,
isDense:
true
,
decoration:
InputDecoration
(
contentPadding:
const
EdgeInsets
.
symmetric
(
isDense:
true
,
horizontal:
10
,
contentPadding:
vertical:
8
,
const
EdgeInsets
.
symmetric
(
),
horizontal:
10
,
hintText:
'Search account...'
,
vertical:
8
,
border:
OutlineInputBorder
(
),
borderRadius:
BorderRadius
.
circular
(
8
),
hintText:
'Search account...'
,
border:
OutlineInputBorder
(
borderRadius:
BorderRadius
.
circular
(
8
),
),
),
),
),
),
),
searchMatchFn:
(
item
,
searchValue
)
{
return
item
.
value
?.
name
?.
toLowerCase
()
.
contains
(
searchValue
.
toLowerCase
(),
)
??
false
;
},
),
),
onMenuStateChange:
(
isOpen
)
{
if
(!
isOpen
)
{
editProvider
.
searchController
.
clear
();
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
),
searchMatchFn:
(
item
,
searchValue
)
{
return
item
.
value
?.
name
?.
toLowerCase
().
contains
(
searchValue
.
toLowerCase
(),
)
??
false
;
},
),
),
],
onMenuStateChange:
(
isOpen
)
{
if
(!
isOpen
)
{
editProvider
.
searchController
.
clear
();
}
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
),
),
),
],
),
),
InkResponse
(
InkResponse
(
onTap:
()
{
onTap:
()
{
editProvider
.
editAddNewRow
();
editProvider
.
editAddNewRow
();
},
},
child:
Container
(
child:
Container
(
margin:
const
EdgeInsets
.
symmetric
(
vertical:
10
),
margin:
const
EdgeInsets
.
symmetric
(
vertical:
10
),
height:
45
,
height:
45
,
width:
MediaQuery
.
of
(
context
).
size
.
width
,
width:
MediaQuery
.
of
(
context
).
size
.
width
,
decoration:
BoxDecoration
(
decoration:
BoxDecoration
(
color:
const
Color
(
0xFFE6F6FF
),
color:
const
Color
(
0xFFE6F6FF
),
borderRadius:
BorderRadius
.
circular
(
12
),
borderRadius:
BorderRadius
.
circular
(
12
),
border:
Border
.
all
(
border:
Border
.
all
(
color:
AppColors
.
app_blue
,
color:
AppColors
.
app_blue
,
width:
0.5
,
width:
0.5
,
),
),
),
),
child:
Center
(
child:
Center
(
child:
Text
(
child:
Text
(
"+ Add Product"
,
"+ Add Product"
,
style:
TextStyle
(
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontFamily:
"JakartaMedium"
,
color:
AppColors
.
app_blue
,
color:
AppColors
.
app_blue
,
),
),
),
),
),
),
),
),
if
(
editProvider
.
leadProductsList
.
isNotEmpty
||
),
editProvider
.
editProductPriceControllers
.
isNotEmpty
)...[
),
ListView
.
builder
(
if
(
editProvider
.
leadProductsList
.
isNotEmpty
||
itemCount:
editProvider
.
editProductPriceControllers
.
length
,
editProvider
.
editProductPriceControllers
.
isNotEmpty
)
...[
physics:
const
NeverScrollableScrollPhysics
(),
ListView
.
builder
(
shrinkWrap:
true
,
itemCount:
itemBuilder:
(
context
,
j
)
{
editProvider
.
editProductPriceControllers
.
length
,
return
Container
(
physics:
const
NeverScrollableScrollPhysics
(),
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
10
),
shrinkWrap:
true
,
margin:
const
EdgeInsets
.
symmetric
(
vertical:
10
),
itemBuilder:
(
context
,
j
)
{
decoration:
BoxDecoration
(
return
Container
(
color:
Colors
.
white
,
padding:
const
EdgeInsets
.
symmetric
(
borderRadius:
BorderRadius
.
circular
(
20
),
horizontal:
10
,
),
vertical:
10
,
child:
Column
(
),
crossAxisAlignment:
CrossAxisAlignment
.
start
,
margin:
const
EdgeInsets
.
symmetric
(
vertical:
10
),
children:
[
decoration:
BoxDecoration
(
TextWidget
(
context
,
"Product"
),
color:
Colors
.
white
,
DropdownButtonHideUnderline
(
borderRadius:
BorderRadius
.
circular
(
20
),
child:
Row
(
),
children:
[
child:
Column
(
Expanded
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
child:
DropdownButton2
<
Products
>(
children:
[
isExpanded:
true
,
TextWidget
(
context
,
"Product"
),
hint:
const
Text
(
DropdownButtonHideUnderline
(
'Select Product'
,
child:
Row
(
style:
TextStyle
(
fontSize:
14
),
children:
[
overflow:
TextOverflow
.
ellipsis
,
Expanded
(
),
child:
DropdownButton2
<
Products
>(
items:
editProvider
.
leadProductsList
isExpanded:
true
,
.
map
((
ord
)
=>
DropdownMenuItem
<
Products
>(
hint:
const
Text
(
value:
ord
,
'Select Product'
,
child:
Text
(
style:
TextStyle
(
fontSize:
14
),
"(Product Name:
${ord.name}
)"
,
overflow:
TextOverflow
.
ellipsis
,
style:
const
TextStyle
(
fontSize:
14
),
),
overflow:
TextOverflow
.
ellipsis
,
items:
),
editProvider
.
leadProductsList
))
.
map
(
(
ord
)
=>
DropdownMenuItem
<
Products
>(
value:
ord
,
child:
Text
(
"(Product Name:
${ord.name}
)"
,
style:
const
TextStyle
(
fontSize:
14
,
),
overflow:
TextOverflow
.
ellipsis
,
),
),
)
.
toList
(),
.
toList
(),
value:
editProvider
.
selectedProductIds
[
j
]
!=
null
value:
?
editProvider
.
leadProductsList
.
firstWhere
(
editProvider
.
selectedProductIds
[
j
]
!=
(
ord
)
=>
ord
.
id
==
editProvider
.
selectedProductIds
[
j
],
null
orElse:
()
=>
editProvider
.
leadProductsList
[
0
],
?
editProvider
.
leadProductsList
)
.
firstWhere
(
(
ord
)
=>
ord
.
id
==
editProvider
.
selectedProductIds
[
j
],
orElse:
()
=>
editProvider
.
leadProductsList
[
0
],
)
:
null
,
:
null
,
onChanged:
(
Products
?
value
)
{
onChanged:
(
Products
?
value
)
{
if
(
value
!=
null
)
{
if
(
value
!=
null
)
{
editProvider
.
updateSelectedProductIds
(
j
,
value
);
editProvider
editProvider
.
selectedProductIds
[
j
]
=
.
updateSelectedProductIds
(
value
.
id
?.
toString
()
??
''
;
j
,
editProvider
.
updateTotalAmount
(
j
);
value
,
}
);
},
editProvider
.
selectedProductIds
[
j
]
=
buttonStyleData:
ddtheme
.
buttonStyleData
,
value
.
id
?.
toString
()
??
''
;
iconStyleData:
ddtheme
.
iconStyleData
,
editProvider
.
updateTotalAmount
(
j
);
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
}
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
},
),
buttonStyleData:
),
ddtheme
.
buttonStyleData
,
],
iconStyleData:
ddtheme
.
iconStyleData
,
),
menuItemStyleData:
),
ddtheme
.
menuItemStyleData
,
const
SizedBox
(
height:
10
),
dropdownStyleData:
Row
(
ddtheme
.
dropdownStyleData
,
children:
[
Expanded
(
flex:
2
,
child:
textControllerWidget
(
context
,
editProvider
.
editProductPriceControllers
[
j
],
"Product Price"
,
"Enter Product Price"
,
(
value
)
=>
editProvider
.
updateTotalAmount
(
j
),
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
),
),
],
),
],
),
),
const
SizedBox
(
height:
10
),
Row
(
children:
[
Expanded
(
flex:
2
,
child:
textControllerWidget
(
context
,
editProvider
.
editProductPriceControllers
[
j
],
"Product Price"
,
"Enter Product Price"
,
(
value
)
=>
editProvider
.
updateTotalAmount
(
j
),
TextInputType
.
number
,
false
,
FilteringTextInputFormatter
.
digitsOnly
,
),
),
),
const
SizedBox
(
height:
10
),
],
Row
(
),
children:
[
const
SizedBox
(
height:
10
),
Expanded
(
Row
(
flex:
2
,
children:
[
child:
textControllerWidget
(
Expanded
(
context
,
flex:
2
,
editProvider
.
editQuantityControllers
[
j
],
child:
textControllerWidget
(
"Quantity"
,
context
,
"Enter Quantity"
,
editProvider
.
editQuantityControllers
[
j
],
(
value
)
=>
editProvider
.
updateTotalAmount
(
j
),
"Quantity"
,
TextInputType
.
number
,
"Enter Quantity"
,
false
,
(
value
)
=>
FilteringTextInputFormatter
.
digitsOnly
,
editProvider
.
updateTotalAmount
(
j
),
),
TextInputType
.
number
,
),
false
,
],
FilteringTextInputFormatter
.
digitsOnly
,
),
),
),
const
SizedBox
(
height:
10
),
],
Row
(
),
children:
[
const
SizedBox
(
height:
10
),
Expanded
(
Row
(
flex:
2
,
children:
[
child:
textControllerWidget
(
Expanded
(
context
,
flex:
2
,
editProvider
.
editTotalAmountControllers
[
j
],
child:
textControllerWidget
(
"Total Amount"
,
context
,
"Enter Total Amount"
,
editProvider
(
_
)
{},
.
editTotalAmountControllers
[
j
],
TextInputType
.
number
,
"Total Amount"
,
true
,
"Enter Total Amount"
,
FilteringTextInputFormatter
.
digitsOnly
,
(
_
)
{},
),
TextInputType
.
number
,
),
true
,
],
FilteringTextInputFormatter
.
digitsOnly
,
),
),
),
],
],
),
),
);
],
},
),
),
);
],
},
TextWidget
(
context
,
"Status"
),
),
DropdownButtonHideUnderline
(
],
child:
Row
(
TextWidget
(
context
,
"Status"
),
children:
[
DropdownButtonHideUnderline
(
Expanded
(
child:
Row
(
child:
DropdownButton2
<
String
>(
children:
[
hint:
Text
(
Expanded
(
"Select Salutation"
,
child:
DropdownButton2
<
String
>(
style:
TextStyle
(
fontSize:
14
),
hint:
Text
(
),
"Select Status"
,
items:
style:
TextStyle
(
fontSize:
14
),
),
items:
editProvider
.
statusList
editProvider
.
statusList
.
map
(
.
map
(
(
slist
)
=>
(
slist
)
=>
DropdownMenuItem
<
String
>(
DropdownMenuItem
<
String
>(
value:
slist
,
value:
slist
,
child:
Text
(
child:
Text
(
slist
,
slist
,
style:
TextStyle
(
style:
TextStyle
(
fontSize:
14
),
fontSize:
14
,
),
),
),
),
),
)
)
.
toList
(),
.
toList
(),
value:
editProvider
.
selectedStatus
,
value:
editProvider
.
selectedStatus
,
onChanged:
(
String
?
value
)
{
onChanged:
(
String
?
value
)
{
if
(
value
!=
null
)
{
if
(
value
!=
null
)
{
if
(
editProvider
if
(
editProvider
.
statusList
.
isNotEmpty
)
{
.
statusList
editProvider
.
selectedStatus
=
value
;
.
isNotEmpty
)
{
}
editProvider
.
selectedStatus
=
value
;
}
}
},
}
isExpanded:
true
,
},
buttonStyleData:
ddtheme
.
buttonStyleData
,
isExpanded:
true
,
iconStyleData:
ddtheme
.
iconStyleData
,
buttonStyleData:
ddtheme
.
buttonStyleData
,
menuItemStyleData:
ddtheme
.
menuItemStyleData
,
iconStyleData:
ddtheme
.
iconStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
menuItemStyleData:
),
ddtheme
.
menuItemStyleData
,
dropdownStyleData:
ddtheme
.
dropdownStyleData
,
),
),
],
),
),
)
,
]
,
]
,
)
,
),
),
)
,
]
,
),
),
floatingActionButtonLocation:
FloatingActionButtonLocation
.
centerFloat
,
),
bottomNavigationBar:
InkResponse
(
),
onTap:
editProvider
.
submitLoading
floatingActionButtonLocation:
FloatingActionButtonLocation
.
centerFloat
,
bottomNavigationBar:
InkResponse
(
onTap:
editProvider
.
submitLoading
?
null
?
null
:
()
{
:
()
{
editProvider
.
submitForm
(
context
,
widget
.
mode
,
widget
.
leadID
,
editProvider
.
selectedEmployeeId
,
editProvider
.
selectedStatus
);
editProvider
.
submitForm
(
// editProvider.crmProspectDetailsAddLeadsSubmitAPIFunction(context, mode, account_id, acc_manager_id, products, lead_status)
context
,
widget
.
mode
,
},
widget
.
leadID
,
child:
Container
(
editProvider
.
selectedEmployeeId
,
height:
45
,
editProvider
.
selectedStatus
,
alignment:
Alignment
.
center
,
);
margin:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
15
),
// editProvider.crmProspectDetailsAddLeadsSubmitAPIFunction(context, mode, account_id, acc_manager_id, products, lead_status)
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
},
decoration:
BoxDecoration
(
child:
Container
(
color:
AppColors
.
app_blue
,
height:
45
,
borderRadius:
BorderRadius
.
circular
(
15
),
alignment:
Alignment
.
center
,
),
margin:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
15
),
child:
editProvider
.
submitLoading
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
?
CircularProgressIndicator
.
adaptive
(
decoration:
BoxDecoration
(
valueColor:
AlwaysStoppedAnimation
<
Color
>(
AppColors
.
app_blue
),
color:
AppColors
.
app_blue
,
)
borderRadius:
BorderRadius
.
circular
(
15
),
:
const
Text
(
"Submit"
,
style:
TextStyle
(
fontSize:
15
,
fontFamily:
"JakartaMedium"
,
color:
Colors
.
white
,
),
),
),
),
),
child:
editProvider
.
submitLoading
?
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
<
Color
>(
AppColors
.
app_blue
,
),
)
:
const
Text
(
"Submit"
,
style:
TextStyle
(
fontSize:
15
,
fontFamily:
"JakartaMedium"
,
color:
Colors
.
white
,
),
),
),
),
),
),
);
);
},
},
);
);
}
}
}
}
\ No newline at end of file
lib/screens/crm/crmDashboard.dart
View file @
c92f4c79
...
@@ -39,12 +39,14 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
...
@@ -39,12 +39,14 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
prov
.
crmPendingTasksAPIFunction
(
context
);
prov
.
crmPendingTasksAPIFunction
(
context
);
});
});
}
}
@override
@override
void
dispose
()
{
void
dispose
()
{
// TODO: implement dispose
// TODO: implement dispose
super
.
dispose
();
super
.
dispose
();
_connectivity
.
disposeStream
();
_connectivity
.
disposeStream
();
}
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
...
@@ -517,7 +519,12 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
...
@@ -517,7 +519,12 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
FloatingActionButtonLocation
.
centerFloat
,
FloatingActionButtonLocation
.
centerFloat
,
floatingActionButton:
InkResponse
(
floatingActionButton:
InkResponse
(
onTap:
()
{
onTap:
()
{
_showPaymentOptionsSheet
(
context
);
if
(
provider
.
accessPages
.
where
((
page
)
=>
[
8
,
9
].
contains
(
page
.
id
))
.
toList
()
.
contains
([
8
,
9
]))
{
_showPaymentOptionsSheet
(
context
);
}
},
},
child:
Container
(
child:
Container
(
height:
45
,
height:
45
,
...
...
lib/screens/crm/productDetails.dart
View file @
c92f4c79
import
'dart:io'
;
import
'dart:io'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:generp/screens/crm/editProductsList.dart'
;
import
'package:generp/screens/crm/editProductsList.dart'
;
import
'package:provider/provider.dart'
;
import
'package:provider/provider.dart'
;
...
@@ -12,147 +14,201 @@ import '../../Utils/commonWidgets.dart';
...
@@ -12,147 +14,201 @@ import '../../Utils/commonWidgets.dart';
class
Productdetails
extends
StatefulWidget
{
class
Productdetails
extends
StatefulWidget
{
final
leadID
;
final
leadID
;
final
mode
;
final
mode
;
const
Productdetails
({
super
.
key
,
required
this
.
leadID
,
required
this
.
mode
});
const
Productdetails
({
super
.
key
,
required
this
.
leadID
,
required
this
.
mode
});
@override
@override
State
<
Productdetails
>
createState
()
=>
_ProductdetailsState
();
State
<
Productdetails
>
createState
()
=>
_ProductdetailsState
();
}
}
class
_ProductdetailsState
extends
State
<
Productdetails
>
{
class
_ProductdetailsState
extends
State
<
Productdetails
>
{
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
@override
@override
void
initState
()
{
void
initState
()
{
// TODO: implement initState
// TODO: implement initState
super
.
initState
();
super
.
initState
();
_connectivity
.
initialise
();
_connectivity
.
myStream
.
listen
((
source
)
{
setState
(()
=>
_source
=
source
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
final
provider
=
Provider
.
of
<
crmLeadDetailsProvider
>(
context
,
listen:
false
);
final
provider
=
Provider
.
of
<
crmLeadDetailsProvider
>(
context
,
listen:
false
,
);
provider
.
crmLeadDetailsAPIFunction
(
context
,
widget
.
leadID
,
widget
.
mode
);
provider
.
crmLeadDetailsAPIFunction
(
context
,
widget
.
leadID
,
widget
.
mode
);
},);
});
}
@override
void
dispose
()
{
// TODO: implement dispose
super
.
dispose
();
_connectivity
.
disposeStream
();
}
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
case
ConnectivityResult
.
mobile
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
wifi
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
none
:
default
:
connection
=
'Offline'
;
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer
<
crmLeadDetailsProvider
>(
return
Consumer
<
crmLeadDetailsProvider
>(
builder:
(
context
,
provider
,
child
)
{
builder:
(
context
,
provider
,
child
)
{
var
customerDetails
=
provider
.
leadProducts
;
var
customerDetails
=
provider
.
leadProducts
;
return
WillPopScope
(
return
Scaffold
(
onWillPop:
()
=>
onBackPressed
(
context
),
resizeToAvoidBottomInset:
true
,
child:
SafeArea
(
appBar:
appbar
(
context
,
"Product Details"
),
top:
false
,
backgroundColor:
AppColors
.
scaffold_bg_color
,
bottom:
Platform
.
isIOS
?
false
:
true
,
body:
child:
Scaffold
(
provider
.
leadProducts
.
isNotEmpty
resizeToAvoidBottomInset:
true
,
?
SizedBox
(
appBar:
appbar
(
context
,
"Product Details"
),
child:
SingleChildScrollView
(
backgroundColor:
AppColors
.
scaffold_bg_color
,
child:
Column
(
body:
SizedBox
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
child:
SingleChildScrollView
(
children:
[
child:
Column
(
// TextWidget(context,"Product Details"),
crossAxisAlignment:
CrossAxisAlignment
.
start
,
ListView
.
builder
(
children:
[
itemCount:
customerDetails
.
length
,
// TextWidget(context,"Product Details"),
shrinkWrap:
true
,
ListView
.
builder
(
itemBuilder:
(
context
,
index
)
{
itemCount:
customerDetails
.
length
,
return
Container
(
shrinkWrap:
true
,
margin:
EdgeInsets
.
symmetric
(
itemBuilder:
(
context
,
index
)
{
horizontal:
10
,
return
Container
(
vertical:
5
,
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
,
vertical:
5
),
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
15
,
vertical:
10
),
padding:
EdgeInsets
.
symmetric
(
decoration:
BoxDecoration
(
horizontal:
15
,
color:
Colors
.
white
,
vertical:
10
,
borderRadius:
BorderRadius
.
circular
(
20
),
),
),
decoration:
BoxDecoration
(
child:
Column
(
color:
Colors
.
white
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
borderRadius:
BorderRadius
.
circular
(
20
),
children:
List
.
generate
(
4
,
(
j
)
{
),
final
textheads
=
[
child:
Column
(
"Product Name"
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
"Product Price"
,
children:
List
.
generate
(
4
,
(
j
)
{
"Quantity"
,
final
textheads
=
[
"Total Price"
"Product Name"
,
];
"Product Price"
,
final
textSubheads
=
[
"Quantity"
,
customerDetails
[
index
].
productName
??
"-"
,
"Total Price"
,
customerDetails
[
index
].
price
??
"-"
,
];
customerDetails
[
index
].
qty
??
"-"
,
final
textSubheads
=
[
customerDetails
[
index
].
price
??
"-"
,
customerDetails
[
index
].
productName
??
"-"
,
];
customerDetails
[
index
].
price
??
"-"
,
return
Container
(
customerDetails
[
index
].
qty
??
"-"
,
customerDetails
[
index
].
price
??
"-"
,
padding:
EdgeInsets
.
symmetric
(
];
vertical:
6
,
return
Container
(
horizontal:
0
,
padding:
EdgeInsets
.
symmetric
(
),
vertical:
6
,
child:
Row
(
horizontal:
0
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
flex:
2
,
child:
Text
(
textheads
[
j
].
toString
(),
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,),
),
),
Expanded
(
child:
Row
(
flex:
3
,
crossAxisAlignment:
child:
Text
(
CrossAxisAlignment
.
start
,
textSubheads
[
j
],
children:
[
maxLines:
2
,
Expanded
(
overflow:
flex:
2
,
TextOverflow
.
ellipsis
,
child:
Text
(
style:
TextStyle
(
textheads
[
j
].
toString
(),
color:
Color
(
0xFF818181
),
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
),
),
),
),
Expanded
(
flex:
3
,
child:
Text
(
textSubheads
[
j
],
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
),
),
),
],
),
),
],
);
),
}),
);
),
}),
);
),
},
);
),
}
),
SizedBox
(
height:
75
),
SizedBox
(
height:
75
),
],
],
),
),
)
:
Emptywidget
(
context
),
floatingActionButton:
Align
(
alignment:
Alignment
.
bottomCenter
,
child:
InkWell
(
onTap:
()
async
{
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
EditProductsList
(
leadID:
widget
.
leadID
),
),
),
),
);
),
if
(
res
==
true
)
{
floatingActionButton:
Align
(
provider
.
crmLeadDetailsAPIFunction
(
context
,
widget
.
leadID
,
widget
.
mode
,
);
}
},
child:
Container
(
alignment:
Alignment
.
bottomCenter
,
alignment:
Alignment
.
bottomCenter
,
child:
InkWell
(
height:
45
,
onTap:
()
async
{
width:
MediaQuery
.
of
(
context
).
size
.
width
,
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
EditProductsList
(
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
leadID:
widget
.
leadID
,
decoration:
BoxDecoration
(
),));
color:
AppColors
.
app_blue
,
if
(
res
==
true
){
borderRadius:
BorderRadius
.
circular
(
14.0
),
provider
.
crmLeadDetailsAPIFunction
(
context
,
widget
.
leadID
,
widget
.
mode
);
),
}
child:
Center
(
},
child:
Text
(
child:
Container
(
"Edit Products"
,
alignment:
Alignment
.
bottomCenter
,
textAlign:
TextAlign
.
center
,
height:
45
,
style:
TextStyle
(
width:
MediaQuery
.
of
(
context
).
size
.
width
,
color:
Colors
.
white
,
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
fontFamily:
"JakartaMedium"
,
decoration:
BoxDecoration
(
color:
AppColors
.
app_blue
,
borderRadius:
BorderRadius
.
circular
(
14.0
),
),
child:
Center
(
child:
Text
(
"Edit Products"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
color:
Colors
.
white
,
fontFamily:
"JakartaMedium"
),
),
),
),
),
),
),
),
),
),
floatingActionButtonLocation:
FloatingActionButtonLocation
.
centerFloat
,
),
),
),
),
floatingActionButtonLocation:
FloatingActionButtonLocation
.
centerFloat
,
);
);
},
},
);
);
...
...
lib/screens/crm/prospectContactDetails.dart
View file @
c92f4c79
import
'dart:io'
;
import
'dart:io'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:flutter_svg/svg.dart'
;
import
'package:generp/Notifiers/crmProvider/crmProspectDetailsProvider.dart'
;
import
'package:generp/Notifiers/crmProvider/crmProspectDetailsProvider.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:provider/provider.dart'
;
import
'package:provider/provider.dart'
;
import
'../../Utils/app_colors.dart'
;
import
'../../Utils/app_colors.dart'
;
...
@@ -11,218 +13,264 @@ import '../../Utils/commonWidgets.dart';
...
@@ -11,218 +13,264 @@ import '../../Utils/commonWidgets.dart';
class
ProspectContactDetails
extends
StatefulWidget
{
class
ProspectContactDetails
extends
StatefulWidget
{
final
accountId
;
final
accountId
;
const
ProspectContactDetails
({
super
.
key
,
required
this
.
accountId
});
const
ProspectContactDetails
({
super
.
key
,
required
this
.
accountId
});
@override
@override
State
<
ProspectContactDetails
>
createState
()
=>
_ProspectContactDetailsState
();
State
<
ProspectContactDetails
>
createState
()
=>
_ProspectContactDetailsState
();
}
}
class
_ProspectContactDetailsState
extends
State
<
ProspectContactDetails
>
{
class
_ProspectContactDetailsState
extends
State
<
ProspectContactDetails
>
{
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
@override
void
initState
()
{
// TODO: implement initState
super
.
initState
();
_connectivity
.
initialise
();
_connectivity
.
myStream
.
listen
((
source
)
{
setState
(()
=>
_source
=
source
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{});
}
@override
void
dispose
()
{
// TODO: implement dispose
super
.
dispose
();
_connectivity
.
disposeStream
();
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
case
ConnectivityResult
.
mobile
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
wifi
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
none
:
default
:
connection
=
'Offline'
;
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer
<
crmProspectDetailsProvider
>(
return
Consumer
<
crmProspectDetailsProvider
>(
builder:
(
context
,
provider
,
child
)
{
builder:
(
context
,
provider
,
child
)
{
var
customerDetails
=
provider
.
contactList
;
var
customerDetails
=
provider
.
contactList
;
return
WillPopScope
(
return
Scaffold
(
onWillPop:
()
=>
onBackPressed
(
context
),
resizeToAvoidBottomInset:
true
,
child:
SafeArea
(
appBar:
appbar
(
context
,
"Contact Details"
),
top:
false
,
backgroundColor:
AppColors
.
scaffold_bg_color
,
bottom:
Platform
.
isIOS
?
false
:
true
,
body:
SizedBox
(
child:
Scaffold
(
child:
SingleChildScrollView
(
resizeToAvoidBottomInset:
true
,
child:
Column
(
appBar:
appbar
(
context
,
"Contact Details"
),
crossAxisAlignment:
CrossAxisAlignment
.
start
,
backgroundColor:
AppColors
.
scaffold_bg_color
,
children:
[
body:
SizedBox
(
// TextWidget(context, "Contact Details"),
child:
SingleChildScrollView
(
ListView
.
builder
(
child:
Column
(
itemCount:
customerDetails
.
length
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
shrinkWrap:
true
,
children:
[
itemBuilder:
(
context
,
index
)
{
TextWidget
(
context
,
"Contact Details"
),
return
Container
(
ListView
.
builder
(
margin:
EdgeInsets
.
symmetric
(
itemCount:
customerDetails
.
length
,
horizontal:
10
,
shrinkWrap:
true
,
vertical:
5
,
itemBuilder:
(
context
,
index
)
{
),
return
Container
(
padding:
EdgeInsets
.
symmetric
(
margin:
EdgeInsets
.
symmetric
(
horizontal:
15
,
horizontal:
10
,
vertical:
10
,
vertical:
5
,
),
),
decoration:
BoxDecoration
(
padding:
EdgeInsets
.
symmetric
(
color:
Colors
.
white
,
horizontal:
15
,
borderRadius:
BorderRadius
.
circular
(
20
),
vertical:
10
,
),
),
child:
Column
(
decoration:
BoxDecoration
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
color:
Colors
.
white
,
children:
[
borderRadius:
BorderRadius
.
circular
(
20
),
Row
(
),
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
children:
[
Row
(
Expanded
(
children:
[
flex:
1
,
Expanded
(
child:
Container
(
flex:
1
,
height:
50
,
child:
Container
(
width:
35
,
height:
50
,
padding:
EdgeInsets
.
all
(
8.0
),
width:
35
,
decoration:
BoxDecoration
(
padding:
EdgeInsets
.
all
(
8.0
),
color:
Color
(
0xFFE6F6FF
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
8
),
color:
Color
(
0xFFE6F6FF
),
),
borderRadius:
BorderRadius
.
circular
(
child:
SvgPicture
.
asset
(
8
,
"assets/svg/crm_contact_profile.svg"
,
),
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
4
,
child:
SizedBox
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Text
(
customerDetails
[
index
].
name
??
"-"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
),
),
child:
SvgPicture
.
asset
(
],
"assets/svg/crm_contact_profile.svg"
,
),
),
),
),
SizedBox
(
width:
10
),
Expanded
(
flex:
1
,
child:
InkResponse
(
onTap:
()
{
provider
.
editNameController
.
text
=
customerDetails
[
index
].
name
??
""
;
provider
.
editDesignationController
.
text
=
customerDetails
[
index
].
designation
??
""
;
provider
.
editMobileNumberController
.
text
=
customerDetails
[
index
].
mob1
??
""
;
provider
.
editAlternativeMobileController
.
text
=
customerDetails
[
index
].
mob2
??
""
;
provider
.
editTelephoneController
.
text
=
customerDetails
[
index
].
tel
??
""
;
provider
.
editEmailController
.
text
=
customerDetails
[
index
].
email
??
""
;
_showEditContactSheet
(
context
,
index
,
provider
.
accountDetails
.
id
!,
);
},
child:
Container
(
height:
35
,
width:
30
,
padding:
EdgeInsets
.
all
(
8.0
),
child:
SvgPicture
.
asset
(
"assets/svg/crm_contact_edit.svg"
,
),
),
),
),
SizedBox
(
width:
10
),
),
),
],
),
Divider
(
thickness:
0.5
,
color:
Color
(
0xFFD7D7D7
)),
...
List
.
generate
(
5
,
(
j
)
{
final
textheads
=
[
"Mobile"
,
"Alternate Mobile"
,
"Telephone Number"
,
"Email"
,
"Designation"
,
];
final
textSubheads
=
[
customerDetails
[
index
].
mob1
??
"-"
,
customerDetails
[
index
].
mob2
??
"-"
,
customerDetails
[
index
].
tel
??
"-"
,
customerDetails
[
index
].
email
??
"-"
,
customerDetails
[
index
].
designation
??
"-"
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
6
,
horizontal:
0
,
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
Expanded
(
flex:
4
,
child:
Text
(
child:
SizedBox
(
textheads
[
j
].
toString
(),
child:
Column
(
maxLines:
2
,
crossAxisAlignment:
overflow:
TextOverflow
.
ellipsis
,
CrossAxisAlignment
.
start
,
children:
[
Text
(
customerDetails
[
index
].
name
??
"-"
,
style:
TextStyle
(
fontFamily:
"JakartaMedium"
,
fontSize:
14
,
color:
AppColors
.
semi_black
,
),
),
],
),
),
),
),
),
SizedBox
(
width:
10
),
Expanded
(
Expanded
(
flex:
1
,
child:
Text
(
child:
InkResponse
(
textSubheads
[
j
]
==
""
onTap:
()
{
?
"-"
provider
.
editNameController
.
text
=
customerDetails
[
index
].
name
??
""
;
:
textSubheads
[
j
],
provider
.
editDesignationController
.
text
=
customerDetails
[
index
].
designation
??
""
;
maxLines:
2
,
provider
.
editMobileNumberController
.
text
=
customerDetails
[
index
].
mob1
??
""
;
overflow:
TextOverflow
.
ellipsis
,
provider
.
editAlternativeMobileController
.
text
=
customerDetails
[
index
].
mob2
??
""
;
style:
TextStyle
(
provider
.
editTelephoneController
.
text
=
customerDetails
[
index
].
tel
??
""
;
color:
Color
(
0xFF818181
),
provider
.
editEmailController
.
text
=
customerDetails
[
index
].
email
??
""
;
_showEditContactSheet
(
context
,
index
,
provider
.
accountDetails
.
id
!);
},
child:
Container
(
height:
35
,
width:
30
,
padding:
EdgeInsets
.
all
(
8.0
),
child:
SvgPicture
.
asset
(
"assets/svg/crm_contact_edit.svg"
,
),
),
),
),
),
),
),
],
],
),
),
Divider
(
);
thickness:
0.5
,
}),
color:
Color
(
0xFFD7D7D7
),
],
),
),
...
List
.
generate
(
5
,
(
j
)
{
);
final
textheads
=
[
},
"Mobile"
,
"Alternate Mobile"
,
"Telephone Number"
,
"Email"
,
"Designation"
,
];
final
textSubheads
=
[
customerDetails
[
index
].
mob1
??
"-"
,
customerDetails
[
index
].
mob2
??
"-"
,
customerDetails
[
index
].
tel
??
"-"
,
customerDetails
[
index
].
email
??
"-"
,
customerDetails
[
index
].
designation
??
"-"
,
];
return
Container
(
padding:
EdgeInsets
.
symmetric
(
vertical:
6
,
horizontal:
0
,
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
child:
Text
(
textheads
[
j
].
toString
(),
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
),
),
Expanded
(
child:
Text
(
textSubheads
[
j
]
==
""
?
"-"
:
textSubheads
[
j
],
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
Color
(
0xFF818181
),
),
),
),
],
),
);
}),
],
),
);
},
),
SizedBox
(
height:
75
),
],
),
),
),
SizedBox
(
height:
75
),
],
),
),
floatingActionButton:
Align
(
),
),
floatingActionButton:
Align
(
alignment:
Alignment
.
bottomCenter
,
child:
InkWell
(
onTap:
()
{
_showAddContactSheet
(
context
,
provider
.
accountDetails
.
id
!);
},
child:
Container
(
alignment:
Alignment
.
bottomCenter
,
alignment:
Alignment
.
bottomCenter
,
child:
InkWell
(
height:
45
,
onTap:
()
{
width:
MediaQuery
.
of
(
context
).
size
.
width
,
_showAddContactSheet
(
context
,
provider
.
accountDetails
.
id
!);
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
},
decoration:
BoxDecoration
(
child:
Container
(
color:
AppColors
.
app_blue
,
alignment:
Alignment
.
bottomCenter
,
borderRadius:
BorderRadius
.
circular
(
14.0
),
height:
45
,
),
width:
MediaQuery
.
of
(
context
).
size
.
width
,
child:
Center
(
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
child:
Text
(
decoration:
BoxDecoration
(
"Add Contact"
,
color:
AppColors
.
app_blue
,
textAlign:
TextAlign
.
center
,
borderRadius:
BorderRadius
.
circular
(
14.0
),
style:
TextStyle
(
),
color:
Colors
.
white
,
child:
Center
(
fontFamily:
"JakartaMedium"
,
child:
Text
(
"Add Contact"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
color:
Colors
.
white
,
fontFamily:
"JakartaMedium"
,
),
),
),
),
),
),
),
),
),
),
floatingActionButtonLocation:
FloatingActionButtonLocation
.
centerFloat
,
),
),
),
),
floatingActionButtonLocation:
FloatingActionButtonLocation
.
centerFloat
,
);
);
},
},
);
);
}
}
Future
<
void
>
_showAddContactSheet
(
BuildContext
context
,
accID
)
{
Future
<
void
>
_showAddContactSheet
(
BuildContext
context
,
accID
)
{
return
showModalBottomSheet
(
return
showModalBottomSheet
(
useSafeArea:
true
,
useSafeArea:
true
,
isDismissible:
true
,
isDismissible:
true
,
...
@@ -330,10 +378,17 @@ class _ProspectContactDetailsState extends State<ProspectContactDetails> {
...
@@ -330,10 +378,17 @@ class _ProspectContactDetailsState extends State<ProspectContactDetails> {
),
),
errorWidget
(
context
,
provider
.
emailError
),
errorWidget
(
context
,
provider
.
emailError
),
InkWell
(
InkWell
(
onTap:
provider
.
isLoading
?
null
:(){
onTap:
provider
.
isLoading
=
true
;
provider
.
isLoading
provider
.
crmProspectDetailsAddContactAPIFunction
(
context
,
accID
);
?
null
},
:
()
{
provider
.
isLoading
=
true
;
provider
.
crmProspectDetailsAddContactAPIFunction
(
context
,
accID
,
);
},
child:
Container
(
child:
Container
(
alignment:
Alignment
.
center
,
alignment:
Alignment
.
center
,
height:
45
,
height:
45
,
...
@@ -348,11 +403,18 @@ class _ProspectContactDetailsState extends State<ProspectContactDetails> {
...
@@ -348,11 +403,18 @@ class _ProspectContactDetailsState extends State<ProspectContactDetails> {
borderRadius:
BorderRadius
.
circular
(
14.0
),
borderRadius:
BorderRadius
.
circular
(
14.0
),
),
),
child:
Center
(
child:
Center
(
child:
provider
.
isLoading
?
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
(
AppColors
.
white
),):
Text
(
child:
"Submit"
,
provider
.
isLoading
textAlign:
TextAlign
.
center
,
?
CircularProgressIndicator
.
adaptive
(
style:
TextStyle
(
color:
Colors
.
white
),
valueColor:
AlwaysStoppedAnimation
(
),
AppColors
.
white
,
),
)
:
Text
(
"Submit"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
color:
Colors
.
white
),
),
),
),
),
),
),
),
...
@@ -369,7 +431,7 @@ class _ProspectContactDetailsState extends State<ProspectContactDetails> {
...
@@ -369,7 +431,7 @@ class _ProspectContactDetailsState extends State<ProspectContactDetails> {
);
);
}
}
Future
<
void
>
_showEditContactSheet
(
BuildContext
context
,
index
,
accid
)
{
Future
<
void
>
_showEditContactSheet
(
BuildContext
context
,
index
,
accid
)
{
return
showModalBottomSheet
(
return
showModalBottomSheet
(
useSafeArea:
true
,
useSafeArea:
true
,
isDismissible:
true
,
isDismissible:
true
,
...
@@ -479,10 +541,18 @@ class _ProspectContactDetailsState extends State<ProspectContactDetails> {
...
@@ -479,10 +541,18 @@ class _ProspectContactDetailsState extends State<ProspectContactDetails> {
errorWidget
(
context
,
provider
.
editEmailError
),
errorWidget
(
context
,
provider
.
editEmailError
),
InkWell
(
InkWell
(
onTap:
provider
.
isLoading
?
null
:(){
onTap:
provider
.
isLoading
=
true
;
provider
.
isLoading
provider
.
crmProspectDetailsEditContactAPIFunction
(
context
,
provider
.
contactList
[
index
].
id
,
accid
);
?
null
},
:
()
{
provider
.
isLoading
=
true
;
provider
.
crmProspectDetailsEditContactAPIFunction
(
context
,
provider
.
contactList
[
index
].
id
,
accid
,
);
},
child:
Container
(
child:
Container
(
alignment:
Alignment
.
center
,
alignment:
Alignment
.
center
,
height:
45
,
height:
45
,
...
@@ -497,11 +567,18 @@ class _ProspectContactDetailsState extends State<ProspectContactDetails> {
...
@@ -497,11 +567,18 @@ class _ProspectContactDetailsState extends State<ProspectContactDetails> {
borderRadius:
BorderRadius
.
circular
(
14.0
),
borderRadius:
BorderRadius
.
circular
(
14.0
),
),
),
child:
Center
(
child:
Center
(
child:
provider
.
isLoading
?
CircularProgressIndicator
.
adaptive
(
valueColor:
AlwaysStoppedAnimation
(
AppColors
.
white
),):
Text
(
child:
"Submit"
,
provider
.
isLoading
textAlign:
TextAlign
.
center
,
?
CircularProgressIndicator
.
adaptive
(
style:
TextStyle
(
color:
Colors
.
white
),
valueColor:
AlwaysStoppedAnimation
(
),
AppColors
.
white
,
),
)
:
Text
(
"Submit"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
color:
Colors
.
white
),
),
),
),
),
),
),
),
...
...
lib/screens/crm/prospectLeadDetails.dart
View file @
c92f4c79
import
'dart:io'
;
import
'dart:io'
;
import
'package:connectivity_plus/connectivity_plus.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:generp/Notifiers/crmProvider/crmProspectDetailsProvider.dart'
;
import
'package:generp/Notifiers/crmProvider/crmProspectDetailsProvider.dart'
;
import
'package:generp/Utils/commonServices.dart'
;
import
'package:generp/screens/crm/LeadDetailsByMode.dart'
;
import
'package:generp/screens/crm/LeadDetailsByMode.dart'
;
import
'package:provider/provider.dart'
;
import
'package:provider/provider.dart'
;
...
@@ -13,17 +15,28 @@ class ProspectLeadDetails extends StatefulWidget {
...
@@ -13,17 +15,28 @@ class ProspectLeadDetails extends StatefulWidget {
final
leadID
;
final
leadID
;
final
mode
;
final
mode
;
const
ProspectLeadDetails
({
super
.
key
,
required
this
.
leadID
,
required
this
.
mode
});
const
ProspectLeadDetails
({
super
.
key
,
required
this
.
leadID
,
required
this
.
mode
,
});
@override
@override
State
<
ProspectLeadDetails
>
createState
()
=>
_ProspectLeadDetailsState
();
State
<
ProspectLeadDetails
>
createState
()
=>
_ProspectLeadDetailsState
();
}
}
class
_ProspectLeadDetailsState
extends
State
<
ProspectLeadDetails
>
{
class
_ProspectLeadDetailsState
extends
State
<
ProspectLeadDetails
>
{
Map
_source
=
{
ConnectivityResult
.
mobile
:
true
};
final
MyConnectivity
_connectivity
=
MyConnectivity
.
instance
;
@override
@override
void
initState
()
{
void
initState
()
{
// TODO: implement initState
// TODO: implement initState
super
.
initState
();
super
.
initState
();
_connectivity
.
initialise
();
_connectivity
.
myStream
.
listen
((
source
)
{
setState
(()
=>
_source
=
source
);
});
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
WidgetsBinding
.
instance
.
addPostFrameCallback
((
timeStamp
)
{
final
provider
=
Provider
.
of
<
crmProspectDetailsProvider
>(
final
provider
=
Provider
.
of
<
crmProspectDetailsProvider
>(
context
,
context
,
...
@@ -32,166 +45,218 @@ class _ProspectLeadDetailsState extends State<ProspectLeadDetails> {
...
@@ -32,166 +45,218 @@ class _ProspectLeadDetailsState extends State<ProspectLeadDetails> {
});
});
}
}
@override
void
dispose
()
{
// TODO: implement dispose
super
.
dispose
();
_connectivity
.
disposeStream
();
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
switch
(
_source
.
keys
.
toList
()[
0
])
{
case
ConnectivityResult
.
mobile
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
wifi
:
connection
=
'Online'
;
break
;
case
ConnectivityResult
.
none
:
default
:
connection
=
'Offline'
;
}
return
(
connection
==
"Online"
)
?
Platform
.
isAndroid
?
WillPopScope
(
onWillPop:
()
=>
onBackPressed
(
context
),
child:
SafeArea
(
top:
false
,
bottom:
true
,
child:
_scaffold
(
context
),
),
)
:
_scaffold
(
context
)
:
NoNetwork
(
context
);
}
Widget
_scaffold
(
BuildContext
context
)
{
return
Consumer
<
crmProspectDetailsProvider
>(
return
Consumer
<
crmProspectDetailsProvider
>(
builder:
(
context
,
provider
,
child
)
{
builder:
(
context
,
provider
,
child
)
{
var
customerDetails
=
provider
.
leadList
;
var
customerDetails
=
provider
.
leadList
;
return
WillPopScope
(
return
Scaffold
(
onWillPop:
()
=>
onBackPressed
(
context
),
resizeToAvoidBottomInset:
true
,
child:
SafeArea
(
appBar:
appbar
(
context
,
"Lead Details"
),
top:
false
,
backgroundColor:
AppColors
.
scaffold_bg_color
,
bottom:
Platform
.
isIOS
?
false
:
true
,
body:
SizedBox
(
child:
Scaffold
(
child:
SingleChildScrollView
(
resizeToAvoidBottomInset:
true
,
child:
Column
(
appBar:
appbar
(
context
,
"Lead Details"
),
crossAxisAlignment:
CrossAxisAlignment
.
start
,
backgroundColor:
AppColors
.
scaffold_bg_color
,
children:
[
body:
SizedBox
(
ListView
.
builder
(
child:
SingleChildScrollView
(
itemCount:
customerDetails
.
length
,
child:
Column
(
shrinkWrap:
true
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
itemBuilder:
(
context
,
index
)
{
children:
[
return
Container
(
TextWidget
(
context
,
"Lead Details"
),
margin:
EdgeInsets
.
symmetric
(
ListView
.
builder
(
horizontal:
10
,
itemCount:
customerDetails
.
length
,
vertical:
5
,
shrinkWrap:
true
,
),
itemBuilder:
(
context
,
index
)
{
padding:
EdgeInsets
.
symmetric
(
return
Container
(
horizontal:
15
,
margin:
EdgeInsets
.
symmetric
(
vertical:
10
,
horizontal:
10
,
),
vertical:
5
,
decoration:
BoxDecoration
(
),
color:
Colors
.
white
,
padding:
EdgeInsets
.
symmetric
(
borderRadius:
BorderRadius
.
circular
(
20
),
horizontal:
15
,
),
vertical:
10
,
child:
Column
(
),
crossAxisAlignment:
CrossAxisAlignment
.
start
,
decoration:
BoxDecoration
(
children:
List
.
generate
(
5
,
(
j
)
{
color:
Colors
.
white
,
final
textheads
=
[
borderRadius:
BorderRadius
.
circular
(
20
),
"Lead Id"
,
),
"Date Created"
,
child:
Column
(
"Lead Status"
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
"Lead Open / Close"
,
children:
List
.
generate
(
5
,
(
j
)
{
"View Details"
,
final
textheads
=
[
];
"Lead Id"
,
"Date Created"
,
"Lead Status"
,
"Lead Open / Close"
,
"View Details"
final
textSubheads
=
[
];
customerDetails
[
index
].
id
??
"-"
,
final
textSubheads
=
[
customerDetails
[
index
].
date
??
"-"
,
customerDetails
[
index
].
id
??
"-"
,
customerDetails
[
index
].
status
??
"-"
,
customerDetails
[
index
].
date
??
"-"
,
customerDetails
[
index
].
openStatus
??
"-"
,
customerDetails
[
index
].
status
??
"-"
,
"View"
,
customerDetails
[
index
].
openStatus
??
"-"
,
];
"View"
,
return
Container
(
];
padding:
EdgeInsets
.
symmetric
(
return
Container
(
vertical:
6
,
padding:
EdgeInsets
.
symmetric
(
horizontal:
0
,
vertical:
6
,
),
horizontal:
0
,
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Expanded
(
flex:
2
,
child:
Text
(
textheads
[
j
].
toString
(),
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
),
),
),
child:
Row
(
if
(
textSubheads
[
j
]
==
"View"
)
...[
crossAxisAlignment:
Expanded
(
CrossAxisAlignment
.
start
,
flex:
3
,
children:
[
child:
InkResponse
(
Expanded
(
onTap:
()
async
{
flex:
2
,
var
res
=
await
Navigator
.
push
(
child:
Text
(
context
,
textheads
[
j
].
toString
(),
MaterialPageRoute
(
maxLines:
2
,
builder:
overflow:
TextOverflow
.
ellipsis
,
(
context
)
=>
),
LeadDetailsByMode
(
),
mode:
""
,
if
(
textSubheads
[
j
]==
"View"
)...[
pageTitleName:
Expanded
(
"Lead Details"
,
flex:
3
,
leadId:
widget
.
leadID
,
child:
InkResponse
(
),
onTap:
()
async
{
var
res
=
await
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
context
)
=>
LeadDetailsByMode
(
mode:
""
,
pageTitleName:
"Lead Details"
,
leadId:
widget
.
leadID
),));
if
(
res
==
true
){
provider
.
crmProspectDetailsAPIFunction
(
context
,
widget
.
leadID
);
}
},
child:
Text
(
textSubheads
[
j
]==
""
?
"-"
:
textSubheads
[
j
],
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
AppColors
.
app_blue
,
decorationColor:
AppColors
.
app_blue
,
decoration:
TextDecoration
.
underline
),
),
),
),
);
),
if
(
res
==
true
)
{
]
else
...[
provider
Expanded
(
.
crmProspectDetailsAPIFunction
(
flex:
3
,
context
,
widget
.
leadID
,
);
}
},
child:
Text
(
child:
Text
(
textSubheads
[
j
]==
""
?
"-"
:
textSubheads
[
j
],
textSubheads
[
j
]
==
""
?
"-"
:
textSubheads
[
j
],
maxLines:
2
,
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
style:
TextStyle
(
color:
Color
(
0xFF818181
),
color:
AppColors
.
app_blue
,
decorationColor:
AppColors
.
app_blue
,
decoration:
TextDecoration
.
underline
,
),
),
),
),
),
),
]
),
],
]
else
...[
),
Expanded
(
);
flex:
3
,
}),
child:
Text
(
),
textSubheads
[
j
]
==
""
);
?
"-"
},
:
textSubheads
[
j
],
),
maxLines:
2
,
overflow:
TextOverflow
.
ellipsis
,
SizedBox
(
height:
75
),
style:
TextStyle
(
],
color:
Color
(
0xFF818181
),
),
),
),
],
],
),
);
}),
),
);
},
),
),
),
SizedBox
(
height:
75
),
],
),
),
floatingActionButton:
Align
(
),
alignment:
Alignment
.
bottomCenter
,
),
child:
InkWell
(
floatingActionButton:
Align
(
onTap:
()
async
{
alignment:
Alignment
.
bottomCenter
,
var
res
=
await
Navigator
.
push
(
child:
InkWell
(
context
,
onTap:
()
async
{
MaterialPageRoute
(
var
res
=
await
Navigator
.
push
(
builder:
context
,
(
context
)
=>
AddProspectLeads
(
leadID:
widget
.
leadID
,
mode:
widget
.
mode
,),
MaterialPageRoute
(
),
builder:
);
(
context
)
=>
AddProspectLeads
(
if
(
res
==
true
)
{
leadID:
widget
.
leadID
,
provider
.
crmProspectDetailsAPIFunction
(
mode:
widget
.
mode
,
context
,
widget
.
leadID
,
);
}
},
child:
Container
(
alignment:
Alignment
.
bottomCenter
,
height:
45
,
width:
MediaQuery
.
of
(
context
).
size
.
width
,
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
decoration:
BoxDecoration
(
color:
AppColors
.
app_blue
,
borderRadius:
BorderRadius
.
circular
(
14.0
),
),
child:
Center
(
child:
Text
(
"Add Lead"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
color:
Colors
.
white
,
fontFamily:
"JakartaMedium"
,
),
),
),
),
);
if
(
res
==
true
)
{
provider
.
crmProspectDetailsAPIFunction
(
context
,
widget
.
leadID
,
);
}
},
child:
Container
(
alignment:
Alignment
.
bottomCenter
,
height:
45
,
width:
MediaQuery
.
of
(
context
).
size
.
width
,
margin:
EdgeInsets
.
symmetric
(
horizontal:
10
),
decoration:
BoxDecoration
(
color:
AppColors
.
app_blue
,
borderRadius:
BorderRadius
.
circular
(
14.0
),
),
child:
Center
(
child:
Text
(
"Add Lead"
,
textAlign:
TextAlign
.
center
,
style:
TextStyle
(
color:
Colors
.
white
,
fontFamily:
"JakartaMedium"
,
),
),
),
),
),
),
),
),
floatingActionButtonLocation:
FloatingActionButtonLocation
.
centerFloat
,
),
),
),
),
floatingActionButtonLocation:
FloatingActionButtonLocation
.
centerFloat
,
);
);
},
},
);
);
...
...
Prev
1
2
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