Commit c92f4c79 authored by Sai Srinivas's avatar Sai Srinivas
Browse files

ios changes in Navigation swipe gestures.

parent ee178d55
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
......
...@@ -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;
......
...@@ -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();
......
...@@ -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();
......
String didPushed = ""; String didPushed = "";
String didPopped = ""; String didPopped = "";
String routeSettingName = "";
...@@ -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}');
} }
} }
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,
), ),
), ),
], ],
......
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: () {
......
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),
fontSize: 14, fontFamily: "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),
fontSize: 14, fontFamily: "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);
},
); );
}, },
); );
......
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,
),
),
), ),
), ),
); );
......
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: 35, width: 30,
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> {
), ),
); );
}), }),
], ],
), ),
), ),
......
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),
),
),
); );
}, },
); );
......
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(
fontWeight: FontWeight.w500, fontSize: 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
),
), ),
), ),
), ),
), ),
], ),
), ],
], ),
), ],
), ),
); ),
} );
},
), ),
); );
}, },
......
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: 35, width: 30,
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,
......
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> {
), ),
), ),
), ),
) ),
], ],
), ),
), ),
......
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
...@@ -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,
......
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,
); );
}, },
); );
......
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),
),
), ),
), ),
), ),
......
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,
); );
}, },
); );
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment