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';
import '../../Models/commonModels/DistrictsResponse.dart';
import '../../Models/commonModels/SubLocationsResponse.dart';
import '../../Models/commonModels/commonAccountlistResponse.dart';
import '../../Models/commonModels/commonAddAccountsViewResponse.dart';
class Accountslistprovider extends ChangeNotifier {
......@@ -26,10 +27,27 @@ class Accountslistprovider extends ChangeNotifier {
TextEditingController contectPersonTeleController = TextEditingController();
TextEditingController contectPersonMailController = TextEditingController();
TextEditingController mobileNumberController = TextEditingController();
TextEditingController companyNameController = TextEditingController();
List<States> _states = [];
List<Districts> _districts = [];
List<SubLocations> _subLocations = [];
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;
......@@ -38,7 +56,12 @@ class Accountslistprovider extends ChangeNotifier {
List<SubLocations> get subLocations => _subLocations;
List<String> get accountTypes => _accountTypes;
List<AccountList> get accountsList => _accountsList;
bool get isVisible => _isVisible;
set isVisible (bool value){
_isVisible = value;
notifyListeners();
}
States? _selectedState;
Districts? _selectedDistricts;
SubLocations? _selectedSubLocations;
......@@ -242,6 +265,42 @@ class Accountslistprovider extends ChangeNotifier {
} 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(){
_selectedAccountType = null;
_selectedStateID=null;
......
......@@ -484,6 +484,7 @@ class Requestionlistprovider extends ChangeNotifier {
}
} catch (e, s) {}
}
void showDatePickerDialog(BuildContext context) {
showCupertinoModalPopup<void>(
context: context,
......@@ -546,6 +547,7 @@ class Requestionlistprovider extends ChangeNotifier {
),
);
}
List<List<String>> prepareExportData() {
final headers = [
'ID',
......@@ -804,6 +806,7 @@ class Requestionlistprovider extends ChangeNotifier {
bankIfscController.clear();
bankAcHolderController.clear();
bankUpiController.clear();
paymentReferenceController.clear();
_selectedAccounts = null;
_selectedPayment = null;
......
......@@ -308,12 +308,18 @@ class Paymentreceiptsprovider extends ChangeNotifier{
Future<void> paymentsListAPI(context,from,to) async {
try{
var prov = Provider.of<HomescreenNotifier>(context,listen: false);
_isLoading = true;
notifyListeners();
final data = await ApiCalling.paymentRequisitionPaymentReceiptListAPI(prov.empId, prov.session,from,to);
if(data!=null){
if(data.error=="0"){
_receiptsList = data.receiptsList!;
_isLoading = false;
notifyListeners();
}else if(data.error=="1"){
_isLoading = false;
}
notifyListeners();
}
}catch(e,s){
......
......@@ -25,19 +25,27 @@ class Paymentrequisitionpaymentslistprovider extends ChangeNotifier{
List<String> _subHeadings = [];
List<PaymentsList> get paymentsList => _paymentsList;
PaymentDetails get paymentDetails => _paymentDetails;
bool _isLoading = true;
List<String> get Headings => _headings;
List<String> get subHeadings => _subHeadings;
bool get isLoading => _isLoading;
Future<void> paymentsListAPI(context,from,to) async {
try{
var prov = Provider.of<HomescreenNotifier>(context,listen: false);
_paymentsList.clear();
_isLoading = true;
notifyListeners();
final data = await ApiCalling.paymentRequisitionPaymentListAPI(prov.empId, prov.session,from,to);
if(data!=null){
if(data.error=="0"){
_isLoading = false;
_paymentsList = data.paymentsList!;
notifyListeners();
}else if(data.error=="1"){
_isLoading = false;
}
notifyListeners();
}
}catch(e,s){
......
String didPushed = "";
String didPopped = "";
\ No newline at end of file
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'GlobalConstants.dart';
import 'app_colors.dart';
PreferredSizeWidget appbar(BuildContext context, title) {
......@@ -92,4 +93,24 @@ Widget Emptywidget(BuildContext context){
child: Center(
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';
import 'package:generp/Notifiers/TodayMontlyVisitsProvider.dart';
import 'package:generp/Notifiers/UpdatePasswordProvider.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/commonPagesProvider.dart';
import 'package:generp/Notifiers/financeProvider/DashboardProvider.dart';
......@@ -37,7 +38,9 @@ import 'package:generp/screens/HomeScreen.dart';
import 'package:generp/screens/splash.dart';
import 'package:provider/provider.dart';
import 'Notifiers/commonProvider/accountLedgerProvider.dart';
import 'Notifiers/financeProvider/RequesitionLidtDetailsProvider.dart';
import 'Utils/commonWidgets.dart';
const AndroidNotificationChannel channel = AndroidNotificationChannel(
'generp_channel', // id
......@@ -220,10 +223,21 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => Paymentreceiptsprovider(),),
ChangeNotifierProvider(create: (_) => Commonpagesprovider(),),
ChangeNotifierProvider(create: (_) => Accountslistprovider(),),
ChangeNotifierProvider(create: (_) => Accountdetailsprovider(),),
ChangeNotifierProvider(create: (_) => Accountledgerprovider(),),
],
child: Builder(
builder: (BuildContext context) {
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,
theme: ThemeData(
fontFamily: 'JakartaRegular',
......
......@@ -130,8 +130,8 @@ class _MyHomePageState extends State<MyHomePage> {
"Nearby",
"Inventory",
"Whizzdom",
"Common",
"Finance",
// "Common",
// "Finance",
];
final icons = [
"assets/svg/home_icons_1.svg",
......@@ -141,8 +141,8 @@ class _MyHomePageState extends State<MyHomePage> {
"assets/svg/home_icons_5.svg",
"assets/svg/home_icons_6.svg",
"assets/svg/home_icons_81.svg",
"assets/svg/home_icons_8.svg",
"assets/svg/home_icons_8.svg",
// "assets/svg/home_icons_9.svg",
// "assets/svg/home_icons_10.svg",
];
final requiredRoles = [
"430",
......@@ -152,8 +152,8 @@ class _MyHomePageState extends State<MyHomePage> {
"433",
"432",
"431",
"430",
"430",
// "430",
// "430",
];
final filteredItems = <Map<String, String>>[];
......
......@@ -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) ...[
Container(
......
import 'package:dropdown_button2/dropdown_button2.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 {
const Accountledger({super.key});
......@@ -7,8 +19,571 @@ class Accountledger extends StatefulWidget {
}
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
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_svg/svg.dart';
import 'package:generp/Notifiers/commonProvider/accountsListProvider.dart';
import 'package:generp/Utils/app_colors.dart';
import 'package:generp/Utils/commonWidgets.dart';
import 'package:generp/screens/commom/accountsListDetails.dart';
import 'package:provider/provider.dart';
class Accountslist extends StatefulWidget {
......@@ -11,24 +14,368 @@ class Accountslist extends StatefulWidget {
}
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
Widget build(BuildContext context) {
return Consumer(builder: (context, provider, child) {
return WillPopScope(
return Consumer<Accountslistprovider>(
builder: (context, provider, child) {
var accountList = provider.accountsList;
print(accountList.length);
return WillPopScope(
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,
body: Container(
child: SingleChildScrollView(
controller: scrollController,
child: Column(
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_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 {
const Accountslistdetails({super.key});
final accountID;
const Accountslistdetails({super.key, this.accountID});
@override
State<Accountslistdetails> createState() => _AccountslistdetailsState();
}
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
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> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("Account"),
DropdownButtonHideUnderline(
child: Row(
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,
onChanged: (value) {
if (value != null) {
provider.selectedAccountType = value;
print(
"statusId:${provider.selectedAccountType}",
);
}
},
buttonStyleData: ButtonStyleData(
height: 50,
width: 160,
padding: const EdgeInsets.only(
left: 14,
right: 14,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
),
iconStyleData: const IconStyleData(
icon: Icon(Icons.keyboard_arrow_down_sharp),
iconSize: 14,
iconEnabledColor: Color(0xFF2D2D2D),
iconDisabledColor: Colors.grey,
),
dropdownStyleData: DropdownStyleData(
maxHeight: 200,
width: 350,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
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),
),
),
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.start,
children: [
Text("Account Details",style: TextStyle( color: AppColors.app_blue,
fontSize: 16,
fontFamily: "JakartaMedium"),),
Text("Account"),
DropdownButtonHideUnderline(
child: Row(
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,
onChanged: (value) {
if (value != null) {
provider.selectedAccountType = value;
print(
"statusId:${provider.selectedAccountType}",
);
}
},
buttonStyleData: ButtonStyleData(
height: 50,
width: 160,
padding: const EdgeInsets.only(
left: 14,
right: 14,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
),
iconStyleData: const IconStyleData(
icon: Icon(Icons.keyboard_arrow_down_sharp),
iconSize: 14,
iconEnabledColor: Color(0xFF2D2D2D),
iconDisabledColor: Colors.grey,
),
dropdownStyleData: DropdownStyleData(
maxHeight: 200,
width: 350,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
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),
),
),
),
],
),
),
),
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,
Visibility(
visible: provider.isVisible,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
margin: EdgeInsets.symmetric(horizontal: 10,vertical: 10),
padding: EdgeInsets.symmetric(horizontal: 10,vertical: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16)
),
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,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("Bank Details",style: TextStyle(
color: AppColors.app_blue,
fontSize: 16,
fontFamily: "JakartaMedium"
),),
textControllerWidget(
context,
provider.bankNameController,
"Bank Name",
(p0) {},
),
thumbVisibility:
MaterialStateProperty.all<bool>(true),
),
),
menuItemStyleData: const MenuItemStyleData(
height: 40,
padding: EdgeInsets.only(left: 14, right: 14),
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) {},
),
],
),
),
),
],
),
),
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,
),
Container(
margin: EdgeInsets.symmetric(horizontal: 10,vertical: 10),
padding: EdgeInsets.symmetric(horizontal: 10,vertical: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16)
),
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,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("Contact Details",style: TextStyle(
color: AppColors.app_blue,
fontSize: 16,
fontFamily: "JakartaMedium"
),),
textControllerWidget(
context,
provider.contactPersonController,
"Contact Person Name",
(p0) {},
),
thumbVisibility:
MaterialStateProperty.all<bool>(true),
),
),
menuItemStyleData: const MenuItemStyleData(
height: 40,
padding: EdgeInsets.only(left: 14, right: 14),
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) {},
),
],
),
),
),
],
)
],
),
),
),
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> {
child: Container(
height: 45,
alignment: Alignment.center,
margin: EdgeInsets.symmetric(horizontal: 10),
margin: EdgeInsets.symmetric(horizontal: 10,vertical: 15),
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 5),
decoration: BoxDecoration(
color: AppColors.app_blue,
......
......@@ -50,7 +50,7 @@ class _CommondashboardState extends State<Commondashboard> {
mainAxisSpacing: 10,
),
itemBuilder: (context, index) {
final icons = ["gent_gen_det", "gent_reg_comp"];
final icons = ["comm_ic_1", "comm_ic_2"];
return InkResponse(
onTap: () {
switch (gridPages[index].pageName!) {
......
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 {
const Transactiondetails({super.key});
final paymentID;
final type;
const Transactiondetails({super.key, this.paymentID, this.type});
@override
State<Transactiondetails> createState() => _TransactiondetailsState();
}
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
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:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
class Commondaterangefilter {
final List<String> filterItems = [
......@@ -186,30 +187,54 @@ class Commondaterangefilter {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
IconButton(
icon: Icon(Icons.chevron_left, color: Colors.blue[600]),
onPressed: displayedMonth.isAfter(DateTime(2020))
GestureDetector(
onTap: displayedMonth.isAfter(DateTime(2020))
? () {
setState(() {
displayedMonth = DateTime(displayedMonth.year, displayedMonth.month - 1);
});
}
: 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(
'${_monthName(displayedMonth.month)} ${displayedMonth.year}',
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
),
IconButton(
icon: Icon(Icons.chevron_right, color: Colors.blue[600]),
onPressed: displayedMonth.isBefore(DateTime(2100))
GestureDetector(
onTap: displayedMonth.isBefore(DateTime(2100))
? () {
setState(() {
displayedMonth = DateTime(displayedMonth.year, displayedMonth.month + 1);
});
}
: 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(
......
......@@ -60,7 +60,7 @@ class _AllpaymentrequesitionlistsbymodesState
onTap: () {
_showOptionsSheet(context);
},
child: Icon(CupertinoIcons.down_arrow),
child: SvgPicture.asset("assets/svg/ic_download.svg",),
),
InkResponse(
......@@ -94,7 +94,7 @@ class _AllpaymentrequesitionlistsbymodesState
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
onTap: () {
_showOptionsSheet(context);
},
child: Icon(CupertinoIcons.down_arrow),
child: SvgPicture.asset("assets/svg/ic_download.svg",),
),
InkResponse(
onTap: () async {
......@@ -80,13 +80,17 @@ class _PaymentlistpaymentrequisitionState extends State<Paymentlistpaymentrequis
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,
body: Container(
body: provider.isLoading
? Center(child: CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation<Color>(
AppColors.app_blue)
)):Container(
child: SingleChildScrollView(
child: Column(
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