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

20-05-2025 By Sai Srinivas

Common Module complete
parent e54f0aeb
import 'package:flutter/foundation.dart';
import 'package:generp/Notifiers/HomeScreenNotifier.dart';
import 'package:generp/services/api_calling.dart';
import 'package:provider/provider.dart';
import '../../Models/commonModels/commonAccountdetailsResponse.dart';
class Accountdetailsprovider extends ChangeNotifier{
AccountDetails _accountDetails = AccountDetails();
List<LedgerList> _ledgerList = [];
AccountDetails get accountDetails => _accountDetails;
List<LedgerList> get ledgerList => _ledgerList;
double totalCredit = 0.0;
double totalDebit = 0.0;
double totalRunningBalance = 0.0;
List<double> runningBalances = [];
Future<void> accountdetailsAPIFunction(context,accountID) async {
try{
var prov = Provider.of<HomescreenNotifier>(context,listen: false);
final data = await ApiCalling.commonAccountDetailsAPI(prov.empId, prov.session, accountID);
if(data!=null){
if(data.error=="0"){
_accountDetails = data.accountDetails!;
_ledgerList = data.ledgerList!;
for (var item in _ledgerList) {
double credit = double.tryParse(item.creditAmount.toString()) ?? 0;
double debit = double.tryParse(item.debitAmount.toString()) ?? 0;
totalCredit = 0.0;
totalDebit = 0.0;
totalRunningBalance = 0.0;
runningBalances = [];
totalCredit += credit;
totalDebit += debit;
totalRunningBalance += (debit - credit);
runningBalances.add(totalRunningBalance);
}
notifyListeners();
}
}
}catch (e,s){
}
}
Map<String, List<LedgerList>> groupByDate(List<LedgerList> list) {
Map<String, List<LedgerList>> grouped = {};
for (var item in list) {
String date = item.createdDatetime!;
if (!grouped.containsKey(date)) {
grouped[date] = [];
}
grouped[date]!.add(item);
}
return grouped;
}
}
\ No newline at end of file
import 'package:flutter/foundation.dart';
import 'package:generp/Models/commonModels/commonAccountLedgerFilterResponse.dart';
import 'package:generp/Models/commonModels/commonAccountLedgerResponse.dart';
import 'package:generp/Notifiers/HomeScreenNotifier.dart';
import 'package:generp/services/api_calling.dart';
import 'package:provider/provider.dart';
class Accountledgerprovider extends ChangeNotifier{
List<Accounts> _accounts = [];
List<LedgerList> _ledgerList = [];
AccountDetails _accountDetails = AccountDetails();
Accounts? _selectedAccount;
String _selectedAcID = "";
String _selectedAcVal = "";
bool _isLoading = true;
bool get isLoading => _isLoading;
List<Accounts> get accounts => _accounts;
List<LedgerList> get ledgerList => _ledgerList;
AccountDetails get acDetails => _accountDetails;
Accounts? get selectedAccount => _selectedAccount;
String get selectedAcId => _selectedAcID;
String get selectedAcVal => _selectedAcVal;
set accounts(List<Accounts> value){
_accounts = value;
notifyListeners();
}
set selectedAccount(Accounts? value){
_selectedAccount = value;
_selectedAcID = value!.id!;
_selectedAcVal = value!.name!;
notifyListeners();
}
set selectedAcId(String value){
_selectedAcID = value;
notifyListeners();
}
set selectedAcVal(String value){
_selectedAcVal = value;
notifyListeners();
}
// Reset all values
void resetAll() {
_selectedAccount = null;
_selectedAcID = "";
_accounts = [];
_ledgerList = [];
notifyListeners(); // Notify UI to update
}
Future<void> dropDownAPI(context) async {
try{
var prov = Provider.of<HomescreenNotifier>(context,listen: false);
final data = await ApiCalling.commonAccountLedgerDropDownAPI(prov.empId,prov.session);
if(data!=null){
if(data.error=="0"){
_accounts = data.accounts!;
notifyListeners();
}
}
}catch (e,s){
}
}
Future<void> ledgerlistAPI(context) async {
try{
var prov = Provider.of<HomescreenNotifier>(context,listen: false);
_ledgerList.clear();
_isLoading = true;
notifyListeners();
final data = await ApiCalling.commonAccountLedgerListAPI(prov.empId,prov.session,selectedAcId);
if(data!=null){
if(data.error=="0"){
_isLoading = false;
_ledgerList= data.ledgerList!;
_accountDetails= data.accountDetails!;
if (_selectedAccount != null &&
!_accounts.contains(_selectedAccount)) {
_selectedAccount = null;
_selectedAcID = "";
}
notifyListeners();
} else if(data.error=="1"){
_isLoading = false;
}
notifyListeners();
}
}catch (e,s){
}
}
Map<String, List<LedgerList>> groupByDate(List<LedgerList> list) {
Map<String, List<LedgerList>> grouped = {};
for (var item in list) {
String date = item.createdDatetime!;
if (!grouped.containsKey(date)) {
grouped[date] = [];
}
grouped[date]!.add(item);
}
return grouped;
}
}
\ No newline at end of file
...@@ -7,6 +7,7 @@ import 'package:provider/provider.dart'; ...@@ -7,6 +7,7 @@ import 'package:provider/provider.dart';
import '../../Models/commonModels/DistrictsResponse.dart'; import '../../Models/commonModels/DistrictsResponse.dart';
import '../../Models/commonModels/SubLocationsResponse.dart'; import '../../Models/commonModels/SubLocationsResponse.dart';
import '../../Models/commonModels/commonAccountlistResponse.dart';
import '../../Models/commonModels/commonAddAccountsViewResponse.dart'; import '../../Models/commonModels/commonAddAccountsViewResponse.dart';
class Accountslistprovider extends ChangeNotifier { class Accountslistprovider extends ChangeNotifier {
...@@ -26,10 +27,27 @@ class Accountslistprovider extends ChangeNotifier { ...@@ -26,10 +27,27 @@ class Accountslistprovider extends ChangeNotifier {
TextEditingController contectPersonTeleController = TextEditingController(); TextEditingController contectPersonTeleController = TextEditingController();
TextEditingController contectPersonMailController = TextEditingController(); TextEditingController contectPersonMailController = TextEditingController();
TextEditingController mobileNumberController = TextEditingController();
TextEditingController companyNameController = TextEditingController();
List<States> _states = []; List<States> _states = [];
List<Districts> _districts = []; List<Districts> _districts = [];
List<SubLocations> _subLocations = []; List<SubLocations> _subLocations = [];
List<String> _accountTypes = []; List<String> _accountTypes = [];
List<AccountList> _accountsList = [];
bool _isLoading = true;
bool _hasMoreData = true;
bool get isLoading => _isLoading;
int _pageNum = 1;
int get pageNum => _pageNum;
set pageNum (value){
_pageNum = value;
notifyListeners();
}
bool _isVisible = false;
List<States> get states => _states; List<States> get states => _states;
...@@ -38,7 +56,12 @@ class Accountslistprovider extends ChangeNotifier { ...@@ -38,7 +56,12 @@ class Accountslistprovider extends ChangeNotifier {
List<SubLocations> get subLocations => _subLocations; List<SubLocations> get subLocations => _subLocations;
List<String> get accountTypes => _accountTypes; List<String> get accountTypes => _accountTypes;
List<AccountList> get accountsList => _accountsList;
bool get isVisible => _isVisible;
set isVisible (bool value){
_isVisible = value;
notifyListeners();
}
States? _selectedState; States? _selectedState;
Districts? _selectedDistricts; Districts? _selectedDistricts;
SubLocations? _selectedSubLocations; SubLocations? _selectedSubLocations;
...@@ -242,6 +265,42 @@ class Accountslistprovider extends ChangeNotifier { ...@@ -242,6 +265,42 @@ class Accountslistprovider extends ChangeNotifier {
} catch (e, s) {} } catch (e, s) {}
} }
Future<void> commonAccountListAPIFunction(context) async {
try{
var prov = Provider.of<HomescreenNotifier>(context,listen: false);
if(_pageNum==1){
_accountsList.clear();
notifyListeners();
}
final data = await ApiCalling.commonAccountListAPI(prov.empId, prov.session,_pageNum,companyNameController.text,mobileNumberController.text);
if(data!=null){
print("pageNum $_pageNum");
if(data.error=="0"){
_hasMoreData = true;
_accountsList.addAll(data.accountList!);
_pageNum++;
_isLoading = false;
notifyListeners();
}else{
_hasMoreData = false;
_isLoading = false;
notifyListeners();
}
}
}catch (e,s){
}
}
resetValues(){ resetValues(){
_selectedAccountType = null; _selectedAccountType = null;
_selectedStateID=null; _selectedStateID=null;
......
...@@ -484,6 +484,7 @@ class Requestionlistprovider extends ChangeNotifier { ...@@ -484,6 +484,7 @@ class Requestionlistprovider extends ChangeNotifier {
} }
} catch (e, s) {} } catch (e, s) {}
} }
void showDatePickerDialog(BuildContext context) { void showDatePickerDialog(BuildContext context) {
showCupertinoModalPopup<void>( showCupertinoModalPopup<void>(
context: context, context: context,
...@@ -546,6 +547,7 @@ class Requestionlistprovider extends ChangeNotifier { ...@@ -546,6 +547,7 @@ class Requestionlistprovider extends ChangeNotifier {
), ),
); );
} }
List<List<String>> prepareExportData() { List<List<String>> prepareExportData() {
final headers = [ final headers = [
'ID', 'ID',
...@@ -804,6 +806,7 @@ class Requestionlistprovider extends ChangeNotifier { ...@@ -804,6 +806,7 @@ class Requestionlistprovider extends ChangeNotifier {
bankIfscController.clear(); bankIfscController.clear();
bankAcHolderController.clear(); bankAcHolderController.clear();
bankUpiController.clear(); bankUpiController.clear();
paymentReferenceController.clear();
_selectedAccounts = null; _selectedAccounts = null;
_selectedPayment = null; _selectedPayment = null;
......
...@@ -308,12 +308,18 @@ class Paymentreceiptsprovider extends ChangeNotifier{ ...@@ -308,12 +308,18 @@ class Paymentreceiptsprovider extends ChangeNotifier{
Future<void> paymentsListAPI(context,from,to) async { Future<void> paymentsListAPI(context,from,to) async {
try{ try{
var prov = Provider.of<HomescreenNotifier>(context,listen: false); var prov = Provider.of<HomescreenNotifier>(context,listen: false);
_isLoading = true;
notifyListeners();
final data = await ApiCalling.paymentRequisitionPaymentReceiptListAPI(prov.empId, prov.session,from,to); final data = await ApiCalling.paymentRequisitionPaymentReceiptListAPI(prov.empId, prov.session,from,to);
if(data!=null){ if(data!=null){
if(data.error=="0"){ if(data.error=="0"){
_receiptsList = data.receiptsList!; _receiptsList = data.receiptsList!;
_isLoading = false;
notifyListeners(); notifyListeners();
}else if(data.error=="1"){
_isLoading = false;
} }
notifyListeners();
} }
}catch(e,s){ }catch(e,s){
......
...@@ -25,19 +25,27 @@ class Paymentrequisitionpaymentslistprovider extends ChangeNotifier{ ...@@ -25,19 +25,27 @@ class Paymentrequisitionpaymentslistprovider extends ChangeNotifier{
List<String> _subHeadings = []; List<String> _subHeadings = [];
List<PaymentsList> get paymentsList => _paymentsList; List<PaymentsList> get paymentsList => _paymentsList;
PaymentDetails get paymentDetails => _paymentDetails; PaymentDetails get paymentDetails => _paymentDetails;
bool _isLoading = true;
List<String> get Headings => _headings; List<String> get Headings => _headings;
List<String> get subHeadings => _subHeadings; List<String> get subHeadings => _subHeadings;
bool get isLoading => _isLoading;
Future<void> paymentsListAPI(context,from,to) async { Future<void> paymentsListAPI(context,from,to) async {
try{ try{
var prov = Provider.of<HomescreenNotifier>(context,listen: false); var prov = Provider.of<HomescreenNotifier>(context,listen: false);
_paymentsList.clear();
_isLoading = true;
notifyListeners();
final data = await ApiCalling.paymentRequisitionPaymentListAPI(prov.empId, prov.session,from,to); final data = await ApiCalling.paymentRequisitionPaymentListAPI(prov.empId, prov.session,from,to);
if(data!=null){ if(data!=null){
if(data.error=="0"){ if(data.error=="0"){
_isLoading = false;
_paymentsList = data.paymentsList!; _paymentsList = data.paymentsList!;
notifyListeners(); notifyListeners();
}else if(data.error=="1"){
_isLoading = false;
} }
notifyListeners();
} }
}catch(e,s){ }catch(e,s){
......
String didPushed = "";
String didPopped = "";
\ No newline at end of file
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'GlobalConstants.dart';
import 'app_colors.dart'; import 'app_colors.dart';
PreferredSizeWidget appbar(BuildContext context, title) { PreferredSizeWidget appbar(BuildContext context, title) {
...@@ -92,4 +93,24 @@ Widget Emptywidget(BuildContext context){ ...@@ -92,4 +93,24 @@ Widget Emptywidget(BuildContext context){
child: Center( child: Center(
child: Text("No Data Available")), child: Text("No Data Available")),
); );
}
class MyNavigatorObserver extends NavigatorObserver {
@override
void didPush(Route route, Route? previousRoute) {
super.didPush(route, previousRoute);
// Called when a route has been pushed onto the navigator.
didPushed = "true";
// print('Route pushed: ${route.settings.name}');
// print('didPushed$didPushed');
}
@override
void didPop(Route route, Route? previousRoute) {
super.didPop(route, previousRoute);
didPopped = "true";
// Called when a route has been popped off the navigator.
// print('Route popped: ${route.settings.name}');
// print('didPopped${didPopped}');
}
} }
\ No newline at end of file
...@@ -23,6 +23,7 @@ import 'package:generp/Notifiers/ServiceEngineerDashboardProvider.dart'; ...@@ -23,6 +23,7 @@ import 'package:generp/Notifiers/ServiceEngineerDashboardProvider.dart';
import 'package:generp/Notifiers/TodayMontlyVisitsProvider.dart'; import 'package:generp/Notifiers/TodayMontlyVisitsProvider.dart';
import 'package:generp/Notifiers/UpdatePasswordProvider.dart'; import 'package:generp/Notifiers/UpdatePasswordProvider.dart';
import 'package:generp/Notifiers/VisitDetailsProvider.dart'; import 'package:generp/Notifiers/VisitDetailsProvider.dart';
import 'package:generp/Notifiers/commonProvider/accountDetailsProvider.dart';
import 'package:generp/Notifiers/commonProvider/accountsListProvider.dart'; import 'package:generp/Notifiers/commonProvider/accountsListProvider.dart';
import 'package:generp/Notifiers/commonProvider/commonPagesProvider.dart'; import 'package:generp/Notifiers/commonProvider/commonPagesProvider.dart';
import 'package:generp/Notifiers/financeProvider/DashboardProvider.dart'; import 'package:generp/Notifiers/financeProvider/DashboardProvider.dart';
...@@ -37,7 +38,9 @@ import 'package:generp/screens/HomeScreen.dart'; ...@@ -37,7 +38,9 @@ import 'package:generp/screens/HomeScreen.dart';
import 'package:generp/screens/splash.dart'; import 'package:generp/screens/splash.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'Notifiers/commonProvider/accountLedgerProvider.dart';
import 'Notifiers/financeProvider/RequesitionLidtDetailsProvider.dart'; import 'Notifiers/financeProvider/RequesitionLidtDetailsProvider.dart';
import 'Utils/commonWidgets.dart';
const AndroidNotificationChannel channel = AndroidNotificationChannel( const AndroidNotificationChannel channel = AndroidNotificationChannel(
'generp_channel', // id 'generp_channel', // id
...@@ -220,10 +223,21 @@ class MyApp extends StatelessWidget { ...@@ -220,10 +223,21 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => Paymentreceiptsprovider(),), ChangeNotifierProvider(create: (_) => Paymentreceiptsprovider(),),
ChangeNotifierProvider(create: (_) => Commonpagesprovider(),), ChangeNotifierProvider(create: (_) => Commonpagesprovider(),),
ChangeNotifierProvider(create: (_) => Accountslistprovider(),), ChangeNotifierProvider(create: (_) => Accountslistprovider(),),
ChangeNotifierProvider(create: (_) => Accountdetailsprovider(),),
ChangeNotifierProvider(create: (_) => Accountledgerprovider(),),
], ],
child: Builder( child: Builder(
builder: (BuildContext context) { builder: (BuildContext context) {
return MaterialApp( return MaterialApp(
navigatorObservers: [MyNavigatorObserver()],
builder: (BuildContext context, Widget? child) {
final MediaQueryData data = MediaQuery.of(context);
return MediaQuery(
data: data.copyWith(textScaleFactor: 1.0),
child: child ?? Container(),
);
},
themeMode: ThemeMode.light,
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
theme: ThemeData( theme: ThemeData(
fontFamily: 'JakartaRegular', fontFamily: 'JakartaRegular',
......
...@@ -130,8 +130,8 @@ class _MyHomePageState extends State<MyHomePage> { ...@@ -130,8 +130,8 @@ class _MyHomePageState extends State<MyHomePage> {
"Nearby", "Nearby",
"Inventory", "Inventory",
"Whizzdom", "Whizzdom",
"Common", // "Common",
"Finance", // "Finance",
]; ];
final icons = [ final icons = [
"assets/svg/home_icons_1.svg", "assets/svg/home_icons_1.svg",
...@@ -141,8 +141,8 @@ class _MyHomePageState extends State<MyHomePage> { ...@@ -141,8 +141,8 @@ class _MyHomePageState extends State<MyHomePage> {
"assets/svg/home_icons_5.svg", "assets/svg/home_icons_5.svg",
"assets/svg/home_icons_6.svg", "assets/svg/home_icons_6.svg",
"assets/svg/home_icons_81.svg", "assets/svg/home_icons_81.svg",
"assets/svg/home_icons_8.svg", // "assets/svg/home_icons_9.svg",
"assets/svg/home_icons_8.svg", // "assets/svg/home_icons_10.svg",
]; ];
final requiredRoles = [ final requiredRoles = [
"430", "430",
...@@ -152,8 +152,8 @@ class _MyHomePageState extends State<MyHomePage> { ...@@ -152,8 +152,8 @@ class _MyHomePageState extends State<MyHomePage> {
"433", "433",
"432", "432",
"431", "431",
"430", // "430",
"430", // "430",
]; ];
final filteredItems = <Map<String, String>>[]; final filteredItems = <Map<String, String>>[];
......
...@@ -342,24 +342,7 @@ class _WebErpScreenState extends State<WebErpScreen> { ...@@ -342,24 +342,7 @@ class _WebErpScreenState extends State<WebErpScreen> {
); );
} }
}, },
shouldInterceptAjaxRequest: (
controller,
ajaxRequest,
) async {
if (Platform.isAndroid) {
if (ajaxRequest.url.toString().contains('download')) {
await _handleDownload(
ajaxRequest.url.toString(),
'',
'application/octet-stream',
'',
);
}
return ajaxRequest;
}
return ajaxRequest;
},
), ),
if (isLoading) ...[ if (isLoading) ...[
Container( Container(
......
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:generp/Notifiers/commonProvider/accountLedgerProvider.dart';
import 'package:generp/screens/commom/transactionDetails.dart';
import 'package:provider/provider.dart';
import '../../Models/commonModels/commonAccountLedgerFilterResponse.dart';
import '../../Models/commonModels/commonAccountLedgerResponse.dart';
import '../../Notifiers/commonProvider/accountDetailsProvider.dart';
import '../../Utils/app_colors.dart';
import '../../Utils/commonWidgets.dart';
class Accountledger extends StatefulWidget { class Accountledger extends StatefulWidget {
const Accountledger({super.key}); const Accountledger({super.key});
...@@ -7,8 +19,571 @@ class Accountledger extends StatefulWidget { ...@@ -7,8 +19,571 @@ class Accountledger extends StatefulWidget {
} }
class _AccountledgerState extends State<Accountledger> { class _AccountledgerState extends State<Accountledger> {
@override
void initState() {
// TODO: implement initState
super.initState();
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Accountledgerprovider>(context, listen: false);
provider.dropDownAPI(context);
provider.ledgerlistAPI(context);
});
}
Future<bool> _onBackPressed(BuildContext context) async {
Provider.of<Accountledgerprovider>(context, listen: false).resetAll();
Navigator.pop(context, true);
return true;
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return const Placeholder(); return Consumer<Accountledgerprovider>(
builder: (context, provider, child) {
final groupedData = provider.groupByDate(provider.ledgerList);
double totalCredit = 0;
double totalDebit = 0;
double overallBalance = 0;
for (var item in provider.ledgerList) {
double credit = double.tryParse(item.creditAmount.toString()) ?? 0;
double debit = double.tryParse(item.debitAmount.toString()) ?? 0;
totalCredit += credit;
totalDebit += debit;
}
overallBalance = totalDebit - totalCredit;
return WillPopScope(
child: Scaffold(
appBar: appbar2(
context,
"Account Ledger List",
Row(
children: [
Container(
padding: EdgeInsets.symmetric(horizontal: 5,vertical: 5),
decoration: BoxDecoration(
color: Color(0xFFE6F6FF),
borderRadius: BorderRadius.circular(8),
),
child: Row(
children: [
SvgPicture.asset("assets/svg/fin_ic.svg",height: 12,),
SizedBox(width: 5,),
Text(overallBalance.toString()??"-",style: TextStyle(
fontSize: 12,
),)
],
),
),SizedBox(width: 10,),
Container(
padding: EdgeInsets.symmetric(horizontal: 5, vertical: 5),
child: InkResponse(
onTap: () {
_showFilterSheet(context);
},
child: SvgPicture.asset("assets/svg/filter_ic.svg", height: 25),
),
),
],
),
),
backgroundColor: AppColors.scaffold_bg_color,
body: provider.isLoading
? Center(child: CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation<Color>(
AppColors.app_blue)
)):Container(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
),
child: Row(
children: [
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: "${totalCredit}",
style: TextStyle(
color: Color(0xFFED3424),
fontFamily: "JakartaRegular",
fontSize: 25,
),
),
],
),
),
Text(
"credit",
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(
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)),
),
],
),
),
),
],
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text("${provider.selectedAcVal??""}" +" "+ "Account Ledger List"),
),
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.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;
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: [
Expanded(
flex: 1,
child: SizedBox(
child:
item.type == "Credit"
? Image.asset(
"assets/images/trans_debit.png",
height: 45,
width: 45,
fit: BoxFit.contain,
)
: Image.asset(
"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,
),
),
],
),
),
),
Spacer(),
Expanded(
flex: 3,
child: SizedBox(
child: RichText(
textAlign: TextAlign.right,
maxLines: 1,
overflow: TextOverflow.ellipsis,
text: TextSpan(
children: [
TextSpan(
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(
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(
crossAxisAlignment:
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(),
],
),
);
},
),
],
),
),
),
),
onWillPop: () {
return _onBackPressed(context);
},
);
},
);
}
Future<void> _showFilterSheet(BuildContext context) {
return showModalBottomSheet(
useSafeArea: true,
isDismissible: true,
isScrollControlled: true,
showDragHandle: true,
backgroundColor: Colors.white,
enableDrag: true,
context: context,
builder: (context) {
return StatefulBuilder(
builder: (context, setState) {
return SafeArea(
child: Consumer<Accountledgerprovider>(
builder: (context, provider, child) {
return Container(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
),
margin: EdgeInsets.only(
bottom: 15,
left: 15,
right: 15,
top: 10,
),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.symmetric(vertical: 10),
child: Text(
"Filter",
style: TextStyle(
color: AppColors.app_blue,
fontSize: 16,
fontFamily: "JakartaMedium",
),
),
),
Text(
"Select Account",
style: TextStyle(color: Color(0xFF2D2D2D)),
),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<Accounts>(
isExpanded: true,
hint: Text(
'Select Account Type',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.accounts
.map(
(accs) =>
DropdownMenuItem<Accounts>(
value: accs,
child: Text(
accs.name ?? '',
style: const TextStyle(
fontSize: 14,
),
overflow:
TextOverflow.ellipsis,
),
),
)
.toList(),
value: provider.selectedAccount,
onChanged: (Accounts? value) {
if (value != null) {
if (provider.accounts.isNotEmpty) {
provider.selectedAccount = value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.selectedAcId = value.id!;
provider.selectedAcVal = value.name!;
print(
"hfjkshfg" +
provider.selectedAcId
.toString(),
);
Navigator.pop(context);
provider.ledgerlistAPI(context);
}
}
},
buttonStyleData: ButtonStyleData(
height: 50,
width: 160,
padding: const EdgeInsets.only(
left: 14,
right: 14,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
),
iconStyleData: const IconStyleData(
icon: Icon(Icons.keyboard_arrow_down),
iconSize: 12,
iconEnabledColor: Color(0xFF2D2D2D),
iconDisabledColor: Colors.grey,
),
dropdownStyleData: DropdownStyleData(
maxHeight: 200,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
scrollbarTheme: ScrollbarThemeData(
radius: const Radius.circular(15),
thickness:
MaterialStateProperty.all<double>(
6,
),
thumbVisibility:
MaterialStateProperty.all<bool>(
true,
),
),
),
menuItemStyleData: const MenuItemStyleData(
height: 40,
padding: EdgeInsets.only(
left: 14,
right: 14,
),
),
),
),
],
),
),
],
),
),
);
},
),
);
},
);
},
);
} }
} }
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.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/commonWidgets.dart'; import 'package:generp/Utils/commonWidgets.dart';
import 'package:generp/screens/commom/accountsListDetails.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class Accountslist extends StatefulWidget { class Accountslist extends StatefulWidget {
...@@ -11,24 +14,368 @@ class Accountslist extends StatefulWidget { ...@@ -11,24 +14,368 @@ class Accountslist extends StatefulWidget {
} }
class _AccountslistState extends State<Accountslist> { class _AccountslistState extends State<Accountslist> {
ScrollController scrollController = ScrollController();
@override
void initState() {
// TODO: implement initState
super.initState();
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Accountslistprovider>(context, listen: false);
provider.commonAccountListAPIFunction(context);
scrollController.addListener(() {
if (scrollController.position.maxScrollExtent ==
scrollController.offset) {
provider.commonAccountListAPIFunction(context);
}
});
});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer(builder: (context, provider, child) { return Consumer<Accountslistprovider>(
return WillPopScope( builder: (context, provider, child) {
var accountList = provider.accountsList;
print(accountList.length);
return WillPopScope(
child: Scaffold( child: Scaffold(
appBar: appbar(context, "Account List"), appBar: appbar2(context, "Account List",Container(
padding: EdgeInsets.symmetric(horizontal: 5, vertical: 5),
child: InkResponse(
onTap: () {
_showFilterSheet(context);
},
child: SvgPicture.asset("assets/svg/filter_ic.svg", height: 18),
),
),),
backgroundColor: AppColors.scaffold_bg_color, backgroundColor: AppColors.scaffold_bg_color,
body: Container( body: Container(
child: SingleChildScrollView( child: SingleChildScrollView(
controller: scrollController,
child: Column( child: Column(
children: [ children: [
ListView.builder(
itemCount: accountList.length + 1,
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemBuilder: (context, index) {
if (accountList.isEmpty) {
return SizedBox(
child: Center(child: Text("No Data Available")),
);
}
if (index == accountList.length &&
!provider.isLoading) {
return Padding(
padding: EdgeInsets.all(8.0),
child: Center(child: CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation<Color>(
AppColors.app_blue),
)),
);
}
return 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: [
Row(
children: [
Expanded(
flex: 1,
child: Container(
height: 50,
width: 35,
padding: EdgeInsets.all(8.0),
decoration: BoxDecoration(
color: Color(0xFFEAF7FF),
borderRadius: BorderRadius.circular(8),
),
child: SvgPicture.asset(
"assets/svg/common_ac_list_ic.svg",
),
),
),
SizedBox(width: 10),
Expanded(
flex: 4,
child: SizedBox(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
accountList[index].name!,
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.semi_black,
),
),
Text(
accountList[index].contactName ??
"-",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
),
),
],
),
),
),
],
),
Divider(thickness: 0.5, color: Color(0xFFD7D7D7)),
...List.generate(4, (j) {
final headings = [
"Mobile Number",
"Email Id",
"Address",
"Date",
];
final subHeadings = [
accountList[index].mob1 ?? "-",
accountList[index].email ?? "-",
accountList[index].address ?? "-",
accountList[index].datetime ?? "-",
];
return Container(
padding: EdgeInsets.symmetric(vertical: 5),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Expanded(
child: Text(
headings[j],
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.semi_black,
),
),
),
SizedBox(width: 15),
Expanded(
child: Text(
subHeadings[j] ?? "-",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.grey_thick,
),
),
),
],
),
);
}),
InkResponse(
onTap: () async {
print("length, ${accountList.length}");
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Accountslistdetails(
accountID: accountList[index].id,
),
),
);
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 5),
child: Row(
crossAxisAlignment:
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",
),
],
),
),
),
],
),
);
},
),
], ],
), ),
), ),
), ),
), onWillPop: () => onBackPressed(context)); ),
}); onWillPop: () {
provider.pageNum = 1;
return _onBackPressed(context);
},
);
},
);
}
Future<void> _showFilterSheet(BuildContext context) {
return showModalBottomSheet(
useSafeArea: true,
isDismissible: true,
isScrollControlled: true,
showDragHandle: true,
backgroundColor: Colors.white,
enableDrag: true,
context: context,
builder: (context) {
return StatefulBuilder(
builder: (context, setState) {
return SafeArea(
child: Consumer<Accountslistprovider>(
builder: (context, provider, child) {
return Container(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
),
margin: EdgeInsets.only(
bottom: 15,
left: 15,
right: 15,
top: 10,
),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: EdgeInsets.symmetric(vertical: 10),
child: Text(
"Filter",
style: TextStyle(
color: AppColors.app_blue,
fontSize: 16,
fontFamily: "JakartaMedium",
),
),
),
textControllerWidget(context, provider.companyNameController, "Company Name", (p0) {
},),
textControllerWidget(context, provider.mobileNumberController, "Mobile Number", (p0) {
},),
InkResponse(
onTap: () {
Navigator.pop(context);
provider.commonAccountListAPIFunction(context);
provider.companyNameController.clear();
provider.mobileNumberController.clear();
},
child: Container(
height: 45,
alignment: Alignment.center,
margin: EdgeInsets.symmetric(horizontal: 10,vertical: 15),
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 5),
decoration: BoxDecoration(
color: AppColors.app_blue,
borderRadius: BorderRadius.circular(15),
),
child: Text(
"Search",
style: TextStyle(
fontSize: 15,
fontFamily: "JakartaMedium",
color: Colors.white,
),
),
),
),
],
),
),
);
},
),
);
},
);
},
);
}
Widget textControllerWidget(
context,
controller,
hintText,
Function(String)? onChanged,
) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.only(bottom: 5.0, top: 8.0),
child: Text(hintText),
),
Container(
height: hintText == "Enter Description" ? 150 : 50,
alignment: Alignment.center,
decoration: BoxDecoration(
color: AppColors.text_field_color,
borderRadius: BorderRadius.circular(14),
),
child: Padding(
padding: const EdgeInsets.fromLTRB(10.0, 0.0, 10, 0),
child: TextFormField(
controller: controller,
keyboardType: TextInputType.text,
maxLines: hintText == "Enter Description" ? 60 : 1,
onChanged: onChanged,
decoration: InputDecoration(
hintText: hintText,
hintStyle: TextStyle(
fontWeight: FontWeight.w400,
color: Color(0xFFB4BEC0),
fontSize: 14,
),
enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
),
),
),
),
],
);
}
Future<bool> _onBackPressed(BuildContext context) async {
Provider.of<Accountslistprovider>(context, listen: false).pageNum = 1;
Navigator.pop(context, true);
return true;
} }
} }
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:generp/Notifiers/commonProvider/accountDetailsProvider.dart';
import 'package:generp/Utils/app_colors.dart';
import 'package:generp/Utils/commonWidgets.dart';
import 'package:generp/screens/commom/transactionDetails.dart';
import 'package:provider/provider.dart';
import '../../Models/commonModels/commonAccountdetailsResponse.dart';
class Accountslistdetails extends StatefulWidget { class Accountslistdetails extends StatefulWidget {
const Accountslistdetails({super.key}); final accountID;
const Accountslistdetails({super.key, this.accountID});
@override @override
State<Accountslistdetails> createState() => _AccountslistdetailsState(); State<Accountslistdetails> createState() => _AccountslistdetailsState();
} }
class _AccountslistdetailsState extends State<Accountslistdetails> { class _AccountslistdetailsState extends State<Accountslistdetails> {
@override
void initState() {
// TODO: implement initState
super.initState();
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var prov = Provider.of<Accountdetailsprovider>(context, listen: false);
prov.accountdetailsAPIFunction(context, widget.accountID);
});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return const Placeholder(); return Consumer<Accountdetailsprovider>(
builder: (context, provider, child) {
final groupedData = provider.groupByDate(provider.ledgerList);
// Calculate total credit, debit, and balance
double totalCredit = 0;
double totalDebit = 0;
double overallBalance = 0;
for (var item in provider.ledgerList) {
double credit = double.tryParse(item.creditAmount.toString()) ?? 0;
double debit = double.tryParse(item.debitAmount.toString()) ?? 0;
totalCredit += credit;
totalDebit += debit;
}
overallBalance = totalDebit - totalCredit;
return WillPopScope(
child: Scaffold(
appBar: appbar2(context, "Account Details",Container(
padding: EdgeInsets.symmetric(horizontal: 5,vertical: 5),
decoration: BoxDecoration(
color: Color(0xFFE6F6FF),
borderRadius: BorderRadius.circular(8),
),
child: Row(
children: [
SvgPicture.asset("assets/svg/fin_ic.svg",height: 12,),
SizedBox(width: 5,),
Text(overallBalance.toString()??"-",style: TextStyle(
fontSize: 12,
),)
],
),
)),
backgroundColor: AppColors.scaffold_bg_color,
body: Container(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16)
),
child: Row(
children: [
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: "${totalCredit}",
style: TextStyle(
color: Color(0xFFED3424),
fontFamily:
"JakartaRegular",
fontSize: 25,
),
),
],
),
),
Text(
"credit",
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(
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),
),
),
],
),
),
),
],
),
),
Text(
"Account Details",
style: TextStyle(
fontSize: 16,
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(
padding: EdgeInsets.symmetric(vertical: 5),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Text(
headings[j],
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.semi_black,
),
),
),
SizedBox(width: 15),
Expanded(
child: Text(
subHeadings[j] ?? "-",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.grey_thick,
),
),
),
],
),
);
}),
],
),
),
ListView.builder(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: groupedData.keys.length,
itemBuilder: (context, index) {
String date = groupedData.keys.elementAt(index);
List<LedgerList> items = groupedData[date]!;
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;
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: [
Expanded(
flex: 1,
child: SizedBox(
child:
item.type == "Credit"
? Image.asset(
"assets/images/trans_debit.png",
height: 45,
width: 45,
fit: BoxFit.contain,
)
: Image.asset(
"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,
),
),
],
),
),
),
Spacer(),
Expanded(
flex: 3,
child: SizedBox(
child: RichText(
maxLines: 1,
textAlign: TextAlign.right,
overflow: TextOverflow.ellipsis,
text: TextSpan(
children: [
TextSpan(
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(
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(
crossAxisAlignment:
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(),
],
),
);
},
),
],
),
),
),
),
onWillPop: () {
return _onBackPressed(context);
},
);
},
);
}
Future<bool> _onBackPressed(BuildContext context) async {
Navigator.pop(context, true);
return true;
} }
} }
...@@ -41,455 +41,532 @@ class _AddcommonpaymentState extends State<Addcommonpayment> { ...@@ -41,455 +41,532 @@ class _AddcommonpaymentState extends State<Addcommonpayment> {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text("Account"), Container(
DropdownButtonHideUnderline( padding: EdgeInsets.symmetric(horizontal: 10,vertical: 10),
child: Row( margin: EdgeInsets.symmetric(horizontal: 10,vertical: 10),
children: [ decoration: BoxDecoration(
Expanded( color: Colors.white,
child: DropdownButton2<String>( borderRadius: BorderRadius.circular(16)
isExpanded: true, ),
hint: const Row( child: Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
Expanded( children: [
child: Text( Text("Account Details",style: TextStyle( color: AppColors.app_blue,
'Select Account', fontSize: 16,
style: TextStyle(fontSize: 14), fontFamily: "JakartaMedium"),),
overflow: TextOverflow.ellipsis, Text("Account"),
), DropdownButtonHideUnderline(
), child: Row(
], children: [
), Expanded(
items: child: DropdownButton2<String>(
provider.accountTypes isExpanded: true,
.map( hint: const Row(
(act) => DropdownMenuItem<String>( children: [
value: act, Expanded(
child: Text( child: Text(
act, 'Select Account',
style: const TextStyle( style: TextStyle(fontSize: 14),
fontSize: 14, overflow: TextOverflow.ellipsis,
), ),
overflow: TextOverflow.ellipsis, ),
), ],
), ),
) items:
.toList(), provider.accountTypes
value: provider.selectedAccountType, .map(
onChanged: (value) { (act) => DropdownMenuItem<String>(
if (value != null) { value: act,
provider.selectedAccountType = value; child: Text(
print( act,
"statusId:${provider.selectedAccountType}", style: const TextStyle(
); fontSize: 14,
} ),
}, overflow: TextOverflow.ellipsis,
buttonStyleData: ButtonStyleData( ),
height: 50, ),
width: 160, )
padding: const EdgeInsets.only( .toList(),
left: 14, value: provider.selectedAccountType,
right: 14, onChanged: (value) {
), if (value != null) {
decoration: BoxDecoration( provider.selectedAccountType = value;
borderRadius: BorderRadius.circular(14), print(
color: AppColors.text_field_color, "statusId:${provider.selectedAccountType}",
), );
), }
iconStyleData: const IconStyleData( },
icon: Icon(Icons.keyboard_arrow_down_sharp), buttonStyleData: ButtonStyleData(
iconSize: 14, height: 50,
iconEnabledColor: Color(0xFF2D2D2D), width: 160,
iconDisabledColor: Colors.grey, padding: const EdgeInsets.only(
), left: 14,
dropdownStyleData: DropdownStyleData( right: 14,
maxHeight: 200, ),
width: 350, decoration: BoxDecoration(
decoration: BoxDecoration( borderRadius: BorderRadius.circular(14),
borderRadius: BorderRadius.circular(14), color: AppColors.text_field_color,
color: AppColors.text_field_color, ),
), ),
scrollbarTheme: ScrollbarThemeData( iconStyleData: const IconStyleData(
radius: const Radius.circular(15), icon: Icon(Icons.keyboard_arrow_down_sharp),
thickness: MaterialStateProperty.all<double>( iconSize: 14,
6, iconEnabledColor: Color(0xFF2D2D2D),
), iconDisabledColor: Colors.grey,
thumbVisibility: ),
MaterialStateProperty.all<bool>(true), dropdownStyleData: DropdownStyleData(
), maxHeight: 200,
), width: 350,
menuItemStyleData: const MenuItemStyleData( decoration: BoxDecoration(
height: 40, borderRadius: BorderRadius.circular(14),
padding: EdgeInsets.only(left: 14, right: 14), color: AppColors.text_field_color,
), ),
), scrollbarTheme: ScrollbarThemeData(
radius: const Radius.circular(15),
thickness: MaterialStateProperty.all<double>(
6,
),
thumbVisibility:
MaterialStateProperty.all<bool>(true),
),
),
menuItemStyleData: const MenuItemStyleData(
height: 40,
padding: EdgeInsets.only(left: 14, right: 14),
),
),
),
],
),
),
textControllerWidget(
context,
provider.nameController,
"Enter Name",
(p0) {
provider.checkInputsAPI(
context,
"name",
provider.nameController.text,
);
},
),
textControllerWidget(
context,
provider.mobileController,
"Enter Mobile",
(p0) {
provider.checkInputsAPI(
context,
"mob1",
provider.mobileController.text,
);
},
),
Text("State"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<States>(
isExpanded: true,
hint: Text(
'Select State',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.states
.map(
(states) => DropdownMenuItem<States>(
value: states,
child: Text(
states.name ?? '',
style: const TextStyle(
fontSize: 14,
),
overflow: TextOverflow.ellipsis,
),
),
)
.toList(),
value: provider.selectedState,
onChanged: (States? value) {
if (value != null) {
if (provider.states.isNotEmpty) {
provider.selectedState = value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.selectedStateID = value.id!;
print(
"hfjkshfg" +
provider.selectedStateID.toString(),
);
provider.getDistrictAPI(
context,
provider.selectedStateID,
);
}
}
},
buttonStyleData: ButtonStyleData(
height: 50,
width: 160,
padding: const EdgeInsets.only(
left: 14,
right: 14,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
),
iconStyleData: const IconStyleData(
icon: Icon(Icons.keyboard_arrow_down),
iconSize: 12,
iconEnabledColor: Color(0xFF2D2D2D),
iconDisabledColor: Colors.grey,
),
dropdownStyleData: DropdownStyleData(
maxHeight: 200,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
scrollbarTheme: ScrollbarThemeData(
radius: const Radius.circular(15),
thickness: MaterialStateProperty.all<double>(
6,
),
thumbVisibility:
MaterialStateProperty.all<bool>(true),
),
),
menuItemStyleData: const MenuItemStyleData(
height: 40,
padding: EdgeInsets.only(left: 14, right: 14),
),
),
),
],
),
),
Text("District"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<Districts>(
isExpanded: true,
hint: Text(
'Select District',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.districts
.map(
(dist) => DropdownMenuItem<Districts>(
value: dist,
child: Text(
dist.district ?? '',
style: const TextStyle(
fontSize: 14,
),
overflow: TextOverflow.ellipsis,
),
),
)
.toList(),
value: provider.selectedDistricts,
onChanged: (Districts? value) {
if (value != null) {
if (provider.districts.isNotEmpty) {
provider.selectedDistricts = value;
print("Selected ID: ${value.id}");
provider.selectedDistrictId = value.id!;
provider.selectedDistrictValue =
value.district!;
print(
"hfjkshfg" +
provider.selectedDistrictId
.toString(),
);
provider.getSubLocationAPI(
context,
provider.selectedDistrictId,
);
}
}
},
buttonStyleData: ButtonStyleData(
height: 50,
width: 160,
padding: const EdgeInsets.only(
left: 14,
right: 14,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
),
iconStyleData: const IconStyleData(
icon: Icon(Icons.keyboard_arrow_down),
iconSize: 12,
iconEnabledColor: Color(0xFF2D2D2D),
iconDisabledColor: Colors.grey,
),
dropdownStyleData: DropdownStyleData(
maxHeight: 200,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
scrollbarTheme: ScrollbarThemeData(
radius: const Radius.circular(15),
thickness: MaterialStateProperty.all<double>(
6,
),
thumbVisibility:
MaterialStateProperty.all<bool>(true),
),
),
menuItemStyleData: const MenuItemStyleData(
height: 40,
padding: EdgeInsets.only(left: 14, right: 14),
),
),
),
],
),
),
Text("Sub Locality"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<SubLocations>(
isExpanded: true,
hint: Text(
'Select Sub Locality',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.subLocations
.map(
(subloc) =>
DropdownMenuItem<SubLocations>(
value: subloc,
child: Text(
subloc.subLocality ?? '',
style: const TextStyle(
fontSize: 14,
),
overflow: TextOverflow.ellipsis,
),
),
)
.toList(),
value: provider.selectedSubLocations,
onChanged: (SubLocations? value) {
if (value != null) {
if (provider.subLocations.isNotEmpty) {
provider.selectedSubLocations = value;
print("Selected ID: ${value.id}");
provider.selectedSubLocID = value.id!;
provider.selectedSubLocValue =
value.subLocality!;
print(
"hfjkshfg" +
provider.selectedSubLocID.toString(),
);
}
}
},
buttonStyleData: ButtonStyleData(
height: 50,
width: 160,
padding: const EdgeInsets.only(
left: 14,
right: 14,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
),
iconStyleData: const IconStyleData(
icon: Icon(Icons.keyboard_arrow_down),
iconSize: 12,
iconEnabledColor: Color(0xFF2D2D2D),
iconDisabledColor: Colors.grey,
),
dropdownStyleData: DropdownStyleData(
maxHeight: 200,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
scrollbarTheme: ScrollbarThemeData(
radius: const Radius.circular(15),
thickness: MaterialStateProperty.all<double>(
6,
),
thumbVisibility:
MaterialStateProperty.all<bool>(true),
),
),
menuItemStyleData: const MenuItemStyleData(
height: 40,
padding: EdgeInsets.only(left: 14, right: 14),
),
),
),
],
),
),
textControllerWidget(
context,
provider.addressController,
"Enter Address",
(p0) {},
),
],
),
),
SizedBox(height: 15,),
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"
), ),
],
),
),
textControllerWidget(
context,
provider.nameController,
"Enter Name",
(p0) {
provider.checkInputsAPI(
context,
"name",
provider.nameController.text,
);
},
),
textControllerWidget(
context,
provider.mobileController,
"Enter Mobile",
(p0) {
provider.checkInputsAPI(
context,
"mob1",
provider.mobileController.text,
);
},
),
Text("State"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<States>(
isExpanded: true,
hint: Text(
'Select State',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.states
.map(
(states) => DropdownMenuItem<States>(
value: states,
child: Text(
states.name ?? '',
style: const TextStyle(
fontSize: 14,
),
overflow: TextOverflow.ellipsis,
),
),
)
.toList(),
value: provider.selectedState,
onChanged: (States? value) {
if (value != null) {
if (provider.states.isNotEmpty) {
provider.selectedState = value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.selectedStateID = value.id!;
print(
"hfjkshfg" +
provider.selectedStateID.toString(),
);
provider.getDistrictAPI(
context,
provider.selectedStateID,
);
}
}
},
buttonStyleData: ButtonStyleData(
height: 50,
width: 160,
padding: const EdgeInsets.only(
left: 14,
right: 14,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
),
iconStyleData: const IconStyleData(
icon: Icon(Icons.keyboard_arrow_down),
iconSize: 12,
iconEnabledColor: Color(0xFF2D2D2D),
iconDisabledColor: Colors.grey,
),
dropdownStyleData: DropdownStyleData(
maxHeight: 200,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
scrollbarTheme: ScrollbarThemeData(
radius: const Radius.circular(15),
thickness: MaterialStateProperty.all<double>(
6,
),
thumbVisibility:
MaterialStateProperty.all<bool>(true),
),
),
menuItemStyleData: const MenuItemStyleData(
height: 40,
padding: EdgeInsets.only(left: 14, right: 14),
),
),
), ),
], ),
), ),
), Visibility(
visible: provider.isVisible,
Text("District"), child: Column(
DropdownButtonHideUnderline( crossAxisAlignment: CrossAxisAlignment.start,
child: Row( children: [
children: [ Container(
Expanded( margin: EdgeInsets.symmetric(horizontal: 10,vertical: 10),
child: DropdownButton2<Districts>( padding: EdgeInsets.symmetric(horizontal: 10,vertical: 10),
isExpanded: true, decoration: BoxDecoration(
hint: Text( color: Colors.white,
'Select District', borderRadius: BorderRadius.circular(16)
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.districts
.map(
(dist) => DropdownMenuItem<Districts>(
value: dist,
child: Text(
dist.district ?? '',
style: const TextStyle(
fontSize: 14,
),
overflow: TextOverflow.ellipsis,
),
),
)
.toList(),
value: provider.selectedDistricts,
onChanged: (Districts? value) {
if (value != null) {
if (provider.districts.isNotEmpty) {
provider.selectedDistricts = value;
print("Selected ID: ${value.id}");
provider.selectedDistrictId = value.id!;
provider.selectedDistrictValue =
value.district!;
print(
"hfjkshfg" +
provider.selectedDistrictId
.toString(),
);
provider.getSubLocationAPI(
context,
provider.selectedDistrictId,
);
}
}
},
buttonStyleData: ButtonStyleData(
height: 50,
width: 160,
padding: const EdgeInsets.only(
left: 14,
right: 14,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
),
iconStyleData: const IconStyleData(
icon: Icon(Icons.keyboard_arrow_down),
iconSize: 12,
iconEnabledColor: Color(0xFF2D2D2D),
iconDisabledColor: Colors.grey,
), ),
dropdownStyleData: DropdownStyleData( child: Column(
maxHeight: 200, crossAxisAlignment: CrossAxisAlignment.start,
decoration: BoxDecoration( children: [
borderRadius: BorderRadius.circular(14), Text("Bank Details",style: TextStyle(
color: AppColors.text_field_color, color: AppColors.app_blue,
), fontSize: 16,
scrollbarTheme: ScrollbarThemeData( fontFamily: "JakartaMedium"
radius: const Radius.circular(15), ),),
thickness: MaterialStateProperty.all<double>( textControllerWidget(
6, context,
provider.bankNameController,
"Bank Name",
(p0) {},
), ),
thumbVisibility: textControllerWidget(
MaterialStateProperty.all<bool>(true), context,
), provider.branchNameController,
), "Bank Branch",
menuItemStyleData: const MenuItemStyleData( (p0) {},
height: 40, ),
padding: EdgeInsets.only(left: 14, right: 14), textControllerWidget(
context,
provider.bankIfscCotroller,
"Bank IFSC",
(p0) {},
),
textControllerWidget(
context,
provider.bankHolderNameController,
"Bank Holder Name",
(p0) {},
),
textControllerWidget(
context,
provider.bankAcNameController,
"Bank Account Name",
(p0) {},
),
textControllerWidget(
context,
provider.bankUpiController,
"Bank UPI ID",
(p0) {},
),
],
), ),
), ),
), Container(
], margin: EdgeInsets.symmetric(horizontal: 10,vertical: 10),
), padding: EdgeInsets.symmetric(horizontal: 10,vertical: 10),
), decoration: BoxDecoration(
Text("Sub Locality"), color: Colors.white,
DropdownButtonHideUnderline( borderRadius: BorderRadius.circular(16)
child: Row(
children: [
Expanded(
child: DropdownButton2<SubLocations>(
isExpanded: true,
hint: Text(
'Select Sub Locality',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.subLocations
.map(
(subloc) =>
DropdownMenuItem<SubLocations>(
value: subloc,
child: Text(
subloc.subLocality ?? '',
style: const TextStyle(
fontSize: 14,
),
overflow: TextOverflow.ellipsis,
),
),
)
.toList(),
value: provider.selectedSubLocations,
onChanged: (SubLocations? value) {
if (value != null) {
if (provider.subLocations.isNotEmpty) {
provider.selectedSubLocations = value;
print("Selected ID: ${value.id}");
provider.selectedSubLocID = value.id!;
provider.selectedSubLocValue =
value.subLocality!;
print(
"hfjkshfg" +
provider.selectedSubLocID.toString(),
);
}
}
},
buttonStyleData: ButtonStyleData(
height: 50,
width: 160,
padding: const EdgeInsets.only(
left: 14,
right: 14,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
), ),
iconStyleData: const IconStyleData( child: Column(
icon: Icon(Icons.keyboard_arrow_down), crossAxisAlignment: CrossAxisAlignment.start,
iconSize: 12, children: [
iconEnabledColor: Color(0xFF2D2D2D), Text("Contact Details",style: TextStyle(
iconDisabledColor: Colors.grey, color: AppColors.app_blue,
), fontSize: 16,
dropdownStyleData: DropdownStyleData( fontFamily: "JakartaMedium"
maxHeight: 200, ),),
decoration: BoxDecoration( textControllerWidget(
borderRadius: BorderRadius.circular(14), context,
color: AppColors.text_field_color, provider.contactPersonController,
), "Contact Person Name",
scrollbarTheme: ScrollbarThemeData( (p0) {},
radius: const Radius.circular(15),
thickness: MaterialStateProperty.all<double>(
6,
), ),
thumbVisibility: textControllerWidget(
MaterialStateProperty.all<bool>(true), context,
), provider.contectPersonDesignationController,
), "Contact Person Designation",
menuItemStyleData: const MenuItemStyleData( (p0) {},
height: 40, ),
padding: EdgeInsets.only(left: 14, right: 14), textControllerWidget(
context,
provider.contectPersonAltMobController,
"Alternative Mobile Number",
(p0) {
provider.checkInputsAPI(context, "mob2", provider.contectPersonAltMobController.text);
},
),
textControllerWidget(
context,
provider.contectPersonTeleController,
"Telephone Number",
(p0) {},
),
textControllerWidget(
context,
provider.contectPersonMailController,
"Customer Mail ID",
(p0) {},
),
],
), ),
), )
), ],
], ),
), ),
), ],
textControllerWidget( )
context,
provider.addressController,
"Enter Address",
(p0) {},
),
textControllerWidget(
context,
provider.bankNameController,
"Bank Name",
(p0) {},
),
textControllerWidget(
context,
provider.branchNameController,
"Bank Branch",
(p0) {},
),
textControllerWidget(
context,
provider.bankIfscCotroller,
"Bank IFSC",
(p0) {},
),
textControllerWidget(
context,
provider.bankHolderNameController,
"Bank Holder Name",
(p0) {},
),
textControllerWidget(
context,
provider.bankAcNameController,
"Bank Account Name",
(p0) {},
),
textControllerWidget(
context,
provider.bankUpiController,
"Bank UPI ID",
(p0) {},
),
textControllerWidget(
context,
provider.contactPersonController,
"Contact Person Name",
(p0) {},
),
textControllerWidget(
context,
provider.contectPersonDesignationController,
"Contact Person Designation",
(p0) {},
),
textControllerWidget(
context,
provider.contectPersonAltMobController,
"Alternative Mobile Number",
(p0) {
provider.checkInputsAPI(context, "mob2", provider.contectPersonAltMobController.text);
},
),
textControllerWidget(
context,
provider.contectPersonTeleController,
"Telephone Number",
(p0) {},
),
textControllerWidget(
context,
provider.contectPersonMailController,
"Customer Mail ID",
(p0) {},
),
], ],
), ),
), ),
...@@ -504,7 +581,7 @@ class _AddcommonpaymentState extends State<Addcommonpayment> { ...@@ -504,7 +581,7 @@ class _AddcommonpaymentState extends State<Addcommonpayment> {
child: Container( child: Container(
height: 45, height: 45,
alignment: Alignment.center, alignment: Alignment.center,
margin: EdgeInsets.symmetric(horizontal: 10), 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,
......
...@@ -50,7 +50,7 @@ class _CommondashboardState extends State<Commondashboard> { ...@@ -50,7 +50,7 @@ class _CommondashboardState extends State<Commondashboard> {
mainAxisSpacing: 10, mainAxisSpacing: 10,
), ),
itemBuilder: (context, index) { itemBuilder: (context, index) {
final icons = ["gent_gen_det", "gent_reg_comp"]; final icons = ["comm_ic_1", "comm_ic_2"];
return InkResponse( return InkResponse(
onTap: () { onTap: () {
switch (gridPages[index].pageName!) { switch (gridPages[index].pageName!) {
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:generp/Utils/app_colors.dart';
import 'package:generp/Utils/commonWidgets.dart';
import 'package:provider/provider.dart';
import '../../Notifiers/financeProvider/paymentRequisitionPaymentsListProvider.dart';
class Transactiondetails extends StatefulWidget { class Transactiondetails extends StatefulWidget {
const Transactiondetails({super.key}); final paymentID;
final type;
const Transactiondetails({super.key, this.paymentID, this.type});
@override @override
State<Transactiondetails> createState() => _TransactiondetailsState(); State<Transactiondetails> createState() => _TransactiondetailsState();
} }
class _TransactiondetailsState extends State<Transactiondetails> { class _TransactiondetailsState extends State<Transactiondetails> {
@override
void initState() {
// TODO: implement initState
super.initState();
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Paymentrequisitionpaymentslistprovider>(
context,
listen: false,
);
provider.paymentsListDetailsAPI(context, widget.paymentID);
});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return const Placeholder(); return Consumer<Paymentrequisitionpaymentslistprovider>(
builder: (context, provider, child) {
var details = provider.paymentDetails;
return Scaffold(
appBar: appbar(context, "Details"),
backgroundColor: AppColors.scaffold_bg_color,
body: Container(
margin: EdgeInsets.symmetric(vertical: 10,horizontal: 10),
child: SingleChildScrollView(
child: 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: [
Expanded(
flex: 1,
child: SizedBox(
child:
widget.type == "Credit"
? Image.asset(
"assets/images/trans_debit.png",
height: 45,
width: 45,
fit: BoxFit.contain,
)
: Image.asset(
"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(
widget.type == "Credit"
? "Debited Amount"
: "Credited Amount",
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 12,
),
),
RichText(
textAlign: TextAlign.right,
maxLines: 1,
overflow: TextOverflow.ellipsis,
text: TextSpan(
children: [
TextSpan(
text:
widget.type == "Credit" ? "-" : "+",
style: TextStyle(
color: Color(0xFF2D2D2D),
fontSize: 13,
fontFamily: "JakartaRegular",
),
),
TextSpan(
text: "₹${details.amount}",
style: TextStyle(
color: Color(0xFF2D2D2D),
fontSize: 13,
fontFamily: "JakartaMedium",
),
),
],
),
),
],
),
),
),
],
),
Divider(thickness: 0.5, color: Color(0xFFd7d7d7)),
...List.generate(5, (j) {
final headings = [
"ID",
"Date",
"Account",
"Ref Type",
"Description",
];
final subHeadings = [
details.id ?? "-",
details.createdDatetime ?? "-",
details.accountName ?? "-",
details.refType ?? "-",
details.description ?? "-",
];
return Container(
padding: EdgeInsets.symmetric(vertical: 5),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Text(
headings[j],
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.semi_black,
),
),
),
SizedBox(width: 15),
Expanded(
child: Text(
subHeadings[j] ?? "-",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.grey_thick,
),
),
),
],
),
);
}),
],
),
),
),
),
);
},
);
} }
} }
import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
class Commondaterangefilter { class Commondaterangefilter {
final List<String> filterItems = [ final List<String> filterItems = [
...@@ -186,30 +187,54 @@ class Commondaterangefilter { ...@@ -186,30 +187,54 @@ class Commondaterangefilter {
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
IconButton( GestureDetector(
icon: Icon(Icons.chevron_left, color: Colors.blue[600]), onTap: displayedMonth.isAfter(DateTime(2020))
onPressed: displayedMonth.isAfter(DateTime(2020))
? () { ? () {
setState(() { setState(() {
displayedMonth = DateTime(displayedMonth.year, displayedMonth.month - 1); displayedMonth = DateTime(displayedMonth.year, displayedMonth.month - 1);
}); });
} }
: null, : null,
child: SvgPicture.asset(
"assets/svg/arrow_left.svg",
),
), ),
// IconButton(
// icon: Icon(Icons.chevron_left, color: Colors.blue[600]),
// onPressed: displayedMonth.isAfter(DateTime(2020))
// ? () {
// setState(() {
// displayedMonth = DateTime(displayedMonth.year, displayedMonth.month - 1);
// });
// }
// : null,
// ),
Text( Text(
'${_monthName(displayedMonth.month)} ${displayedMonth.year}', '${_monthName(displayedMonth.month)} ${displayedMonth.year}',
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600), style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
), ),
IconButton( GestureDetector(
icon: Icon(Icons.chevron_right, color: Colors.blue[600]), onTap: displayedMonth.isBefore(DateTime(2100))
onPressed: displayedMonth.isBefore(DateTime(2100))
? () { ? () {
setState(() { setState(() {
displayedMonth = DateTime(displayedMonth.year, displayedMonth.month + 1); displayedMonth = DateTime(displayedMonth.year, displayedMonth.month + 1);
}); });
} }
: null, : null,
child: SvgPicture.asset(
"assets/svg/arrow_right_new.svg",
),
), ),
// IconButton(
// icon: Icon(Icons.chevron_right, color: Colors.blue[600]),
// onPressed: displayedMonth.isBefore(DateTime(2100))
// ? () {
// setState(() {
// displayedMonth = DateTime(displayedMonth.year, displayedMonth.month + 1);
// });
// }
// : null,
// ),
], ],
), ),
Container( Container(
......
...@@ -60,7 +60,7 @@ class _AllpaymentrequesitionlistsbymodesState ...@@ -60,7 +60,7 @@ class _AllpaymentrequesitionlistsbymodesState
onTap: () { onTap: () {
_showOptionsSheet(context); _showOptionsSheet(context);
}, },
child: Icon(CupertinoIcons.down_arrow), child: SvgPicture.asset("assets/svg/ic_download.svg",),
), ),
InkResponse( InkResponse(
...@@ -94,7 +94,7 @@ class _AllpaymentrequesitionlistsbymodesState ...@@ -94,7 +94,7 @@ class _AllpaymentrequesitionlistsbymodesState
print("Bottom sheet closed without selection"); print("Bottom sheet closed without selection");
} }
}, },
child: Icon(CupertinoIcons.color_filter), child:SvgPicture.asset("assets/svg/filter_ic.svg",height: 25,),
), ),
], ],
), ),
......
...@@ -52,7 +52,7 @@ class _PaymentlistpaymentrequisitionState extends State<Paymentlistpaymentrequis ...@@ -52,7 +52,7 @@ class _PaymentlistpaymentrequisitionState extends State<Paymentlistpaymentrequis
onTap: () { onTap: () {
_showOptionsSheet(context); _showOptionsSheet(context);
}, },
child: Icon(CupertinoIcons.down_arrow), child: SvgPicture.asset("assets/svg/ic_download.svg",),
), ),
InkResponse( InkResponse(
onTap: () async { onTap: () async {
...@@ -80,13 +80,17 @@ class _PaymentlistpaymentrequisitionState extends State<Paymentlistpaymentrequis ...@@ -80,13 +80,17 @@ class _PaymentlistpaymentrequisitionState extends State<Paymentlistpaymentrequis
print("Bottom sheet closed without selection"); print("Bottom sheet closed without selection");
} }
}, },
child: Icon(CupertinoIcons.color_filter), child: SvgPicture.asset("assets/svg/filter_ic.svg",height: 25,),
), ),
], ],
), ),
), ),
backgroundColor: AppColors.scaffold_bg_color, backgroundColor: AppColors.scaffold_bg_color,
body: Container( body: provider.isLoading
? Center(child: CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation<Color>(
AppColors.app_blue)
)):Container(
child: SingleChildScrollView( child: SingleChildScrollView(
child: Column( child: Column(
children: [ children: [
......
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