CHANGE_TICKET_FLOW

This commit is contained in:
venbaittech 2025-08-21 14:36:28 +05:30
parent 3d6e9656b4
commit 925e6e7624
6 changed files with 419 additions and 300 deletions

36
ation - Inprogress Normal file
View File

@ -0,0 +1,36 @@
SSUUMMMMAARRYY OOFF LLEESSSS CCOOMMMMAANNDDSS
Commands marked with * may be preceded by a number, _N.
Notes in parentheses indicate the behavior if _N is given.
A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K.
h H Display this help.
q :q Q :Q ZZ Exit.
---------------------------------------------------------------------------
MMOOVVIINNGG
e ^E j ^N CR * Forward one line (or _N lines).
y ^Y k ^K ^P * Backward one line (or _N lines).
f ^F ^V SPACE * Forward one window (or _N lines).
b ^B ESC-v * Backward one window (or _N lines).
z * Forward one window (and set window to _N).
w * Backward one window (and set window to _N).
ESC-SPACE * Forward one window, but don't stop at end-of-file.
d ^D * Forward one half-window (and set half-window to _N).
u ^U * Backward one half-window (and set half-window to _N).
ESC-) RightArrow * Right one half screen width (or _N positions).
ESC-( LeftArrow * Left one half screen width (or _N positions).
ESC-} ^RightArrow Right to last column displayed.
ESC-{ ^LeftArrow Left to first column.
F Forward forever; like "tail -f".
ESC-F Like F but stop when search pattern is found.
r ^R ^L Repaint screen.
R Repaint screen, discarding buffered input.
---------------------------------------------------
Default "window" is the screen height.
Default "half-window" is half of the screen height.
---------------------------------------------------------------------------
SSEEAARRCCHHIINNGG

View File

@ -34,6 +34,7 @@ class _claimtracklistformState extends State<claimtracklist> {
dynamic policyDataIsEmpty = 1;
dynamic policyHeading;
dynamic policyName;
dynamic name;
dynamic policyType;
dynamic policyTickID;
dynamic policyDate;
@ -188,6 +189,7 @@ class _claimtracklistformState extends State<claimtracklist> {
print(claimTrackMasterList[0]['thz_id']);
policyTickID = claimTrackMasterList[0]['thz_id'];
policyName = claimTrackMasterList[0]['policy_no'];
// name = claimTrackMasterList[0]['name'];
policyType = claimTrackMasterList[0]['ticket_type'];
policyStatus = claimTrackMasterList[0]['status'];
member = claimTrackMasterList[0]['assignee_name'];
@ -305,8 +307,15 @@ class _claimtracklistformState extends State<claimtracklist> {
flex: 1,
child: InkWell(
onTap: () {
// Navigator.pushNamed(
// context, 'claims');
Navigator.pushNamed(
context, 'claims');
context,
'help',
arguments: {
'ticketTabSelected': 0
},
);
},
child: Icon(
Icons
@ -325,7 +334,7 @@ class _claimtracklistformState extends State<claimtracklist> {
: MainAxisAlignment.start,
children: [
Text(
policyName ?? '',
policyType ?? '',
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize:
@ -441,6 +450,8 @@ class _claimtracklistformState extends State<claimtracklist> {
dynamic messagername;
messagername =
message['notes_by'];
dynamic name;
name = message['name'];
// if (isUserMessage) {
// messagername = empName;
// } else {
@ -511,7 +522,7 @@ class _claimtracklistformState extends State<claimtracklist> {
SizedBox(
width: 5),
Text(
messagername,
name,
style: GoogleFonts
.poppins(
fontSize:
@ -601,7 +612,7 @@ class _claimtracklistformState extends State<claimtracklist> {
Responsive.isDesktop(
context)
? 2
: 3,
: 4,
child: Container(
alignment: Alignment
.centerRight,
@ -634,13 +645,6 @@ class _claimtracklistformState extends State<claimtracklist> {
formData);
}
},
child: Text(
'Reply',
style: GoogleFonts
.poppins(
color: Colors
.white),
),
style: ElevatedButton
.styleFrom(
backgroundColor:
@ -654,6 +658,13 @@ class _claimtracklistformState extends State<claimtracklist> {
5),
),
),
child: Text(
'Reply',
style: GoogleFonts
.poppins(
color: Colors
.white),
),
),
),
),
@ -749,15 +760,17 @@ class _claimtracklistformState extends State<claimtracklist> {
Widget buildDesktopLayout(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
buildExpandedColumn(context, 'Policy No', policyTickID),
buildExpandedColumn(context, 'Policy Name', policyName),
buildExpandedColumn(context, 'Ticket Type', policyType),
buildExpandedColumn(context, 'Ticket No', policyTickID),
if (policyType != "Sales")
buildExpandedColumn(context, 'Policy No', policyName),
// buildExpandedColumn(context, 'Ticket Type', policyType),
buildExpandedColumn(context, 'Status', policyStatus),
buildExpandedColumn(context, 'Assign To', member),
buildExpandedColumn(context, 'Message', policyMessage),
],
),
if (departmentID == '4') // Conditional check for policy_type
@ -808,24 +821,28 @@ class _claimtracklistformState extends State<claimtracklist> {
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
buildExpandedColumn(context, 'Policy No', policyTickID),
buildExpandedColumn(context, 'Policy Name', policyName),
],
),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
buildExpandedColumn(context, 'Status', policyStatus),
buildExpandedColumn(context, 'Ticket Type', policyType),
buildExpandedColumn(context, 'Ticket No', policyTickID),
if (policyType != "Sales")
buildExpandedColumn(context, 'Policy No', policyName),
if (policyType == "Sales")
buildExpandedColumn(context, 'Status', policyStatus),
],
),
SizedBox(height: 20),
if (policyType != "Sales")
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
buildExpandedColumn(context, 'Status', policyStatus),
// buildExpandedColumn(context, 'Ticket Type', policyType),
],
),
if (policyType != "Sales") SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
buildExpandedColumn(context, 'Subject', policySubject),
buildExpandedColumn(context, 'Assigned To', member),
buildExpandedColumn(context, 'Message', policyMessage),
],
),
if (departmentID == '4')

View File

@ -75,6 +75,29 @@ class _helpState extends State<help> {
super.initState();
apiService = ApiService(context); // Initialize ApiService here
_loadToken();
print('initState');
getTicketList();
// handleTicketRefrsh();
}
void handleTicketRefrsh() {
print('handleTicketRefrsh');
final args =
ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
if (args != null && args.containsKey('ticketTabSelected')) {
print('ARGSDATA');
setState(() {
tickets = args['ticketTabSelected']; // e.g. 0 from TicketForm
closedTrackActive = 1;
allClaimsActive = 1;
tickets = 0;
ticketsActive = 0;
isActive = false;
getTicketList();
});
}
}
@override
@ -85,21 +108,29 @@ class _helpState extends State<help> {
@override
void didChangeDependencies() {
super.didChangeDependencies();
print('didChangeDependencies');
if (!_isArgsHandled) {
final args = ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
// if (!_isArgsHandled) {
final args =
ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
print('args - $args');
if (args != null && args.containsKey('ticketTabSelected')) {
print('args1');
setState(() {
tickets = args['ticketTabSelected']; // e.g. 0 from TicketForm
if (args != null && args.containsKey('ticketTabSelected')) {
setState(() {
tickets = args['ticketTabSelected']; // e.g. 0 from TicketForm
closedTrackActive = 1;
allClaimsActive = 1;
isActive = false;
});
}
_isArgsHandled = true; // only apply once
print('args2- $tickets');
closedTrackActive = 1;
allClaimsActive = 1;
tickets = 0;
ticketsActive = 0;
isActive = false;
if (tickets == 0) getTicketList();
});
}
// _isArgsHandled = true; // only apply once
// }
}
Future<void> _loadToken() async {
@ -122,6 +153,7 @@ class _helpState extends State<help> {
print(client_id);
getSelfEmployeeProfile();
getTrackClaimsList();
getTicketList();
} else {
// Token is empty or null, handle accordingly (e.g., navigate to login screen)
ToastHelper.showErrorToast(context, 'Session Out');
@ -637,6 +669,7 @@ class _helpState extends State<help> {
ticketsActive = 0;
allClaimsActive = 1;
closedTrackActive = 1;
tickets = 0;
// isActive = false;
// allClaimsActive = 1;
// closedTrackActive = 1;

View File

@ -111,10 +111,10 @@ class ApiService {
await _initializeToken();
}
final url2 =
final url =
Uri.parse('${Environment.apiUrl}ticketList?mobile=$empMobileNo');
final url = Uri.parse('${Environment.apiUrl}ticketList?mobile=1234567890');
final url1 = Uri.parse('${Environment.apiUrl}ticketList?mobile=1234567890');
final headers = {
'Authorization': 'Bearer $_token' ?? '',
};

View File

@ -119,8 +119,8 @@ class _ticketsState extends State<tickets> {
client_id!, empCodeString!, 'Active', client_branch_id, mobileNo);
final responseInactive =
await apiService.getActiveAndInactivePolicyDetails(client_id!,
empCodeString!, 'Inactive', client_branch_id, mobileNo);
await apiService.getActiveAndInactivePolicyDetails(client_id!,
empCodeString!, 'Inactive', client_branch_id, mobileNo);
final bool isActiveSuccess = responseActive['status'] == 'success' &&
responseActive['data'] != null;
@ -191,9 +191,7 @@ class _ticketsState extends State<tickets> {
}
});
if (isServiceValid &&
isPolicyValid &&
isSubjectValid && isMessageValid) {
if (isServiceValid && isPolicyValid && isSubjectValid && isMessageValid) {
// Proceed to submit
} else {
ToastHelper.showErrorToast(context, 'Please Fill Required Fields');
@ -215,7 +213,8 @@ class _ticketsState extends State<tickets> {
'email': decodedToken['email_corporate'] != null
? decodedToken['email_corporate']
: '',
'empcode': decodedToken['emp_code'] != null ? decodedToken['emp_code'] : '',
'empcode':
decodedToken['emp_code'] != null ? decodedToken['emp_code'] : '',
'message': messageController.text,
'mobile': decodedToken['mobile'] != null ? decodedToken['mobile'] : '',
'name': decodedToken['name'] != null ? decodedToken['name'] : '',
@ -250,7 +249,7 @@ class _ticketsState extends State<tickets> {
setState(() {
isLoading = false;
});
Navigator.pushNamed(context, 'help');
// Navigator.pushNamed(context, 'help');
Navigator.pushNamed(
context,
'help',
@ -273,265 +272,299 @@ class _ticketsState extends State<tickets> {
body: Stack(children: [
SingleChildScrollView(
child: Container(
padding: Responsive.isDesktop(context)
? EdgeInsets.symmetric(
horizontal: MediaQuery.of(context).size.width *
0.2, // 30% of screen width as horizontal padding
vertical: MediaQuery.of(context).size.height *
0.05, // 5% of screen height as vertical padding
)
: EdgeInsets.all(10),
color: Colors.white,
child: Column(children: [
Card(
elevation: 5,
shape: RoundedRectangleBorder(
borderRadius:
padding: Responsive.isDesktop(context)
? EdgeInsets.symmetric(
horizontal: MediaQuery.of(context).size.width *
0.2, // 30% of screen width as horizontal padding
vertical: MediaQuery.of(context).size.height *
0.05, // 5% of screen height as vertical padding
)
: EdgeInsets.all(10),
color: Colors.white,
child: Column(children: [
Card(
elevation: 5,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(15.0), // Set border radius here
),
child: Container(
decoration: BoxDecoration(
color: Colors.white, // Set background color to white
borderRadius: BorderRadius.circular(
15.0), // Set border radius for Container
),
padding: Responsive.isDesktop(context)
? EdgeInsets.only(top: 15, bottom: 15, left: 15, right: 15)
: EdgeInsets.only(
),
child: Container(
decoration: BoxDecoration(
color: Colors.white, // Set background color to white
borderRadius: BorderRadius.circular(
15.0), // Set border radius for Container
),
padding: Responsive.isDesktop(context)
? EdgeInsets.only(top: 15, bottom: 15, left: 15, right: 15)
: EdgeInsets.only(
top: 10,
bottom: 10,
left: 10,
right: 10), // Add padding to the container
child: Row(
children: [
Expanded(
flex: 12,
child: Container(
alignment: Alignment.centerLeft,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
decoration: BoxDecoration(
color: Color(
0xFFFFFCE5), // Set background color for the container
borderRadius: BorderRadius.circular(
10), // Set border radius for the container
),
padding: Responsive.isDesktop(context)
? EdgeInsets.only(
child: Row(
children: [
Expanded(
flex: 12,
child: Container(
alignment: Alignment.centerLeft,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
decoration: BoxDecoration(
color: Color(
0xFFFFFCE5), // Set background color for the container
borderRadius: BorderRadius.circular(
10), // Set border radius for the container
),
padding: Responsive.isDesktop(context)
? EdgeInsets.only(
top: 20,
bottom: 20,
left: 0,
right: 0)
: EdgeInsets.only(
: EdgeInsets.only(
top: 10,
bottom: 10,
left: 10,
right: 10),
child: Column(
crossAxisAlignment:
child: Column(
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Row(
mainAxisAlignment:
children: [
Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Expanded(
flex: 1,
child: InkWell(
onTap: () {
Navigator.pushNamed(
context, 'help');
},
child: Icon(
Icons
.chevron_left, // Replace with your desired icon
color: Color(0xFF000000),
size: 30,
),
),
children: [
Expanded(
flex: 1,
child: InkWell(
onTap: () {
Navigator.pushNamed(
context, 'help');
},
child: Icon(
Icons
.chevron_left, // Replace with your desired icon
color: Color(0xFF000000),
size: 30,
),
Expanded(
flex: 11,
child: Row(
mainAxisAlignment:
),
),
Expanded(
flex: 11,
child: Row(
mainAxisAlignment:
Responsive.isDesktop(context)
? MainAxisAlignment.center
: MainAxisAlignment.start,
children: [
Text(
'Raise a Ticket',
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize:
children: [
Text(
'Raise a Ticket',
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize:
Responsive.isDesktop(
context)
context)
? 20
: 16,
fontWeight: FontWeight.w600,
color: Color(0xFF000000),
),
)
],
),
)
],
), // Space between rows
// Add more rows as needed
fontWeight: FontWeight.w600,
color: Color(0xFF000000),
),
)
],
),
)
],
),
),
SizedBox(height: 15),
Container(
child: Column(
children: [
Column(
crossAxisAlignment:
), // Space between rows
// Add more rows as needed
],
),
),
SizedBox(height: 15),
Container(
child: Column(
children: [
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Container(
width: double.infinity,
alignment: Alignment.centerLeft,
child: Column(
mainAxisAlignment:
children: [
Container(
width: double.infinity,
alignment: Alignment.centerLeft,
child: Column(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Form(
key: formKey,
child: Column(
children: [
Form(
key: formKey,
child: Column(
children: [
Column(
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
buildDropdownField<int>(
'Service',
(value) {
setState(() {
serviceId = value;
selectedServiceName = serviceList.firstWhere(
(serList) => serList['id'] == value,
orElse: () => {'name': ''},
)['name'];
isServiceValid = true;
});
},
false,
serviceList,
'name',
serviceId,
valueKey: 'id',
),
if (!isServiceValid)
Text('Please select a Service',
style: TextStyle(color: Colors.red)),
],
),
SizedBox(height: 15),
if (selectedServiceName != "Sales")
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
buildDropdownField<String>(
'Policy Number',
(value) {
setState(() {
policyNumberId = value;
isPolicyValid = true;
});
buildDropdownField<
int>(
'Type',
(value) {
setState(() {
serviceId =
value;
selectedServiceName =
serviceList
.firstWhere(
(serList) =>
serList[
'id'] ==
value,
orElse: () =>
{
'name': ''
},
false,
policyList,
'policy_no',
policyNumberId,
valueKey: 'policy_no',
),
if (!isPolicyValid)
Text('Please select a policy',
style: TextStyle(color: Colors.red)),
],
),
SizedBox(height: 15),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
buildTextField('Subject',
subjectController),
if (!isSubjectValid)
Text('Please enter the Subject', style: TextStyle(color: Colors.red)),
SizedBox(height: 15),
buildTextAreaField(
'Message',
messageController),
if (!isMessageValid)
Text('Please enter the Message', style: TextStyle(color: Colors.red)),
]
)['name'];
isServiceValid =
true;
});
},
false,
serviceList,
'name',
serviceId,
valueKey: 'id',
),
if (!isServiceValid)
Text(
'Please select a Service',
style: TextStyle(
color: Colors
.red)),
],
),
),
],
SizedBox(height: 15),
if (selectedServiceName !=
"Sales")
Column(
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
buildDropdownField<
String>(
'Policy Number',
(value) {
setState(() {
policyNumberId =
value;
isPolicyValid =
true;
});
},
false,
policyList,
'policy_no',
policyNumberId,
valueKey:
'policy_no',
),
if (!isPolicyValid)
Text(
'Please select a policy',
style: TextStyle(
color: Colors
.red)),
],
),
SizedBox(height: 15),
Column(
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
buildTextField(
'Subject',
subjectController),
if (!isSubjectValid)
Text(
'Please enter the Subject',
style: TextStyle(
color: Colors
.red)),
SizedBox(
height: 15),
buildTextAreaField(
'Message',
messageController),
if (!isMessageValid)
Text(
'Please enter the Message',
style: TextStyle(
color: Colors
.red)),
]),
],
),
),
),
],
],
),
),
SizedBox(height: 15),
Row(
children: [
Expanded(
flex: 12,
child: Container(
alignment: Alignment.centerRight,
child: ElevatedButton(
onPressed: () {
sendFormDataToApi();
},
child: Text(
'Send',
style: GoogleFonts.poppins(
color: Colors.white),
),
style: ElevatedButton.styleFrom(
backgroundColor:
],
),
SizedBox(height: 15),
Row(
children: [
Expanded(
flex: 12,
child: Container(
alignment: Alignment.centerRight,
child: ElevatedButton(
onPressed: () {
sendFormDataToApi();
},
child: Text(
'Send',
style: GoogleFonts.poppins(
color: Colors.white),
),
style: ElevatedButton.styleFrom(
backgroundColor:
Color(0xFFE26728),
shape: RoundedRectangleBorder(
borderRadius:
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(
5),
),
),
),
),
),
],
),
),
],
),
),
],
))),
],
),
),
],
),
),
],
))),
],
),
SizedBox(height: Responsive.isDesktop(context) ? 40 : 60),
]),
)),
),
),
SizedBox(height: Responsive.isDesktop(context) ? 40 : 60),
]),
)),
if (isLoading)
Container(
color: Color(0x98FFFCE5), // Semi-transparent background
child: Center(
child: // Your GIF loader widget
Image.asset(
height: 60,
width: 60,
'assets/nhance-loader.gif'), // Adjust path to your GIF loader
Image.asset(
height: 60,
width: 60,
'assets/nhance-loader.gif'), // Adjust path to your GIF loader
),
),
if (Responsive.isDesktop(context))
@ -557,36 +590,36 @@ class _ticketsState extends State<tickets> {
bottomNavigationBar: Responsive.isDesktop(context)
? null
: CustomBottomNavigationBar(
onTabChanged: (index) {
// repositionBotman();
if (index == 0) {
Navigator.pushNamed(context, 'home');
} else if (index == 1) {
Navigator.pushNamed(context, 'claims');
} else if (index == 2) {
Navigator.pushNamed(context, 'profile');
} else if (index == 3) {
Navigator.pushNamed(context, 'help');
// Navigator.pushNamed(context, 'help');
} else if (index == 4) {
Navigator.pushNamed(context, 'wellness');
}
},
icons: [
Icons.home_outlined,
Icons.sticky_note_2_outlined,
Icons.person_outline_outlined,
Icons.headset_mic_outlined,
Icons.health_and_safety_outlined,
],
labels: [
"Home",
"Claim",
"Profile",
"Help",
"Wellness",
], // Initial index of the bottom navigation bar
),
onTabChanged: (index) {
// repositionBotman();
if (index == 0) {
Navigator.pushNamed(context, 'home');
} else if (index == 1) {
Navigator.pushNamed(context, 'claims');
} else if (index == 2) {
Navigator.pushNamed(context, 'profile');
} else if (index == 3) {
Navigator.pushNamed(context, 'help');
// Navigator.pushNamed(context, 'help');
} else if (index == 4) {
Navigator.pushNamed(context, 'wellness');
}
},
icons: [
Icons.home_outlined,
Icons.sticky_note_2_outlined,
Icons.person_outline_outlined,
Icons.headset_mic_outlined,
Icons.health_and_safety_outlined,
],
labels: [
"Home",
"Claim",
"Profile",
"Help",
"Wellness",
], // Initial index of the bottom navigation bar
),
);
}
@ -620,14 +653,14 @@ class _ticketsState extends State<tickets> {
}
Widget buildDropdownField<T>(
String label,
void Function(T?) onChanged,
bool readOnly,
List<Map<String, dynamic>> itemsList,
String displayField,
T? selectedValue, {
String valueKey = 'id',
}) {
String label,
void Function(T?) onChanged,
bool readOnly,
List<Map<String, dynamic>> itemsList,
String displayField,
T? selectedValue, {
String valueKey = 'id',
}) {
return DropdownButtonFormField<T>(
value: selectedValue,
decoration: InputDecoration(labelText: label),
@ -635,7 +668,7 @@ class _ticketsState extends State<tickets> {
return DropdownMenuItem<T>(
value: item[valueKey] as T, // cast to generic type
child:
Text(item[displayField].toString()), // always display as String
Text(item[displayField].toString()), // always display as String
);
}).toList(),
onChanged: readOnly ? null : onChanged,
@ -647,4 +680,4 @@ class _ticketsState extends State<tickets> {
},
);
}
}
}

View File

@ -27,7 +27,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))
InAppWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "InAppWebViewFlutterPlugin"))
FLTGoogleSignInPlugin.register(with: registry.registrar(forPlugin: "FLTGoogleSignInPlugin"))
FLALocalAuthPlugin.register(with: registry.registrar(forPlugin: "FLALocalAuthPlugin"))
LocalAuthPlugin.register(with: registry.registrar(forPlugin: "LocalAuthPlugin"))
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))