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

09-07-2025 By Sai Srinivas

Network and Finance Module issue and Back
parent 2ade5aad
...@@ -24,6 +24,21 @@ class Paymentdetailsprovider extends ChangeNotifier { ...@@ -24,6 +24,21 @@ class Paymentdetailsprovider extends ChangeNotifier {
TextEditingController altMobController = TextEditingController(); TextEditingController altMobController = TextEditingController();
TextEditingController telController = TextEditingController(); TextEditingController telController = TextEditingController();
TextEditingController emailController = TextEditingController(); TextEditingController emailController = TextEditingController();
String? nameError;
String? designationError;
String? mobError;
String? altMobError;
String? telError;
String? emailError;
String? selectContactError;
String? selectPaymentError;
String? selectAmountError;
String? ReferenceError;
String? imageError;
List<PaymentModeList> _payment_mode_drop_down = []; List<PaymentModeList> _payment_mode_drop_down = [];
List<Contacts> _contacts_drop_down = []; List<Contacts> _contacts_drop_down = [];
String _paymentModeID = ""; String _paymentModeID = "";
...@@ -106,6 +121,7 @@ class Paymentdetailsprovider extends ChangeNotifier { ...@@ -106,6 +121,7 @@ class Paymentdetailsprovider extends ChangeNotifier {
_selectContact = value; _selectContact = value;
_contact = value?.name; _contact = value?.name;
_contactID = value?.mob1; _contactID = value?.mob1;
selectContactError = null;
notifyListeners(); notifyListeners();
} }
...@@ -113,11 +129,13 @@ class Paymentdetailsprovider extends ChangeNotifier { ...@@ -113,11 +129,13 @@ class Paymentdetailsprovider extends ChangeNotifier {
_selectPaymentModeList = value; _selectPaymentModeList = value;
_PaymentMode = value?.name ?? ""; _PaymentMode = value?.name ?? "";
_paymentModeID = value?.id ?? ""; _paymentModeID = value?.id ?? "";
selectPaymentError = null;
notifyListeners(); notifyListeners();
} }
set paymentModeID(value) { set paymentModeID(value) {
_paymentModeID = value; _paymentModeID = value;
selectPaymentError = null;
notifyListeners(); notifyListeners();
} }
...@@ -133,6 +151,7 @@ class Paymentdetailsprovider extends ChangeNotifier { ...@@ -133,6 +151,7 @@ class Paymentdetailsprovider extends ChangeNotifier {
set contactID(value) { set contactID(value) {
_contactID = value; _contactID = value;
selectContactError = null;
notifyListeners(); notifyListeners();
} }
...@@ -184,6 +203,12 @@ class Paymentdetailsprovider extends ChangeNotifier { ...@@ -184,6 +203,12 @@ class Paymentdetailsprovider extends ChangeNotifier {
_paymentModeID = ""; _paymentModeID = "";
} }
Amountcontroller.clear();
Referencecontroller.clear();
_image = null;
_imageName = null;
_image_picked = 0;
notifyListeners(); notifyListeners();
} else {} } else {}
} else { } else {
...@@ -204,6 +229,9 @@ class Paymentdetailsprovider extends ChangeNotifier { ...@@ -204,6 +229,9 @@ class Paymentdetailsprovider extends ChangeNotifier {
// if(!CheckValidations(context,reference, amount)){ // if(!CheckValidations(context,reference, amount)){
// return; // return;
// } // }
if(!validateSubmit(context)){
return;
}
print("came here"); print("came here");
var homeProvider = Provider.of<HomescreenNotifier>( var homeProvider = Provider.of<HomescreenNotifier>(
context, context,
...@@ -228,6 +256,11 @@ class Paymentdetailsprovider extends ChangeNotifier { ...@@ -228,6 +256,11 @@ class Paymentdetailsprovider extends ChangeNotifier {
print(data.paymentCollectionId); print(data.paymentCollectionId);
_CollectionId = data.paymentCollectionId ?? 0; _CollectionId = data.paymentCollectionId ?? 0;
notifyListeners(); notifyListeners();
Future.delayed(Duration(microseconds: 200), () {
if (_CollectionId != 0) {
showOTPSheetSheet(context);
}
});
} else {} } else {}
} else { } else {
// SharedpreferencesService().clearPreferences(); // SharedpreferencesService().clearPreferences();
...@@ -242,6 +275,241 @@ class Paymentdetailsprovider extends ChangeNotifier { ...@@ -242,6 +275,241 @@ class Paymentdetailsprovider extends ChangeNotifier {
} }
} }
Future<void> showOTPSheetSheet(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: Padding(
padding: EdgeInsets.only(
bottom:
MediaQuery.of(
context,
).viewInsets.bottom, // This handles keyboard
),
child: Container(
margin: EdgeInsets.only(
bottom: 15,
left: 15,
right: 15,
top: 10,
),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Align(
alignment: Alignment.center,
child: Text(
"Enter OTP",
style: TextStyle(
color: AppColors.app_blue,
fontSize: 16,
),
),
),
SizedBox(height: 15),
Column(
children: [
Container(
alignment: Alignment.center,
height: 50,
margin: EdgeInsets.only(
left: 5.0,
right: 5.0,
),
child: PinCodeTextField(
appContext: context,
pastedTextStyle: TextStyle(
fontWeight: FontWeight.bold,
),
length: 4,
blinkWhenObscuring: true,
animationType: AnimationType.fade,
// validator: (v) {
// if (v!.length < 3) {
// return "I'm from validator";
// } else {
// return null;
// }
// },
pinTheme: PinTheme(
shape: PinCodeFieldShape.underline,
borderRadius: BorderRadius.circular(16),
fieldHeight: 60,
fieldWidth: 60,
activeFillColor:
AppColors.text_field_color,
activeColor: AppColors.app_blue,
selectedColor: AppColors.text_field_color,
selectedFillColor:
AppColors.text_field_color,
inactiveFillColor:
AppColors.text_field_color,
inactiveColor: AppColors.text_field_color,
fieldOuterPadding: EdgeInsets.only(
left: 5,
right: 5,
),
inactiveBorderWidth: 0,
activeBorderWidth: 0.5,
),
enableActiveFill: true,
keyboardType: TextInputType.number,
boxShadows: const [
BoxShadow(
offset: Offset(0, 1),
color: Colors.black12,
blurRadius: 10,
),
],
onCompleted: (String enteredCode) {
enteredOtp = enteredCode;
// clearText = true;
OTPVerifyAPI(context);
debugPrint("Completed");
},
// onTap: () {
// print("Pressed");
// },
onChanged: (String enteredCode) {
debugPrint(enteredCode);
enteredOtp = enteredCode;
},
onSubmitted: (String enteredCode) {
enteredOtp = enteredCode;
// clearText = true;
// Verify_otp();
},
enablePinAutofill: true,
useExternalAutoFillGroup: true,
beforeTextPaste: (text) {
debugPrint("Allowing to paste $text");
//if you return true then it will show the paste confirmation dialog. Otherwise if false, then nothing will happen.
//but you can show anything you want here, like your pop up saying wrong paste format or etc
return true;
},
),
),
SizedBox(height: 15),
Container(
alignment: Alignment.center,
height: 45,
margin: EdgeInsets.only(
left: 5.0,
right: 5.0,
top: 5.0,
bottom: 5.0,
),
child: InkResponse(
onTap: () {
ResendOtpAPI(context);
},
child: Center(
child: Text(
"Resend",
style: TextStyle(
fontWeight: FontWeight.w300,
),
),
),
),
),
InkResponse(
onTap: () {
Navigator.of(context).pop(false);
OTPVerifyAPI(context);
},
child: Container(
alignment: Alignment.center,
height: 45,
margin: EdgeInsets.only(
left: 5.0,
right: 5.0,
top: 5.0,
bottom: 5.0,
),
decoration: BoxDecoration(
color: AppColors.app_blue, //1487C9
borderRadius: BorderRadius.circular(15.0),
),
child: Center(
child: Text(
"Submit",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 15,
fontFamily: "JakartaMedium",
color: Colors.white,
),
),
),
),
),
],
),
],
),
),
),
),
);
},
);
},
);
}
bool validateSubmit(context){
selectContactError = null;
selectPaymentError = null;
selectAmountError = null;
ReferenceError = null;
imageError = null;
bool isValid = true;
print("clickedw");
if (_selectContact == null || _contactID.isEmpty) {
selectContactError = "Please Select Contact";
isValid = false;
}
if (_selectPaymentModeList==null||_paymentModeID == null) {
selectPaymentError = "Please Select Payment Type";
isValid = false;
}
if(Amountcontroller.text.trim().isEmpty){
selectAmountError = "Please Enter Amount";
isValid = false;
}
if(Referencecontroller.text.trim().isEmpty){
ReferenceError = "Please Enter Reference Number";
isValid = false;
}
if (_image_picked == 0) {
imageError = "Please add attachment";
isValid = false;
}
notifyListeners();
return isValid;
}
Future<void> OTPVerifyAPI(BuildContext context) async { Future<void> OTPVerifyAPI(BuildContext context) async {
try { try {
var homeProvider = Provider.of<HomescreenNotifier>( var homeProvider = Provider.of<HomescreenNotifier>(
...@@ -275,6 +543,11 @@ class Paymentdetailsprovider extends ChangeNotifier { ...@@ -275,6 +543,11 @@ class Paymentdetailsprovider extends ChangeNotifier {
emailController.clear(); emailController.clear();
_imageName = null; _imageName = null;
_image_picked = 0; _image_picked = 0;
selectContactError = null;
selectPaymentError = null;
selectAmountError = null;
ReferenceError = null;
imageError = null;
notifyListeners(); notifyListeners();
Navigator.pop(context, true); Navigator.pop(context, true);
Navigator.pop(context, true); Navigator.pop(context, true);
...@@ -340,6 +613,7 @@ class Paymentdetailsprovider extends ChangeNotifier { ...@@ -340,6 +613,7 @@ class Paymentdetailsprovider extends ChangeNotifier {
_image = File(galleryImage!.path); _image = File(galleryImage!.path);
_imageName = File(galleryImage!.name); _imageName = File(galleryImage!.name);
_image_picked = 1; _image_picked = 1;
imageError = null;
notifyListeners(); notifyListeners();
} catch (e) { } catch (e) {
debugPrint("mmmm: ${e.toString()}"); debugPrint("mmmm: ${e.toString()}");
...@@ -362,6 +636,7 @@ class Paymentdetailsprovider extends ChangeNotifier { ...@@ -362,6 +636,7 @@ class Paymentdetailsprovider extends ChangeNotifier {
_imageName = File(galleryImage!.name); _imageName = File(galleryImage!.name);
_image_picked = 1; _image_picked = 1;
imageError = null;
notifyListeners(); notifyListeners();
} catch (e) { } catch (e) {
debugPrint("mmmm: ${e.toString()}"); debugPrint("mmmm: ${e.toString()}");
...@@ -418,20 +693,22 @@ class Paymentdetailsprovider extends ChangeNotifier { ...@@ -418,20 +693,22 @@ class Paymentdetailsprovider extends ChangeNotifier {
BuildContext context, BuildContext context,
actName, actName,
generatorID, generatorID,
name, accountName,
designation, referenceID,
mobile, genId,
altMobile,
telephone,
email,
) async { ) async {
if (actName == "Generator") { if (actName == "Generator") {
_saveAgainst = "generator"; _saveAgainst = "generator";
_genId = generatorID; _genId = generatorID;
} else { } else {
_saveAgainst = "account"; _saveAgainst = "account";
_accountId = generatorID; _accountId = generatorID;
} }
notifyListeners();
if(!validAddContact(context)){
return;
}
try { try {
var homeProvider = Provider.of<HomescreenNotifier>( var homeProvider = Provider.of<HomescreenNotifier>(
context, context,
...@@ -441,12 +718,12 @@ class Paymentdetailsprovider extends ChangeNotifier { ...@@ -441,12 +718,12 @@ class Paymentdetailsprovider extends ChangeNotifier {
homeProvider.empId, homeProvider.empId,
homeProvider.session, homeProvider.session,
_genId, _genId,
name, nameController.text,
designation, designationController.text,
mobile, mobController.text,
altMobile, altMobController.text,
telephone, telController.text,
email, emailController.text,
_saveAgainst, _saveAgainst,
_accountId, _accountId,
); );
...@@ -455,14 +732,13 @@ class Paymentdetailsprovider extends ChangeNotifier { ...@@ -455,14 +732,13 @@ class Paymentdetailsprovider extends ChangeNotifier {
if (data.sessionExists == 1) { if (data.sessionExists == 1) {
if (data.error == 0) { if (data.error == 0) {
toast(context, "Added Successfully"); toast(context, "Added Successfully");
Amountcontroller.clear(); resetAddContect();
Referencecontroller.clear(); LoadNumbersAPI(
nameController.clear(); context,
designationController.clear(); _saveAgainst,
mobController.clear(); referenceID,
altMobController.clear(); genId,
telController.clear(); );
emailController.clear();
Navigator.pop(context, true); Navigator.pop(context, true);
} else if (data.error == 1) { } else if (data.error == 1) {
toast(context, data.message); toast(context, data.message);
...@@ -479,4 +755,44 @@ class Paymentdetailsprovider extends ChangeNotifier { ...@@ -479,4 +755,44 @@ class Paymentdetailsprovider extends ChangeNotifier {
print(e.toString()); print(e.toString());
} }
} }
resetAddContect(){
Amountcontroller.clear();
Referencecontroller.clear();
nameController.clear();
designationController.clear();
mobController.clear();
altMobController.clear();
telController.clear();
emailController.clear();
nameError = null;
designationError = null;
mobError = null;
altMobError = null;
telError = null;
emailError = null;
notifyListeners();
}
bool validAddContact(context){
bool isValid = true;
nameError = null;
designationError = null;
mobError = null;
altMobError = null;
telError = null;
emailError = null;
if(nameController.text.trim().toString().isEmpty){
nameError = "Please Enter Name";
isValid = false;
}
if(mobController.text.trim().toString().isEmpty){
mobError = "Please Enter Mobile Number";
isValid = false;
}
notifyListeners();
return isValid;
}
} }
String didPushed = ""; String didPushed = "";
String didPopped = ""; String didPopped = "";
var connection;
...@@ -17,8 +17,9 @@ toast(context, text) { ...@@ -17,8 +17,9 @@ toast(context, text) {
fontSize: 15.0, fontSize: 15.0,
); );
} }
String connection = "Online";
class MyConnectivity { class MyConnectivity {
MyConnectivity._(); MyConnectivity._();
static final _instance = MyConnectivity._(); static final _instance = MyConnectivity._();
...@@ -28,11 +29,11 @@ class MyConnectivity { ...@@ -28,11 +29,11 @@ class MyConnectivity {
Stream get myStream => _controller.stream; Stream get myStream => _controller.stream;
void initialise() async { void initialise() async {
ConnectivityResult result = List<ConnectivityResult> result =
(await _connectivity.checkConnectivity()) as ConnectivityResult; (await _connectivity.checkConnectivity());
_checkStatus(result); _checkStatus(result.first);
_connectivity.onConnectivityChanged.listen((result) { _connectivity.onConnectivityChanged.listen((result) {
_checkStatus(result as ConnectivityResult); _checkStatus(result.first);
}); });
} }
......
...@@ -4,6 +4,7 @@ import 'package:flutter_svg/svg.dart'; ...@@ -4,6 +4,7 @@ import 'package:flutter_svg/svg.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'GlobalConstants.dart'; import 'GlobalConstants.dart';
import 'app_colors.dart'; import 'app_colors.dart';
import 'package:app_settings/app_settings.dart';
PreferredSizeWidget appbar(BuildContext context, title) { PreferredSizeWidget appbar(BuildContext context, title) {
return AppBar( return AppBar(
...@@ -207,11 +208,11 @@ NoNetwork(context) { ...@@ -207,11 +208,11 @@ NoNetwork(context) {
// Image.asset('assets/images/no_wifi.png', width: 100, height: 100), // Image.asset('assets/images/no_wifi.png', width: 100, height: 100),
SizedBox(height: 10), SizedBox(height: 10),
Center( Center(
child: Text( child: Text("You are Offline",
"You are Offline", style: TextStyle(
style: TextStyle(fontSize: 16, color: AppColors.semi_black), fontSize: 16,
overflow: TextOverflow.ellipsis, color: AppColors.semi_black
), ),),
), ),
SizedBox(height: 10), SizedBox(height: 10),
Text( Text(
...@@ -220,7 +221,6 @@ NoNetwork(context) { ...@@ -220,7 +221,6 @@ NoNetwork(context) {
style: TextStyle(fontSize: 12, color: AppColors.grey_semi), style: TextStyle(fontSize: 12, color: AppColors.grey_semi),
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
), ),
SizedBox(height: 0),
Text( Text(
"Make you sure you’ve\n turn on your internet connection", "Make you sure you’ve\n turn on your internet connection",
textAlign: TextAlign.center, textAlign: TextAlign.center,
...@@ -230,14 +230,14 @@ NoNetwork(context) { ...@@ -230,14 +230,14 @@ NoNetwork(context) {
SizedBox(height: 40), SizedBox(height: 40),
TextButton( TextButton(
onPressed: () async { onPressed: () async {
// await AppSettings.openAppSettings(type: AppSettingsType.wifi); await AppSettings.openAppSettings(type: AppSettingsType.wifi);
}, },
style: TextButton.styleFrom(foregroundColor: Colors.white), style: TextButton.styleFrom(foregroundColor: Colors.white),
child: Container( child: Container(
height: 45, height: 45,
width: 150, width: 150,
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColors.thick_navy_blue, color: AppColors.app_blue,
borderRadius: BorderRadius.all(Radius.circular(10)), borderRadius: BorderRadius.all(Radius.circular(10)),
), ),
child: Center( child: Center(
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:generp/screens/notifierExports.dart'; import 'package:generp/screens/notifierExports.dart';
...@@ -9,6 +10,8 @@ import 'package:generp/screens/CheckInScreen.dart'; ...@@ -9,6 +10,8 @@ import 'package:generp/screens/CheckInScreen.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../Utils/commonServices.dart';
class AttendanceScreen extends StatefulWidget { class AttendanceScreen extends StatefulWidget {
const AttendanceScreen({super.key}); const AttendanceScreen({super.key});
...@@ -19,10 +22,17 @@ class AttendanceScreen extends StatefulWidget { ...@@ -19,10 +22,17 @@ class AttendanceScreen extends StatefulWidget {
class _AttendanceScreenState extends State<AttendanceScreen> { class _AttendanceScreenState extends State<AttendanceScreen> {
var att_provider; var att_provider;
var homeProvider; var homeProvider;
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
homeProvider = Provider.of<HomescreenNotifier>(context, listen: false); homeProvider = Provider.of<HomescreenNotifier>(context, listen: false);
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
att_provider = Provider.of<AttendanceNotifier>(context, listen: false); att_provider = Provider.of<AttendanceNotifier>(context, listen: false);
...@@ -31,22 +41,34 @@ class _AttendanceScreenState extends State<AttendanceScreen> { ...@@ -31,22 +41,34 @@ class _AttendanceScreenState extends State<AttendanceScreen> {
}); });
} }
// return Container(
// // onWillPop: _onBackPressed, @override
// child: (Platform.isAndroid void dispose() {
// ? WillPopScope( // TODO: implement dispose
// onWillPop: onBackPressed, super.dispose();
// child: _scaffold(context), _connectivity.disposeStream();
// ) }
// : _scaffold(context)))
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Platform.isAndroid switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return (connection == 'Online')
? Platform.isAndroid
? WillPopScope( ? WillPopScope(
onWillPop: () => onBackPressed(context), onWillPop: () => onBackPressed(context),
child: SafeArea(top: false, bottom: true, child: _scaffold(context)), child: SafeArea(top: false, bottom: true, child: _scaffold(context)),
) )
: _scaffold(context); : _scaffold(context):NoNetwork(context);
} }
Widget _scaffold(BuildContext context) { Widget _scaffold(BuildContext context) {
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_image_compress/flutter_image_compress.dart'; import 'package:flutter_image_compress/flutter_image_compress.dart';
import 'package:generp/Utils/app_colors.dart'; import 'package:generp/Utils/app_colors.dart';
...@@ -9,6 +10,7 @@ import 'package:image_picker/image_picker.dart'; ...@@ -9,6 +10,7 @@ import 'package:image_picker/image_picker.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../Notifiers/CheckInProvider.dart'; import '../Notifiers/CheckInProvider.dart';
import '../Utils/commonServices.dart';
import 'FrontCameraCapture.dart'; import 'FrontCameraCapture.dart';
class CheckInOutScreen extends StatefulWidget { class CheckInOutScreen extends StatefulWidget {
...@@ -20,10 +22,16 @@ class CheckInOutScreen extends StatefulWidget { ...@@ -20,10 +22,16 @@ class CheckInOutScreen extends StatefulWidget {
} }
class _CheckInOutScreenState extends State<CheckInOutScreen> { class _CheckInOutScreenState extends State<CheckInOutScreen> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
},);
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
var prov = Provider.of<CheckInOutProvider>(context, listen: false); var prov = Provider.of<CheckInOutProvider>(context, listen: false);
prov.getLocationPermission(context); prov.getLocationPermission(context);
...@@ -35,16 +43,28 @@ class _CheckInOutScreenState extends State<CheckInOutScreen> { ...@@ -35,16 +43,28 @@ class _CheckInOutScreenState extends State<CheckInOutScreen> {
void dispose() { void dispose() {
// TODO: implement dispose // TODO: implement dispose
super.dispose(); super.dispose();
_connectivity.disposeStream();
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
Size size = MediaQuery.of(context).size; Size size = MediaQuery.of(context).size;
double screenWidth = MediaQuery.of(context).size.width; double screenWidth = MediaQuery.of(context).size.width;
return Consumer<CheckInOutProvider>( return (connection=='Online')?Consumer<CheckInOutProvider>(
builder: (context, provider, child) { builder: (context, provider, child) {
return WillPopScope( return WillPopScope(
onWillPop: () { onWillPop: () {
...@@ -280,7 +300,7 @@ class _CheckInOutScreenState extends State<CheckInOutScreen> { ...@@ -280,7 +300,7 @@ class _CheckInOutScreenState extends State<CheckInOutScreen> {
), ),
); );
}, },
); ):NoNetwork(context);
} }
} }
......
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:generp/Utils/commonWidgets.dart';
import '../Utils/commonServices.dart';
import 'notifierExports.dart'; import 'notifierExports.dart';
import 'screensExports.dart'; import 'screensExports.dart';
import 'package:geolocator/geolocator.dart'; import 'package:geolocator/geolocator.dart';
...@@ -24,10 +27,17 @@ class MyHomePage extends StatefulWidget { ...@@ -24,10 +27,17 @@ class MyHomePage extends StatefulWidget {
class _MyHomePageState extends State<MyHomePage> { class _MyHomePageState extends State<MyHomePage> {
Timer? timer; Timer? timer;
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
var prov = Provider.of<HomescreenNotifier>(context, listen: false); var prov = Provider.of<HomescreenNotifier>(context, listen: false);
var prof_prov = Provider.of<ProfileNotifer>(context, listen: false); var prof_prov = Provider.of<ProfileNotifer>(context, listen: false);
Future.microtask(() { Future.microtask(() {
...@@ -104,476 +114,514 @@ class _MyHomePageState extends State<MyHomePage> { ...@@ -104,476 +114,514 @@ class _MyHomePageState extends State<MyHomePage> {
} }
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer2<HomescreenNotifier, ProfileNotifer>( switch (_source.keys.toList()[0]) {
builder: (context, homescreen, profile, child) { case ConnectivityResult.mobile:
// Define the original data connection = 'Online';
final names = [ break;
"Attendance", case ConnectivityResult.wifi:
"Finance", connection = 'Online';
"CRM", break;
"Orders", case ConnectivityResult.none:
"ERP", default:
"Service Engineer", connection = 'Offline';
"Gen Tracker", }
// "Nearby", return (connection == 'Online')
"Inventory", ? Consumer2<HomescreenNotifier, ProfileNotifer>(
"Whizzdom", builder: (context, homescreen, profile, child) {
// "Common", // Define the original data
]; final names = [
final icons = [ "Attendance",
"assets/svg/home_icons_1.svg", "Finance",
"assets/svg/home_icons_10.svg", "CRM",
"assets/svg/home_icons_12.svg", "Orders",
"assets/svg/home_icons_11.svg", "ERP",
"assets/svg/home_icons_2.svg", "Service Engineer",
"assets/svg/home_icons_4.svg", "Gen Tracker",
"assets/svg/home_icons_31.svg", // "Nearby",
// "assets/svg/home_icons_5.svg", "Inventory",
"assets/svg/home_icons_6.svg", "Whizzdom",
"assets/svg/home_icons_81.svg", // "Common",
// "assets/svg/home_icons_9.svg", ];
]; final icons = [
final requiredRoles = [ "assets/svg/home_icons_1.svg",
"430", "assets/svg/home_icons_10.svg",
"430", "assets/svg/home_icons_12.svg",
"430", "assets/svg/home_icons_11.svg",
"430", "assets/svg/home_icons_2.svg",
"431", "assets/svg/home_icons_4.svg",
"433", "assets/svg/home_icons_31.svg",
"434", // "assets/svg/home_icons_5.svg",
// "433", "assets/svg/home_icons_6.svg",
"432", "assets/svg/home_icons_81.svg",
"431", // "assets/svg/home_icons_9.svg",
// "430", ];
]; final requiredRoles = [
"430",
final filteredItems = <Map<String, String>>[]; "430",
for (int i = 0; i < names.length; i++) { "430",
if (homescreen.roleStatus.contains(requiredRoles[i])) { "430",
filteredItems.add({'name': names[i], 'icon': icons[i]}); "431",
} "433",
} "434",
return WillPopScope( // "433",
onWillPop: onBackPressed, "432",
child: RefreshIndicator.adaptive( "431",
color: AppColors.app_blue, // "430",
];
onRefresh: () async {
await Future.delayed(const Duration(milliseconds: 600)); final filteredItems = <Map<String, String>>[];
homescreen.DashboardApiFunction(context); for (int i = 0; i < names.length; i++) {
}, if (homescreen.roleStatus.contains(requiredRoles[i])) {
child: SafeArea( filteredItems.add({'name': names[i], 'icon': icons[i]});
top: false, }
bottom: Platform.isIOS ? false : true, }
child: Scaffold( return WillPopScope(
resizeToAvoidBottomInset: true, onWillPop: onBackPressed,
backgroundColor: AppColors.scaffold_bg_color, child: RefreshIndicator.adaptive(
color: AppColors.app_blue,
body: Container(
child: Column( onRefresh: () async {
children: [ await Future.delayed(const Duration(milliseconds: 600));
Expanded( homescreen.DashboardApiFunction(context);
flex: 4, },
child: Container( child: SafeArea(
padding: EdgeInsets.symmetric(vertical: 10), top: false,
decoration: BoxDecoration( bottom: Platform.isIOS ? false : true,
color: Colors.white, child: Scaffold(
borderRadius: BorderRadius.vertical( resizeToAvoidBottomInset: true,
bottom: Radius.circular(30), backgroundColor: AppColors.scaffold_bg_color,
),
), body: Container(
child: Container( child: Column(
margin: EdgeInsets.only( children: [
bottom: 15, Expanded(
left: 15, flex: 4,
right: 15, child: Container(
top: 30, padding: EdgeInsets.symmetric(vertical: 10),
), decoration: BoxDecoration(
padding: EdgeInsets.only(bottom: 15, right: 10), color: Colors.white,
decoration: BoxDecoration( borderRadius: BorderRadius.vertical(
borderRadius: BorderRadius.circular(30), bottom: Radius.circular(30),
gradient: LinearGradient( ),
colors: [
AppColors.profile_card_gradient1,
AppColors.profile_card_gradient2,
],
), ),
), child: Container(
child: Row( margin: EdgeInsets.only(
crossAxisAlignment: CrossAxisAlignment.center, bottom: 15,
children: [ left: 15,
Expanded( right: 15,
flex: 2, top: 30,
child: SizedBox( ),
child: Column( padding: EdgeInsets.only(bottom: 15, right: 10),
mainAxisAlignment: decoration: BoxDecoration(
MainAxisAlignment.center, borderRadius: BorderRadius.circular(30),
gradient: LinearGradient(
children: [ colors: [
SizedBox( AppColors.profile_card_gradient1,
width: 66, AppColors.profile_card_gradient2,
height: 66, ],
child: ClipRRect( ),
borderRadius: BorderRadius.circular( ),
50, child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
flex: 2,
child: SizedBox(
child: Column(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
SizedBox(
width: 66,
height: 66,
child: ClipRRect(
borderRadius:
BorderRadius.circular(50),
child: CachedNetworkImage(
cacheKey:
profile.profileImage,
fit: BoxFit.cover,
imageUrl:
"${profile.profileImage}",
useOldImageOnUrlChange: false,
placeholder:
(context, url) =>
CircularProgressIndicator.adaptive(),
errorWidget:
(context, url, error) =>
Icon(Icons.error),
),
),
), ),
child: CachedNetworkImage(
cacheKey: profile.profileImage, Row(
fit: BoxFit.cover, mainAxisAlignment:
imageUrl: MainAxisAlignment.center,
"${profile.profileImage}", children: [
useOldImageOnUrlChange: false, Container(
placeholder: width: 13,
(context, url) => height: 13,
CircularProgressIndicator.adaptive(), decoration: BoxDecoration(
errorWidget: shape: BoxShape.circle,
(context, url, error) => color:
Icon(Icons.error), homescreen.onlineStatus ==
"Online"
? Colors.green
: Colors.yellow,
),
),
SizedBox(width: 6),
Text(
"${homescreen.onlineStatus}",
style: TextStyle(
fontSize: 16,
fontFamily: "JakartaMedium",
color: Color(0xFF2D2D2D),
),
),
],
), ),
), ],
), ),
),
Row( ),
Expanded(
flex: 3,
child: Container(
padding: EdgeInsets.only(right: 10),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisAlignment: mainAxisAlignment:
MainAxisAlignment.center, MainAxisAlignment.center,
children: [ children: [
Container( // Text(
width: 13, // "${profile.employeeName}",
height: 13, // maxLines: 1,
decoration: BoxDecoration( // style: TextStyle(
shape: BoxShape.circle, // color: AppColors.app_blue,
color: // fontFamily: "JakartaSemiBold",
homescreen.onlineStatus == // fontSize: 18,
"Online" // ),
? Colors.green // ),
: Colors.yellow, AutoSizeText(
'${profile.employeeName}',
maxFontSize: 18,
minFontSize: 12,
style: TextStyle(
fontSize: 18,
color: AppColors.app_blue,
fontFamily: "JakartaRegular",
), ),
maxLines: 2,
), ),
SizedBox(width: 6), AutoSizeText(
Text( '(${profile.designation})',
"${homescreen.onlineStatus}", maxFontSize: 14,
minFontSize: 10,
style: TextStyle( style: TextStyle(
fontSize: 16, fontSize: 14,
fontFamily: "JakartaMedium", color: AppColors.semi_black,
color: Color(0xFF2D2D2D), fontFamily: "JakartaRegular",
), ),
maxLines: 1,
), ),
], // Text(
), // "${profile.designation}",
], // maxLines: 1,
), // style: TextStyle(
), // color: AppColors.semi_black,
), // fontFamily: "JakartaRegular",
Expanded( // fontSize: 14,
flex: 3, // ),
child: Container( // ),
padding: EdgeInsets.only(right: 10), Text(
child: Column( "${profile.employeeeID}",
crossAxisAlignment: style: TextStyle(
CrossAxisAlignment.start, color: AppColors.semi_black,
mainAxisAlignment: fontFamily: "JakartaRegular",
MainAxisAlignment.center, fontSize: 14,
children: [
// Text(
// "${profile.employeeName}",
// maxLines: 1,
// style: TextStyle(
// color: AppColors.app_blue,
// fontFamily: "JakartaSemiBold",
// fontSize: 18,
// ),
// ),
AutoSizeText(
'${profile.employeeName}',
maxFontSize: 18,
minFontSize: 12,
style: TextStyle(
fontSize: 18,
color: AppColors.app_blue,
fontFamily: "JakartaRegular",
),
maxLines: 2,
),
AutoSizeText(
'(${profile.designation})',
maxFontSize: 14,
minFontSize: 10,
style: TextStyle(
fontSize: 14,
color: AppColors.semi_black,
fontFamily: "JakartaRegular",
),
maxLines: 1,
),
// Text(
// "${profile.designation}",
// maxLines: 1,
// style: TextStyle(
// color: AppColors.semi_black,
// fontFamily: "JakartaRegular",
// fontSize: 14,
// ),
// ),
Text(
"${profile.employeeeID}",
style: TextStyle(
color: AppColors.semi_black,
fontFamily: "JakartaRegular",
fontSize: 14,
),
),
InkResponse(
onTap: () {
_showProfileBottomSheet(context);
},
child: Row(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
"View Profile",
style: TextStyle(
color: AppColors.app_blue,
fontFamily: "JakartaRegular",
fontSize: 14,
),
), ),
SizedBox(width: 5), ),
SizedBox( InkResponse(
width: 15, onTap: () {
height: 15, _showProfileBottomSheet(
child: Center( context,
child: SvgPicture.asset( );
"assets/svg/next_button.svg", },
child: Row(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
"View Profile",
style: TextStyle(
color: AppColors.app_blue,
fontFamily:
"JakartaRegular",
fontSize: 14,
),
), ),
), SizedBox(width: 5),
SizedBox(
width: 15,
height: 15,
child: Center(
child: SvgPicture.asset(
"assets/svg/next_button.svg",
),
),
),
],
), ),
], ),
), ],
), ),
], ),
), ),
), ],
), ),
], ),
), ),
), ),
), Expanded(
), flex: 10,
Expanded( child: Container(
flex: 10, padding: EdgeInsets.only(
child: Container( left: 20,
padding: EdgeInsets.only( right: 20,
left: 20, top: 0,
right: 20, bottom: 10,
top: 0, ),
bottom: 10, margin: EdgeInsets.only(top: 10),
), child: GridView.builder(
margin: EdgeInsets.only(top: 10), itemCount: filteredItems.length,
child: GridView.builder( gridDelegate:
itemCount: filteredItems.length, SliverGridDelegateWithFixedCrossAxisCount(
gridDelegate: crossAxisCount: 2,
SliverGridDelegateWithFixedCrossAxisCount( crossAxisSpacing: 10,
crossAxisCount: 2, mainAxisSpacing: 10,
crossAxisSpacing: 10, ),
mainAxisSpacing: 10, itemBuilder: (context, index) {
), final item = filteredItems[index];
itemBuilder: (context, index) { return InkResponse(
final item = filteredItems[index]; onTap: () async {
return InkResponse( var res;
onTap: () async { switch (item['name']) {
var res; case "Attendance":
switch (item['name']) {
case "Attendance":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => AttendanceScreen(),
settings: RouteSettings(
arguments: 'AttendanceScreen',
),
),
);
break;
case "ERP":
bool isGpsEnabled =
await Geolocator.isLocationServiceEnabled();
if (isGpsEnabled) {
if (Platform.isAndroid) {
res = await Navigator.push( res = await Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: builder:
(context) => WebErpScreen( (context) =>
erp_url: AttendanceScreen(),
homescreen.webPageUrl, settings: RouteSettings(
), arguments: 'AttendanceScreen',
),
), ),
); );
} else { break;
case "ERP":
bool isGpsEnabled =
await Geolocator.isLocationServiceEnabled();
if (isGpsEnabled) {
if (Platform.isAndroid) {
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => WebErpScreen(
erp_url:
homescreen
.webPageUrl,
),
),
);
} else {
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => WebERPIOS(
url:
homescreen
.webPageUrl,
),
),
);
}
} else {
requestGpsPermission();
}
break;
case "Gen Tracker":
res = await Navigator.push( res = await Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: builder:
(context) => WebERPIOS( (context) =>
url: homescreen.webPageUrl, Gentrackerdashboard(),
), settings: RouteSettings(
arguments:
'Gentrackerdashboard',
),
),
);
break;
case "Service Engineer":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Serviceengineerdashboard(),
),
);
break;
case "Nearby":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Nearbygenerators(),
), ),
); );
}
} else {
requestGpsPermission();
}
break; break;
case "Gen Tracker": case "Inventory":
res = await Navigator.push( res = await Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: builder:
(context) => (context) =>
Gentrackerdashboard(), InventoryScreen(),
settings: RouteSettings( ),
arguments: 'Gentrackerdashboard', );
), break;
), case "Whizzdom":
); bool isGpsEnabled =
break; await Geolocator.isLocationServiceEnabled();
case "Service Engineer": if (isGpsEnabled) {
res = await Navigator.push( res = await Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: builder:
(context) => (
Serviceengineerdashboard(), context,
), ) => WebWhizzdomScreen(
); whizzdom_url:
break; homescreen
case "Nearby": .whizzdomPageUrl,
res = await Navigator.push( ),
context, ),
MaterialPageRoute( );
builder: } else {
(context) => Nearbygenerators(), requestGpsPermission();
), }
); break;
case "Common":
break; res = await Navigator.push(
case "Inventory": context,
res = await Navigator.push( MaterialPageRoute(
context, builder:
MaterialPageRoute( (context) =>
builder: Commondashboard(),
(context) => InventoryScreen(), ),
), );
); break;
break; case "Finance":
case "Whizzdom": res = await Navigator.push(
bool isGpsEnabled = context,
await Geolocator.isLocationServiceEnabled(); MaterialPageRoute(
if (isGpsEnabled) { builder:
res = await Navigator.push( (context) =>
Financedashboard(),
settings: RouteSettings(
arguments: 'Financedashboard',
),
),
);
break;
case "Orders":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Ordermoduledashboard(),
),
);
case "CRM":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
CrmdashboardScreen(),
settings: RouteSettings(
name: 'CrmdashboardScreen',
),
),
);
default:
print("111");
break;
}
if (res == true) {
homescreen.DashboardApiFunction(
context, context,
MaterialPageRoute(
builder:
(context) => WebWhizzdomScreen(
whizzdom_url:
homescreen
.whizzdomPageUrl,
),
),
); );
} else {
requestGpsPermission();
} }
break; },
case "Common": child: Container(
res = await Navigator.push( decoration: BoxDecoration(
context, color: Colors.white,
MaterialPageRoute( borderRadius: BorderRadius.circular(30),
builder: ),
(context) => Commondashboard(), child: Column(
), crossAxisAlignment:
); CrossAxisAlignment.center,
break; mainAxisAlignment:
case "Finance": MainAxisAlignment.center,
res = await Navigator.push( children: [
context, SvgPicture.asset(
MaterialPageRoute( item['icon']!,
builder: height: 45,
(context) => Financedashboard(),
settings: RouteSettings(
arguments: 'Financedashboard',
),
),
);
break;
case "Orders":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Ordermoduledashboard(),
),
);
case "CRM":
res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => CrmdashboardScreen(),
settings: RouteSettings(
name: 'CrmdashboardScreen',
), ),
), SizedBox(height: 10),
); Text(item['name']!),
default: ],
print("111");
break;
}
if (res == true) {
homescreen.DashboardApiFunction(context);
}
},
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(30),
),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
SvgPicture.asset(
item['icon']!,
height: 45,
), ),
SizedBox(height: 10), ),
Text(item['name']!), );
], },
), ),
), ),
);
},
), ),
), ],
), ),
], ),
), ),
), ),
), ),
), );
), },
); )
}, : NoNetwork(context);
);
} }
Future<void> _showProfileBottomSheet(BuildContext context) { Future<void> _showProfileBottomSheet(BuildContext context) {
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:qr_code_scanner/qr_code_scanner.dart'; import 'package:qr_code_scanner/qr_code_scanner.dart';
import '../Notifiers/scanLoginProvider.dart'; import '../Notifiers/scanLoginProvider.dart';
import '../Utils/app_colors.dart'; import '../Utils/app_colors.dart';
import '../Utils/commonServices.dart';
import '../Utils/commonWidgets.dart'; import '../Utils/commonWidgets.dart';
class Scannerlogin extends StatefulWidget { class Scannerlogin extends StatefulWidget {
...@@ -16,67 +18,100 @@ class Scannerlogin extends StatefulWidget { ...@@ -16,67 +18,100 @@ class Scannerlogin extends StatefulWidget {
} }
class _ScannerloginState extends State<Scannerlogin> { class _ScannerloginState extends State<Scannerlogin> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
Widget build(BuildContext context) { void initState() {
return Consumer<Scanloginprovider>( // TODO: implement initState
builder: (context, provider, child) { _connectivity.initialise();
return WillPopScope( _connectivity.myStream.listen((source) {
onWillPop: () => onBackPressed(context),
child: SafeArea( setState(() => _source = source);
top: false, });
bottom: Platform.isIOS?false:true,
child: Scaffold(
resizeToAvoidBottomInset: true,
backgroundColor: AppColors.scaffold_bg_color,
appBar: appbar(context, "QR Login"),
body: Container(
decoration: BoxDecoration(color: Colors.black),
child: Column(
children: [
Spacer(),
Container(
height: 250,
child: QRView( super.initState();
}
key: provider.scannerKey, @override
onQRViewCreated: (p0) { void dispose() {
provider.onQRViewCreated(p0, context); // TODO: implement dispose
}, super.dispose();
formatsAllowed: [BarcodeFormat.qrcode], _connectivity.disposeStream();
cameraFacing: CameraFacing.back, }
@override
Widget build(BuildContext context) {
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return (connection == 'Online')
? Consumer<Scanloginprovider>(
builder: (context, provider, child) {
return WillPopScope(
onWillPop: () => onBackPressed(context),
child: SafeArea(
top: false,
bottom: Platform.isIOS ? false : true,
child: Scaffold(
resizeToAvoidBottomInset: true,
backgroundColor: AppColors.scaffold_bg_color,
appBar: appbar(context, "QR Login"),
body: Container(
decoration: BoxDecoration(color: Colors.black),
child: Column(
children: [
Spacer(),
Container(
height: 250,
overlay: QrScannerOverlayShape( child: QRView(
key: provider.scannerKey,
onQRViewCreated: (p0) {
provider.onQRViewCreated(p0, context);
},
formatsAllowed: [BarcodeFormat.qrcode],
cameraFacing: CameraFacing.back,
borderColor: AppColors.app_blue, overlay: QrScannerOverlayShape(
borderRadius: 20, borderColor: AppColors.app_blue,
borderLength: 60, borderRadius: 20,
borderWidth: 10, borderLength: 60,
cutOutSize: 250.0, borderWidth: 10,
cutOutSize: 250.0,
),
),
), ),
), SizedBox(height: 25),
), Text(
SizedBox(height: 25), "Scan QR",
Text( textAlign: TextAlign.center,
"Scan QR", style: TextStyle(fontSize: 18, color: Colors.white),
textAlign: TextAlign.center, ),
style: TextStyle(fontSize: 18, color: Colors.white), Text(
), "to Login",
Text( textAlign: TextAlign.center,
"to Login", style: TextStyle(fontSize: 14, color: Colors.white),
textAlign: TextAlign.center, ),
style: TextStyle(fontSize: 14, color: Colors.white), Spacer(),
),
Spacer(),
SizedBox(height: 50), SizedBox(height: 50),
], ],
),
),
), ),
), ),
), );
), },
); )
}, : NoNetwork(context);
);
} }
} }
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
...@@ -13,6 +14,8 @@ import 'package:generp/screens/WebERPScreen.dart'; ...@@ -13,6 +14,8 @@ import 'package:generp/screens/WebERPScreen.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import '../Utils/commonServices.dart';
const MAX_PROGRESS = 100; const MAX_PROGRESS = 100;
Future main() async { Future main() async {
...@@ -31,6 +34,11 @@ class WebERPIOS extends StatefulWidget { ...@@ -31,6 +34,11 @@ class WebERPIOS extends StatefulWidget {
} }
class _WebERPIOSState extends State<WebERPIOS> { class _WebERPIOSState extends State<WebERPIOS> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
final Completer<InAppWebViewController> _controller = final Completer<InAppWebViewController> _controller =
Completer<InAppWebViewController>(); Completer<InAppWebViewController>();
var empId = ""; var empId = "";
...@@ -48,7 +56,10 @@ class _WebERPIOSState extends State<WebERPIOS> { ...@@ -48,7 +56,10 @@ class _WebERPIOSState extends State<WebERPIOS> {
@override @override
void initState() { void initState() {
// loadData(); // loadData();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
pullToRefreshController = pullToRefreshController =
kIsWeb kIsWeb
? null ? null
...@@ -73,16 +84,28 @@ class _WebERPIOSState extends State<WebERPIOS> { ...@@ -73,16 +84,28 @@ class _WebERPIOSState extends State<WebERPIOS> {
@override @override
void dispose() { void dispose() {
super.dispose(); super.dispose();
_connectivity.disposeStream();
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Platform.isAndroid switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?Platform.isAndroid
? WillPopScope( ? WillPopScope(
onWillPop: () => onBackPressed(context), onWillPop: () => onBackPressed(context),
child: SafeArea(top: false, bottom: true, child: _scaffold(context)), child: SafeArea(top: false, bottom: true, child: _scaffold(context)),
) )
: _scaffold(context); : _scaffold(context):NoNetwork(context);
} }
Widget _scaffold(BuildContext context) { Widget _scaffold(BuildContext context) {
......
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:generp/Utils/commonServices.dart'; import 'package:generp/Utils/commonServices.dart';
...@@ -33,6 +34,7 @@ Future runErpScreenApp() async { ...@@ -33,6 +34,7 @@ Future runErpScreenApp() async {
class WebErpScreen extends StatefulWidget { class WebErpScreen extends StatefulWidget {
final String erp_url; final String erp_url;
const WebErpScreen({super.key, required this.erp_url}); const WebErpScreen({super.key, required this.erp_url});
@override @override
...@@ -40,6 +42,10 @@ class WebErpScreen extends StatefulWidget { ...@@ -40,6 +42,10 @@ class WebErpScreen extends StatefulWidget {
} }
class _WebErpScreenState extends State<WebErpScreen> { class _WebErpScreenState extends State<WebErpScreen> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
final Completer<InAppWebViewController> _controller = final Completer<InAppWebViewController> _controller =
Completer<InAppWebViewController>(); Completer<InAppWebViewController>();
var empId = ""; var empId = "";
...@@ -62,6 +68,10 @@ class _WebErpScreenState extends State<WebErpScreen> { ...@@ -62,6 +68,10 @@ class _WebErpScreenState extends State<WebErpScreen> {
void initState() { void initState() {
// loadData(); // loadData();
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
pullToRefreshController = pullToRefreshController =
kIsWeb kIsWeb
? null ? null
...@@ -107,10 +117,22 @@ class _WebErpScreenState extends State<WebErpScreen> { ...@@ -107,10 +117,22 @@ class _WebErpScreenState extends State<WebErpScreen> {
@override @override
void dispose() { void dispose() {
super.dispose(); super.dispose();
_connectivity.disposeStream();
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return WillPopScope( return WillPopScope(
onWillPop: () async { onWillPop: () async {
if (await _webViewController!.canGoBack()) { if (await _webViewController!.canGoBack()) {
...@@ -119,7 +141,7 @@ class _WebErpScreenState extends State<WebErpScreen> { ...@@ -119,7 +141,7 @@ class _WebErpScreenState extends State<WebErpScreen> {
} }
return true; // Allow default back button behavior return true; // Allow default back button behavior
}, },
child: SafeArea( child: connection=="Online"?SafeArea(
top: false, top: false,
bottom: Platform.isIOS?false:true, bottom: Platform.isIOS?false:true,
child: Scaffold( child: Scaffold(
...@@ -502,7 +524,7 @@ class _WebErpScreenState extends State<WebErpScreen> { ...@@ -502,7 +524,7 @@ class _WebErpScreenState extends State<WebErpScreen> {
), ),
), ),
), ),
), ):NoNetwork(context),
); );
} }
// Future<void> saveBase64File(String base64Data, String filename, String mimeType) async { // Future<void> saveBase64File(String base64Data, String filename, String mimeType) async {
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
...@@ -9,6 +10,7 @@ import 'package:provider/provider.dart'; ...@@ -9,6 +10,7 @@ import 'package:provider/provider.dart';
import 'package:generp/screens/screensExports.dart'; import 'package:generp/screens/screensExports.dart';
import '../../Notifiers/crmProvider/crmDashboardProvider.dart'; import '../../Notifiers/crmProvider/crmDashboardProvider.dart';
import '../../Utils/app_colors.dart'; import '../../Utils/app_colors.dart';
import '../../Utils/commonServices.dart';
import '../../Utils/commonWidgets.dart'; import '../../Utils/commonWidgets.dart';
class CrmdashboardScreen extends StatefulWidget { class CrmdashboardScreen extends StatefulWidget {
...@@ -20,10 +22,16 @@ class CrmdashboardScreen extends StatefulWidget { ...@@ -20,10 +22,16 @@ class CrmdashboardScreen extends StatefulWidget {
class _CrmdashboardScreenState extends State<CrmdashboardScreen> { class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
FocusNode focusNode = FocusNode(); FocusNode focusNode = FocusNode();
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((event) {
setState(() => _source = event);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var prov = Provider.of<Crmdashboardprovider>(context, listen: false); var prov = Provider.of<Crmdashboardprovider>(context, listen: false);
prov.accessPagesAPIFunction(context); prov.accessPagesAPIFunction(context);
...@@ -31,15 +39,37 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> { ...@@ -31,15 +39,37 @@ class _CrmdashboardScreenState extends State<CrmdashboardScreen> {
prov.crmPendingTasksAPIFunction(context); prov.crmPendingTasksAPIFunction(context);
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Platform.isAndroid switch (_source.keys.toList()[0]) {
? WillPopScope( case ConnectivityResult.mobile:
onWillPop: () => onBackPressed(context), connection = 'Online';
child: SafeArea(top: false, bottom: true, child: _scaffold(context)), break;
) case ConnectivityResult.wifi:
: _scaffold(context); connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return (connection == "Online")
? Platform.isAndroid
? WillPopScope(
onWillPop: () => onBackPressed(context),
child: SafeArea(
top: false,
bottom: true,
child: _scaffold(context),
),
)
: _scaffold(context)
: NoNetwork(context);
} }
Widget _scaffold(BuildContext context) { Widget _scaffold(BuildContext context) {
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
...@@ -10,6 +11,7 @@ import 'package:generp/Utils/commonWidgets.dart'; ...@@ -10,6 +11,7 @@ import 'package:generp/Utils/commonWidgets.dart';
import 'package:generp/screens/finance/FileViewer.dart'; import 'package:generp/screens/finance/FileViewer.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../Utils/commonServices.dart';
import '../commonDateRangeFilter.dart'; import '../commonDateRangeFilter.dart';
import 'PaymentRequestionListDetails.dart'; import 'PaymentRequestionListDetails.dart';
...@@ -30,11 +32,19 @@ class Allpaymentrequesitionlistsbymodes extends StatefulWidget { ...@@ -30,11 +32,19 @@ class Allpaymentrequesitionlistsbymodes extends StatefulWidget {
class _AllpaymentrequesitionlistsbymodesState class _AllpaymentrequesitionlistsbymodesState
extends State<Allpaymentrequesitionlistsbymodes> { extends State<Allpaymentrequesitionlistsbymodes> {
late Commondaterangefilter cf;
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
late Commondaterangefilter cf;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
cf = Commondaterangefilter(); cf = Commondaterangefilter();
var provider = Provider.of<Requestionlistprovider>( var provider = Provider.of<Requestionlistprovider>(
...@@ -52,9 +62,27 @@ class _AllpaymentrequesitionlistsbymodesState ...@@ -52,9 +62,27 @@ class _AllpaymentrequesitionlistsbymodesState
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Requestionlistprovider>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?Consumer<Requestionlistprovider>(
builder: (context, provider, child) { builder: (context, provider, child) {
final requestLists = provider.requisitionList; final requestLists = provider.requisitionList;
return WillPopScope( return WillPopScope(
...@@ -383,7 +411,7 @@ class _AllpaymentrequesitionlistsbymodesState ...@@ -383,7 +411,7 @@ class _AllpaymentrequesitionlistsbymodesState
), ),
); );
}, },
); ):NoNetwork(context);
} }
Future<void> _showOptionsSheet(BuildContext context) { Future<void> _showOptionsSheet(BuildContext context) {
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
...@@ -12,6 +13,7 @@ import 'package:generp/screens/commom/accountsListDetails.dart'; ...@@ -12,6 +13,7 @@ import 'package:generp/screens/commom/accountsListDetails.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../Utils/commonServices.dart';
import 'FileViewer.dart'; import 'FileViewer.dart';
class Paymentrequestionlistdetails extends StatefulWidget { class Paymentrequestionlistdetails extends StatefulWidget {
...@@ -33,6 +35,11 @@ class Paymentrequestionlistdetails extends StatefulWidget { ...@@ -33,6 +35,11 @@ class Paymentrequestionlistdetails extends StatefulWidget {
class _PaymentrequestionlistdetailsState class _PaymentrequestionlistdetailsState
extends State<Paymentrequestionlistdetails> { extends State<Paymentrequestionlistdetails> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
List<FocusNode> focusNodes = List.generate(10, (index) => FocusNode(),); List<FocusNode> focusNodes = List.generate(10, (index) => FocusNode(),);
Dropdowntheme ddtheme = Dropdowntheme(); Dropdowntheme ddtheme = Dropdowntheme();
TextEditingController approvedAmount = TextEditingController(); TextEditingController approvedAmount = TextEditingController();
...@@ -63,6 +70,10 @@ class _PaymentrequestionlistdetailsState ...@@ -63,6 +70,10 @@ class _PaymentrequestionlistdetailsState
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Requesitionlidtdetailsprovider>( var provider = Provider.of<Requesitionlidtdetailsprovider>(
context, context,
...@@ -77,12 +88,24 @@ class _PaymentrequestionlistdetailsState ...@@ -77,12 +88,24 @@ class _PaymentrequestionlistdetailsState
void dispose() { void dispose() {
// TODO: implement dispose // TODO: implement dispose
focusNodes.map((e)=>e.dispose()); focusNodes.map((e)=>e.dispose());
_connectivity.disposeStream();
super.dispose(); super.dispose();
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Requesitionlidtdetailsprovider>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?Consumer<Requesitionlidtdetailsprovider>(
builder: (context, provider, child) { builder: (context, provider, child) {
var req_det = provider.requestsDetails; var req_det = provider.requestsDetails;
isLevel1Finalized = [ isLevel1Finalized = [
...@@ -574,7 +597,7 @@ class _PaymentrequestionlistdetailsState ...@@ -574,7 +597,7 @@ class _PaymentrequestionlistdetailsState
}, },
); );
}, },
); ):NoNetwork(context);
} }
Future<void> _showLevelApprovalSheet(BuildContext context, paymentID) { Future<void> _showLevelApprovalSheet(BuildContext context, paymentID) {
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
...@@ -10,6 +11,7 @@ import 'package:generp/Utils/dropdownTheme.dart'; ...@@ -10,6 +11,7 @@ import 'package:generp/Utils/dropdownTheme.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../Notifiers/financeProvider/paymentReceiptsProvider.dart'; import '../../Notifiers/financeProvider/paymentReceiptsProvider.dart';
import '../../Utils/app_colors.dart'; import '../../Utils/app_colors.dart';
import '../../Utils/commonServices.dart';
import '../../Utils/commonWidgets.dart'; import '../../Utils/commonWidgets.dart';
class Addpaymentreceiptlist extends StatefulWidget { class Addpaymentreceiptlist extends StatefulWidget {
...@@ -23,10 +25,18 @@ class Addpaymentreceiptlist extends StatefulWidget { ...@@ -23,10 +25,18 @@ class Addpaymentreceiptlist extends StatefulWidget {
class _AddpaymentreceiptlistState extends State<Addpaymentreceiptlist> { class _AddpaymentreceiptlistState extends State<Addpaymentreceiptlist> {
Dropdowntheme ddtheme = Dropdowntheme(); Dropdowntheme ddtheme = Dropdowntheme();
List<FocusNode> focusNodes = List.generate(12, (index) => FocusNode()); List<FocusNode> focusNodes = List.generate(12, (index) => FocusNode());
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Paymentreceiptsprovider>( var provider = Provider.of<Paymentreceiptsprovider>(
context, context,
...@@ -39,6 +49,7 @@ class _AddpaymentreceiptlistState extends State<Addpaymentreceiptlist> { ...@@ -39,6 +49,7 @@ class _AddpaymentreceiptlistState extends State<Addpaymentreceiptlist> {
@override @override
void dispose() { void dispose() {
focusNodes.map((e) => e.dispose()); focusNodes.map((e) => e.dispose());
_connectivity.disposeStream();
super.dispose(); super.dispose();
} }
...@@ -49,7 +60,18 @@ class _AddpaymentreceiptlistState extends State<Addpaymentreceiptlist> { ...@@ -49,7 +60,18 @@ class _AddpaymentreceiptlistState extends State<Addpaymentreceiptlist> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Paymentreceiptsprovider>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?Consumer<Paymentreceiptsprovider>(
builder: (context, provider, child) { builder: (context, provider, child) {
return WillPopScope( return WillPopScope(
child: SafeArea( child: SafeArea(
...@@ -651,7 +673,7 @@ class _AddpaymentreceiptlistState extends State<Addpaymentreceiptlist> { ...@@ -651,7 +673,7 @@ class _AddpaymentreceiptlistState extends State<Addpaymentreceiptlist> {
}, },
); );
}, },
); ):NoNetwork(context);
} }
// void _showDialog(Widget child) { // void _showDialog(Widget child) {
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
...@@ -13,6 +14,7 @@ import 'package:intl/intl.dart'; ...@@ -13,6 +14,7 @@ import 'package:intl/intl.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../Models/financeModels/addDirectPaymentResponse.dart'; import '../../Models/financeModels/addDirectPaymentResponse.dart';
import '../../Utils/commonServices.dart';
class Directpaymentrequesitionlist extends StatefulWidget { class Directpaymentrequesitionlist extends StatefulWidget {
final String pageTitleName; final String pageTitleName;
...@@ -29,10 +31,17 @@ class _DirectpaymentrequesitionlistState ...@@ -29,10 +31,17 @@ class _DirectpaymentrequesitionlistState
Dropdowntheme ddtheme = Dropdowntheme(); Dropdowntheme ddtheme = Dropdowntheme();
List<FocusNode> focusNodes = List.generate(12, (index) => FocusNode()); List<FocusNode> focusNodes = List.generate(12, (index) => FocusNode());
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Requestionlistprovider>( var provider = Provider.of<Requestionlistprovider>(
context, context,
...@@ -45,6 +54,7 @@ class _DirectpaymentrequesitionlistState ...@@ -45,6 +54,7 @@ class _DirectpaymentrequesitionlistState
@override @override
void dispose() { void dispose() {
focusNodes.map((e) => e.dispose()); focusNodes.map((e) => e.dispose());
_connectivity.disposeStream();
super.dispose(); super.dispose();
} }
...@@ -55,7 +65,18 @@ class _DirectpaymentrequesitionlistState ...@@ -55,7 +65,18 @@ class _DirectpaymentrequesitionlistState
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Requestionlistprovider>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?Consumer<Requestionlistprovider>(
builder: (context, provider, child) { builder: (context, provider, child) {
return WillPopScope( return WillPopScope(
child: SafeArea( child: SafeArea(
...@@ -653,7 +674,7 @@ class _DirectpaymentrequesitionlistState ...@@ -653,7 +674,7 @@ class _DirectpaymentrequesitionlistState
}, },
); );
}, },
); ):NoNetwork(context);
} }
// void _showDialog(Widget child) { // void _showDialog(Widget child) {
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:generp/Notifiers/financeProvider/DashboardProvider.dart'; import 'package:generp/Notifiers/financeProvider/DashboardProvider.dart';
...@@ -8,6 +9,8 @@ import 'package:generp/Utils/commonWidgets.dart'; ...@@ -8,6 +9,8 @@ import 'package:generp/Utils/commonWidgets.dart';
import 'package:generp/screens/screensExports.dart'; import 'package:generp/screens/screensExports.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../Utils/commonServices.dart';
class Financedashboard extends StatefulWidget { class Financedashboard extends StatefulWidget {
const Financedashboard({super.key}); const Financedashboard({super.key});
...@@ -16,25 +19,56 @@ class Financedashboard extends StatefulWidget { ...@@ -16,25 +19,56 @@ class Financedashboard extends StatefulWidget {
} }
class _FinancedashboardState extends State<Financedashboard> { class _FinancedashboardState extends State<Financedashboard> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Dashboardprovider>(context, listen: false); var provider = Provider.of<Dashboardprovider>(context, listen: false);
provider.DashboardPagesAPIFunction(context); provider.DashboardPagesAPIFunction(context);
provider.addFormfinanceFormAccessPagesAPIFunction(context); provider.addFormfinanceFormAccessPagesAPIFunction(context);
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Platform.isAndroid switch (_source.keys.toList()[0]) {
? WillPopScope( case ConnectivityResult.mobile:
onWillPop: () => onBackPressed(context), connection = 'Online';
child: SafeArea(top: false, bottom: true, child: _scaffold(context)), break;
) case ConnectivityResult.wifi:
: _scaffold(context); connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return (connection == "Online")
? Platform.isAndroid
? WillPopScope(
onWillPop: () => onBackPressed(context),
child: SafeArea(
top: false,
bottom: true,
child: _scaffold(context),
),
)
: _scaffold(context)
: NoNetwork(context);
} }
Widget _scaffold(BuildContext context) { Widget _scaffold(BuildContext context) {
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:generp/Utils/app_colors.dart'; import 'package:generp/Utils/app_colors.dart';
...@@ -7,6 +8,7 @@ import 'package:generp/Utils/commonWidgets.dart'; ...@@ -7,6 +8,7 @@ import 'package:generp/Utils/commonWidgets.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../Notifiers/financeProvider/paymentRequisitionPaymentsListProvider.dart'; import '../../Notifiers/financeProvider/paymentRequisitionPaymentsListProvider.dart';
import '../../Utils/commonServices.dart';
import 'FileViewer.dart'; import 'FileViewer.dart';
class Paymentdetailspaymentrequisition extends StatefulWidget { class Paymentdetailspaymentrequisition extends StatefulWidget {
...@@ -28,10 +30,17 @@ class _PaymentdetailspaymentrequisitionState ...@@ -28,10 +30,17 @@ class _PaymentdetailspaymentrequisitionState
extends State<Paymentdetailspaymentrequisition> { extends State<Paymentdetailspaymentrequisition> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Paymentrequisitionpaymentslistprovider>( var provider = Provider.of<Paymentrequisitionpaymentslistprovider>(
context, context,
...@@ -41,9 +50,27 @@ class _PaymentdetailspaymentrequisitionState ...@@ -41,9 +50,27 @@ class _PaymentdetailspaymentrequisitionState
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Paymentrequisitionpaymentslistprovider>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?Consumer<Paymentrequisitionpaymentslistprovider>(
builder: (context, provider, child) { builder: (context, provider, child) {
var payment_det = provider.paymentDetails; var payment_det = provider.paymentDetails;
...@@ -213,7 +240,7 @@ class _PaymentdetailspaymentrequisitionState ...@@ -213,7 +240,7 @@ class _PaymentdetailspaymentrequisitionState
}, },
); );
}, },
); ):NoNetwork(context);
} }
} }
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.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'; import 'package:flutter_svg/svg.dart';
...@@ -7,24 +8,36 @@ import 'package:generp/screens/finance/paymentDetailsPaymentRequisition.dart'; ...@@ -7,24 +8,36 @@ import 'package:generp/screens/finance/paymentDetailsPaymentRequisition.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../Notifiers/financeProvider/paymentRequisitionPaymentsListProvider.dart'; import '../../Notifiers/financeProvider/paymentRequisitionPaymentsListProvider.dart';
import '../../Utils/app_colors.dart'; import '../../Utils/app_colors.dart';
import '../../Utils/commonServices.dart';
import '../../Utils/commonWidgets.dart'; import '../../Utils/commonWidgets.dart';
import '../commonDateRangeFilter.dart'; import '../commonDateRangeFilter.dart';
import 'FileViewer.dart'; import 'FileViewer.dart';
class Paymentlistpaymentrequisition extends StatefulWidget { class Paymentlistpaymentrequisition extends StatefulWidget {
final String pageTitleName; final String pageTitleName;
const Paymentlistpaymentrequisition({super.key, required this.pageTitleName}); const Paymentlistpaymentrequisition({super.key, required this.pageTitleName});
@override @override
State<Paymentlistpaymentrequisition> createState() => _PaymentlistpaymentrequisitionState(); State<Paymentlistpaymentrequisition> createState() =>
_PaymentlistpaymentrequisitionState();
} }
class _PaymentlistpaymentrequisitionState extends State<Paymentlistpaymentrequisition> { class _PaymentlistpaymentrequisitionState
late Commondaterangefilter cf; extends State<Paymentlistpaymentrequisition> {
late Commondaterangefilter cf;
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
cf = Commondaterangefilter(); cf = Commondaterangefilter();
var provider = Provider.of<Paymentrequisitionpaymentslistprovider>( var provider = Provider.of<Paymentrequisitionpaymentslistprovider>(
...@@ -36,309 +49,380 @@ late Commondaterangefilter cf; ...@@ -36,309 +49,380 @@ late Commondaterangefilter cf;
start: DateTime(now.year, now.month, now.day), start: DateTime(now.year, now.month, now.day),
end: DateTime(now.year, now.month, now.day), end: DateTime(now.year, now.month, now.day),
); );
final dateRange = cf.getFormattedDateRange(range); final dateRange = cf.getFormattedDateRange(range);
provider.paymentsListAPI(context,'',''); provider.paymentsListAPI(context, '', '');
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Paymentrequisitionpaymentslistprovider>( switch (_source.keys.toList()[0]) {
builder: (context, provider, child) { case ConnectivityResult.mobile:
final requestLists = provider.paymentsList; connection = 'Online';
return WillPopScope( break;
onWillPop: () { case ConnectivityResult.wifi:
return onBackPressed(context); connection = 'Online';
}, break;
child: SafeArea( case ConnectivityResult.none:
top: false, default:
bottom: Platform.isIOS?false:true, connection = 'Offline';
child: Scaffold( }
resizeToAvoidBottomInset: true, return connection == "Online"
appBar: appbar2( ? Consumer<Paymentrequisitionpaymentslistprovider>(
context, builder: (context, provider, child) {
widget.pageTitleName, final requestLists = provider.paymentsList;
provider.resetForm, return WillPopScope(
Row( onWillPop: () {
children: [ return onBackPressed(context);
// InkResponse( },
// onTap: () { child: SafeArea(
// _showOptionsSheet(context); top: false,
// }, bottom: Platform.isIOS ? false : true,
// child: SvgPicture.asset("assets/svg/ic_download.svg",), child: Scaffold(
// ), resizeToAvoidBottomInset: true,
InkResponse( appBar: appbar2(
onTap: () async { context,
var cf = Commondaterangefilter(); widget.pageTitleName,
var result = await cf.showFilterBottomSheet(context); provider.resetForm,
if (result != null) { Row(
var dateRange = result['dateRange'] as DateTimeRange?; children: [
print("dateRange: $dateRange"); // InkResponse(
// onTap: () {
// _showOptionsSheet(context);
// },
// child: SvgPicture.asset("assets/svg/ic_download.svg",),
// ),
InkResponse(
onTap: () async {
var cf = Commondaterangefilter();
var result = await cf.showFilterBottomSheet(
context,
);
if (result != null) {
var dateRange =
result['dateRange'] as DateTimeRange?;
print("dateRange: $dateRange");
var formatted = result['formatted'] as List<String>; var formatted =
print("formatted: $formatted"); result['formatted'] as List<String>;
print("formatted: $formatted");
if (formatted.isNotEmpty) { if (formatted.isNotEmpty) {
var fromDate = formatted[0]; // From date var fromDate = formatted[0]; // From date
var toDate = formatted[1]; // To date var toDate = formatted[1]; // To date
print("from_date: $fromDate"); print("from_date: $fromDate");
print("to_date: $toDate"); print("to_date: $toDate");
provider.paymentsListAPI(context,fromDate,toDate); provider.paymentsListAPI(
// You can now use fromDate and toDate as needed context,
// For example, store them or pass to another function fromDate,
} else { toDate,
print("No valid date range selected"); );
} // You can now use fromDate and toDate as needed
} else { // For example, store them or pass to another function
print("Bottom sheet closed without selection"); } else {
} print("No valid date range selected");
}, }
child: SvgPicture.asset("assets/svg/filter_ic.svg",height: 25,), } else {
print("Bottom sheet closed without selection");
}
},
child: SvgPicture.asset(
"assets/svg/filter_ic.svg",
height: 25,
),
),
],
), ),
], ),
), backgroundColor: AppColors.scaffold_bg_color,
), body:
backgroundColor: AppColors.scaffold_bg_color, provider.isLoading
body: provider.isLoading ? Center(
? Center(child: CircularProgressIndicator.adaptive( child: CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation<Color>( valueColor: AlwaysStoppedAnimation<Color>(
AppColors.app_blue) AppColors.app_blue,
)) ),
:requestLists.isNotEmpty?SizedBox( ),
child: Scrollbar( )
thumbVisibility: false, : requestLists.isNotEmpty
? SizedBox(
child: Scrollbar(
thumbVisibility: false,
child: ListView.builder( child: ListView.builder(
itemCount: requestLists.length, itemCount: requestLists.length,
shrinkWrap: true, shrinkWrap: true,
physics: AlwaysScrollableScrollPhysics(), physics: AlwaysScrollableScrollPhysics(),
itemBuilder: (context, index) { itemBuilder: (context, index) {
return Container( return Container(
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
horizontal: 10, horizontal: 10,
vertical: 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(0xFFFFF3CE),
borderRadius: BorderRadius.circular(8),
), ),
child: SvgPicture.asset( margin: EdgeInsets.symmetric(
"assets/svg/fin_ic.svg", horizontal: 10,
vertical: 10,
),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
), ),
),
),
SizedBox(width: 10),
Expanded(
flex: 4,
child: SizedBox(
child: Column( child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [ children: [
Text( Row(
requestLists[index].receipientAccount!, children: [
style: TextStyle( Expanded(
fontFamily: "JakartaMedium", flex: 1,
fontSize: 14, child: Container(
color: AppColors.semi_black, height: 50,
), width: 35,
padding: EdgeInsets.all(8.0),
decoration: BoxDecoration(
color: Color(0xFFFFF3CE),
borderRadius:
BorderRadius.circular(8),
),
child: SvgPicture.asset(
"assets/svg/fin_ic.svg",
),
),
),
SizedBox(width: 10),
Expanded(
flex: 4,
child: SizedBox(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
requestLists[index]
.receipientAccount!,
style: TextStyle(
fontFamily:
"JakartaMedium",
fontSize: 14,
color:
AppColors
.semi_black,
),
),
Text(
"₹${requestLists[index].amount}",
style: TextStyle(
fontFamily:
"JakartaMedium",
fontSize: 14,
color:
AppColors.app_blue,
),
),
],
),
),
),
// Expanded(
// flex: 2,
// child: Container(
// padding: EdgeInsets.symmetric(
// horizontal: 5,
// vertical: 10,
// ),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(8),
// color: Color(0xFFE3FFE0),
// ),
// child: Center(
// child: Text(
// requestLists[index].refType!,
// textAlign: TextAlign.center,
// style: TextStyle(
// fontFamily: "JakartaMedium",
// fontSize: 14,
// color: Color(0xFF0D9C00),
// ),
// ),
// ),
// ),
// ),
],
), ),
Text( Divider(
"₹${requestLists[index].amount}", thickness: 0.5,
style: TextStyle( color: Color(0xFFD7D7D7),
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
),
), ),
], ...List.generate(5, (j) {
), final headings = [
), "To Account",
), "Attachment",
// Expanded( "Request Mode",
// flex: 2,
// child: Container(
// padding: EdgeInsets.symmetric(
// horizontal: 5,
// vertical: 10,
// ),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(8),
// color: Color(0xFFE3FFE0),
// ),
// child: Center(
// child: Text(
// requestLists[index].refType!,
// textAlign: TextAlign.center,
// style: TextStyle(
// fontFamily: "JakartaMedium",
// fontSize: 14,
// color: Color(0xFF0D9C00),
// ),
// ),
// ),
// ),
// ),
],
),
Divider(thickness: 0.5, color: Color(0xFFD7D7D7)),
...List.generate(5, (j) {
final headings = [
"To Account",
"Attachment",
"Request Mode",
"Payment Date", "Payment Date",
"Note", "Note",
]; ];
final subHeadings = [ final subHeadings = [
requestLists[index].payAccount, requestLists[index].payAccount,
"View", "View",
requestLists[index].requestMode, requestLists[index].requestMode,
// requestLists[index].attachmentDirFilePath // requestLists[index].attachmentDirFilePath
requestLists[index].paymentDate, requestLists[index].paymentDate,
requestLists[index].description, requestLists[index].description,
]; ];
if(headings[j]=="Attachment"&&requestLists[index] if (headings[j] == "Attachment" &&
.attachmentViewFileName==""){ requestLists[index]
return SizedBox.shrink(); .attachmentViewFileName ==
} "") {
return Container( return SizedBox.shrink();
padding: EdgeInsets.symmetric(vertical: 5), }
child: Row( return Container(
crossAxisAlignment: padding: EdgeInsets.symmetric(
CrossAxisAlignment.start, vertical: 5,
children: [ ),
Expanded( child: Row(
child: Text( crossAxisAlignment:
headings[j], CrossAxisAlignment.start,
style: TextStyle( children: [
fontFamily: "JakartaMedium", Expanded(
fontSize: 14, child: Text(
color: AppColors.semi_black, headings[j],
), style: TextStyle(
), fontFamily:
), "JakartaMedium",
Expanded( fontSize: 14,
child: InkResponse( color:
onTap: AppColors.semi_black,
j != 1 ),
? null ),
: () { ),
Navigator.push( Expanded(
context, child: InkResponse(
MaterialPageRoute( onTap:
builder: j != 1
( ? null
context, : () {
) => Fileviewer( Navigator.push(
fileName: context,
requestLists[index] MaterialPageRoute(
.attachmentViewFileName!, builder:
fileUrl: (
requestLists[index] context,
.attachmentDirFilePath!, ) => Fileviewer(
), fileName:
requestLists[index].attachmentViewFileName!,
fileUrl:
requestLists[index].attachmentDirFilePath!,
),
),
);
},
child: Text(
subHeadings[j] == ""
? "-"
: subHeadings[j] ??
"-",
style: TextStyle(
fontSize: 14,
color:
j == 1
? AppColors
.app_blue
: Color(
0xFF818181,
),
decoration:
j == 1
? TextDecoration
.underline
: TextDecoration
.none,
decorationColor:
j == 1
? AppColors
.app_blue
: AppColors
.white,
),
),
),
),
],
), ),
); );
}, }),
child: Text( InkResponse(
subHeadings[j]==""?"-": subHeadings[j]??"-", onTap: () async {
style: TextStyle( var res = await Navigator.push(
fontSize: 14, context,
color: MaterialPageRoute(
j == 1 builder:
? AppColors.app_blue (
: Color(0xFF818181), context,
decoration: ) => Paymentdetailspaymentrequisition(
j == 1 pageName:
? TextDecoration.underline widget.pageTitleName,
: TextDecoration.none, paymentRequestId:
decorationColor: requestLists[index]
j == 1 .id,
? AppColors.app_blue ),
: AppColors.white, ),
);
if (res == true) {
provider.paymentsListAPI(
context,
'',
'',
);
}
},
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",
),
],
),
), ),
), ),
), ],
),
],
),
);
}),
InkResponse(
onTap: () async {
var res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Paymentdetailspaymentrequisition(
pageName: widget.pageTitleName,
paymentRequestId:
requestLists[index].id,
),
),
);
if(res==true){
provider.paymentsListAPI(context,'','');
}
},
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",
), ),
], );
), },
), ),
), ),
], )
), : Emptywidget(context),
);
},
),
), ),
):Emptywidget(context) ),
), );
), },
); )
}, : NoNetwork(context);
);
} }
Future<void> _showOptionsSheet(BuildContext context) { Future<void> _showOptionsSheet(BuildContext context) {
...@@ -362,7 +446,10 @@ late Commondaterangefilter cf; ...@@ -362,7 +446,10 @@ late Commondaterangefilter cf;
left: 15, left: 15,
right: 15, right: 15,
top: 10, top: 10,
),padding: EdgeInsets.only( bottom: MediaQuery.of(context).viewInsets.bottom,), ),
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
),
child: SingleChildScrollView( child: SingleChildScrollView(
child: Column( child: Column(
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:generp/Utils/app_colors.dart'; import 'package:generp/Utils/app_colors.dart';
import 'package:generp/Utils/commonWidgets.dart'; import 'package:generp/Utils/commonWidgets.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../Notifiers/financeProvider/paymentReceiptsProvider.dart'; import '../../Notifiers/financeProvider/paymentReceiptsProvider.dart';
import '../../Utils/commonServices.dart';
import 'FileViewer.dart'; import 'FileViewer.dart';
class Paymentreceiptdetails extends StatefulWidget { class Paymentreceiptdetails extends StatefulWidget {
...@@ -26,11 +28,18 @@ class Paymentreceiptdetails extends StatefulWidget { ...@@ -26,11 +28,18 @@ class Paymentreceiptdetails extends StatefulWidget {
class _PaymentreceiptdetailsState class _PaymentreceiptdetailsState
extends State<Paymentreceiptdetails> { extends State<Paymentreceiptdetails> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Paymentreceiptsprovider>( var provider = Provider.of<Paymentreceiptsprovider>(
context, context,
...@@ -39,10 +48,28 @@ class _PaymentreceiptdetailsState ...@@ -39,10 +48,28 @@ class _PaymentreceiptdetailsState
provider.paymentsListDetailsAPI(context, widget.paymentRequestId); provider.paymentsListDetailsAPI(context, widget.paymentRequestId);
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Paymentreceiptsprovider>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?
Consumer<Paymentreceiptsprovider>(
builder: (context, provider, child) { builder: (context, provider, child) {
var payment_det = provider.receiptDetails; var payment_det = provider.receiptDetails;
...@@ -190,7 +217,7 @@ class _PaymentreceiptdetailsState ...@@ -190,7 +217,7 @@ class _PaymentreceiptdetailsState
}, },
); );
}, },
); ):NoNetwork(context);
} }
} }
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.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'; import 'package:flutter_svg/svg.dart';
...@@ -9,12 +10,14 @@ import 'package:provider/provider.dart'; ...@@ -9,12 +10,14 @@ import 'package:provider/provider.dart';
import '../../Notifiers/financeProvider/paymentReceiptsProvider.dart'; import '../../Notifiers/financeProvider/paymentReceiptsProvider.dart';
import '../../Notifiers/financeProvider/paymentRequisitionPaymentsListProvider.dart'; import '../../Notifiers/financeProvider/paymentRequisitionPaymentsListProvider.dart';
import '../../Utils/app_colors.dart'; import '../../Utils/app_colors.dart';
import '../../Utils/commonServices.dart';
import '../../Utils/commonWidgets.dart'; import '../../Utils/commonWidgets.dart';
import '../commonDateRangeFilter.dart'; import '../commonDateRangeFilter.dart';
import 'FileViewer.dart'; import 'FileViewer.dart';
class Paymentreceiptlist extends StatefulWidget { class Paymentreceiptlist extends StatefulWidget {
final String pageTitleName; final String pageTitleName;
const Paymentreceiptlist({super.key, required this.pageTitleName}); const Paymentreceiptlist({super.key, required this.pageTitleName});
@override @override
...@@ -22,292 +25,363 @@ class Paymentreceiptlist extends StatefulWidget { ...@@ -22,292 +25,363 @@ class Paymentreceiptlist extends StatefulWidget {
} }
class _PaymentreceiptlistState extends State<Paymentreceiptlist> { class _PaymentreceiptlistState extends State<Paymentreceiptlist> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Paymentreceiptsprovider>( var provider = Provider.of<Paymentreceiptsprovider>(
context, context,
listen: false, listen: false,
); );
provider.paymentsListAPI(context,'',''); provider.paymentsListAPI(context, '', '');
}); });
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Paymentreceiptsprovider>( switch (_source.keys.toList()[0]) {
builder: (context, provider, child) { case ConnectivityResult.mobile:
final requestLists = provider.receiptsList; connection = 'Online';
return WillPopScope( break;
onWillPop: () { case ConnectivityResult.wifi:
return onBackPressed(context); connection = 'Online';
}, break;
child: SafeArea( case ConnectivityResult.none:
top: false, default:
bottom: Platform.isIOS?false:true, connection = 'Offline';
child: Scaffold( }
resizeToAvoidBottomInset: true, return connection == "Online"
appBar: appbar2( ? Consumer<Paymentreceiptsprovider>(
context, builder: (context, provider, child) {
widget.pageTitleName, final requestLists = provider.receiptsList;
provider.resetForm, return WillPopScope(
Row( onWillPop: () {
children: [ return onBackPressed(context);
// InkResponse( },
// onTap: () { child: SafeArea(
// _showOptionsSheet(context); top: false,
// }, bottom: Platform.isIOS ? false : true,
// child: SvgPicture.asset("assets/svg/ic_download.svg",), child: Scaffold(
// ), resizeToAvoidBottomInset: true,
InkResponse( appBar: appbar2(
onTap: () async { context,
var cf = Commondaterangefilter(); widget.pageTitleName,
var result = await cf.showFilterBottomSheet(context); provider.resetForm,
if (result != null) { Row(
var dateRange = result['dateRange'] as DateTimeRange?; children: [
print("dateRange: $dateRange"); // InkResponse(
// onTap: () {
// _showOptionsSheet(context);
// },
// child: SvgPicture.asset("assets/svg/ic_download.svg",),
// ),
InkResponse(
onTap: () async {
var cf = Commondaterangefilter();
var result = await cf.showFilterBottomSheet(
context,
);
if (result != null) {
var dateRange =
result['dateRange'] as DateTimeRange?;
print("dateRange: $dateRange");
var formatted = result['formatted'] as List<String>; var formatted =
print("formatted: $formatted"); result['formatted'] as List<String>;
print("formatted: $formatted");
if (formatted.isNotEmpty) { if (formatted.isNotEmpty) {
var fromDate = formatted[0]; // From date var fromDate = formatted[0]; // From date
var toDate = formatted[1]; // To date var toDate = formatted[1]; // To date
print("from_date: $fromDate"); print("from_date: $fromDate");
print("to_date: $toDate"); print("to_date: $toDate");
provider.paymentsListAPI(context,fromDate,toDate); provider.paymentsListAPI(
// You can now use fromDate and toDate as needed context,
// For example, store them or pass to another function fromDate,
} else { toDate,
print("No valid date range selected"); );
} // You can now use fromDate and toDate as needed
} else { // For example, store them or pass to another function
print("Bottom sheet closed without selection"); } else {
} print("No valid date range selected");
}, }
child: SvgPicture.asset("assets/svg/filter_ic.svg",height: 25,), } else {
), print("Bottom sheet closed without selection");
], }
), },
), child: SvgPicture.asset(
backgroundColor: AppColors.scaffold_bg_color, "assets/svg/filter_ic.svg",
body: provider.isLoading height: 25,
? Center(child: CircularProgressIndicator.adaptive( ),
valueColor: AlwaysStoppedAnimation<Color>(
AppColors.app_blue)
)):requestLists.isNotEmpty?SizedBox(
child: Scrollbar(
child: ListView.builder(
itemCount: requestLists.length,
shrinkWrap: true,
physics: AlwaysScrollableScrollPhysics(),
itemBuilder: (context, index) {
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: [ backgroundColor: AppColors.scaffold_bg_color,
Expanded( body:
flex: 1, provider.isLoading
child: Container( ? Center(
height: 50, child: CircularProgressIndicator.adaptive(
width: 35, valueColor: AlwaysStoppedAnimation<Color>(
padding: EdgeInsets.all(8.0), AppColors.app_blue,
decoration: BoxDecoration( ),
color: Color(0xFFFFF3CE), ),
borderRadius: BorderRadius.circular(8), )
: requestLists.isNotEmpty
? SizedBox(
child: Scrollbar(
child: ListView.builder(
itemCount: requestLists.length,
shrinkWrap: true,
physics: AlwaysScrollableScrollPhysics(),
itemBuilder: (context, index) {
return Container(
padding: EdgeInsets.symmetric(
horizontal: 10,
vertical: 10,
), ),
child: SvgPicture.asset( margin: EdgeInsets.symmetric(
"assets/svg/fin_ic.svg", horizontal: 10,
vertical: 10,
),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
), ),
),
),
SizedBox(width: 10),
Expanded(
flex: 4,
child: SizedBox(
child: Column( child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [ children: [
Text( Row(
requestLists[index].receipientAccount!, children: [
style: TextStyle( Expanded(
fontFamily: "JakartaMedium", flex: 1,
fontSize: 14, child: Container(
color: AppColors.semi_black, height: 50,
), width: 35,
padding: EdgeInsets.all(8.0),
decoration: BoxDecoration(
color: Color(0xFFFFF3CE),
borderRadius:
BorderRadius.circular(8),
),
child: SvgPicture.asset(
"assets/svg/fin_ic.svg",
),
),
),
SizedBox(width: 10),
Expanded(
flex: 4,
child: SizedBox(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
requestLists[index]
.receipientAccount!,
style: TextStyle(
fontFamily:
"JakartaMedium",
fontSize: 14,
color:
AppColors
.semi_black,
),
),
Text(
"₹${requestLists[index].amount}",
style: TextStyle(
fontFamily:
"JakartaMedium",
fontSize: 14,
color:
AppColors.app_blue,
),
),
],
),
),
),
],
), ),
Text( Divider(
"₹${requestLists[index].amount}", thickness: 0.5,
style: TextStyle( color: Color(0xFFD7D7D7),
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
),
), ),
], ...List.generate(5, (j) {
), final headings = [
), "Receipt Account",
), "Attachment",
"Request Mode",
], "Receipt Date",
), "Note",
Divider(thickness: 0.5, color: Color(0xFFD7D7D7)), ];
...List.generate(5, (j) {
final headings = [
"Receipt Account",
"Attachment",
"Request Mode",
"Receipt Date",
"Note",
];
final subHeadings = [ final subHeadings = [
requestLists[index].receipientAccount, requestLists[index]
"View", .receipientAccount,
requestLists[index].requestMode, "View",
requestLists[index].requestMode,
// requestLists[index].attachmentDirFilePath // requestLists[index].attachmentDirFilePath
requestLists[index].receiptDate, requestLists[index].receiptDate,
requestLists[index].description, requestLists[index].description,
]; ];
if(headings[j]=="Attachment"&&requestLists[index] if (headings[j] == "Attachment" &&
.attachmentViewFileName==""){ requestLists[index]
return SizedBox.shrink(); .attachmentViewFileName ==
} "") {
return Container( return SizedBox.shrink();
padding: EdgeInsets.symmetric(vertical: 5), }
child: Row( return Container(
crossAxisAlignment: padding: EdgeInsets.symmetric(
CrossAxisAlignment.start, vertical: 5,
children: [ ),
Expanded( child: Row(
child: Text( crossAxisAlignment:
headings[j], CrossAxisAlignment.start,
style: TextStyle( children: [
fontFamily: "JakartaMedium", Expanded(
fontSize: 14, child: Text(
color: AppColors.semi_black, headings[j],
), style: TextStyle(
), fontFamily:
), "JakartaMedium",
Expanded( fontSize: 14,
child: InkResponse( color:
onTap: AppColors.semi_black,
j != 1 ),
? null ),
: () { ),
Navigator.push( Expanded(
context, child: InkResponse(
MaterialPageRoute( onTap:
builder: j != 1
( ? null
context, : () {
) => Fileviewer( Navigator.push(
fileName: context,
requestLists[index] MaterialPageRoute(
.attachmentViewFileName!, builder:
fileUrl: (
requestLists[index] context,
.attachmentDirFilePath!, ) => Fileviewer(
), fileName:
requestLists[index].attachmentViewFileName!,
fileUrl:
requestLists[index].attachmentDirFilePath!,
),
),
);
},
child: Text(
subHeadings[j] == ""
? "-"
: subHeadings[j] ??
"-",
style: TextStyle(
fontSize: 14,
color:
j == 1
? AppColors
.app_blue
: Color(
0xFF818181,
),
decoration:
j == 1
? TextDecoration
.underline
: TextDecoration
.none,
decorationColor:
j == 1
? AppColors
.app_blue
: AppColors
.white,
),
),
),
),
],
), ),
); );
}, }),
child: Text( InkResponse(
subHeadings[j]==""?"-":subHeadings[j]??"-", onTap: () async {
style: TextStyle( var res = await Navigator.push(
fontSize: 14, context,
color: MaterialPageRoute(
j == 1 builder:
? AppColors.app_blue (
: Color(0xFF818181), context,
decoration: ) => Paymentreceiptdetails(
j == 1 pageName:
? TextDecoration.underline widget.pageTitleName,
: TextDecoration.none, paymentRequestId:
decorationColor: requestLists[index]
j == 1 .id,
? AppColors.app_blue ),
: AppColors.white, ),
);
if (res == true) {
provider.paymentsListAPI(
context,
'',
'',
);
}
},
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",
),
],
),
), ),
), ),
), ],
),
],
),
);
}),
InkResponse(
onTap: () async {
var res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
Paymentreceiptdetails(
pageName: widget.pageTitleName,
paymentRequestId:
requestLists[index].id,
),
),
);
if(res==true){
provider.paymentsListAPI(context,'','');
}
},
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",
), ),
], );
), },
), ),
), ),
], )
), : Emptywidget(context),
);
},
),
), ),
):Emptywidget(context) ),
), );
), },
); )
}, : NoNetwork(context);
);
} }
Future<void> _showOptionsSheet(BuildContext context) { Future<void> _showOptionsSheet(BuildContext context) {
...@@ -332,7 +406,9 @@ class _PaymentreceiptlistState extends State<Paymentreceiptlist> { ...@@ -332,7 +406,9 @@ class _PaymentreceiptlistState extends State<Paymentreceiptlist> {
right: 15, right: 15,
top: 10, top: 10,
), ),
padding: EdgeInsets.only( bottom: MediaQuery.of(context).viewInsets.bottom,), padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
),
child: SingleChildScrollView( child: SingleChildScrollView(
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
......
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