You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pharmacy/lib/invitations.dart

174 lines
8.5 KiB

11 months ago
import 'package:flutter/material.dart';
import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart';
import 'package:healthcare_pharmacy/settings.dart';
import 'package:intl/intl.dart';
class Invitations extends StatefulWidget {
const Invitations({Key? key}) : super(key: key);
@override
State<Invitations> createState() => _InvitationsState();
}
class _InvitationsState extends State<Invitations> {
TextEditingController mobileNumberController = TextEditingController();
TextEditingController nameController = TextEditingController();
final FlutterContactPicker _contactPicker = new FlutterContactPicker();
Contact? _contact;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppSettings.appBar('Invitations'),
body: GestureDetector(
onTap: () {
FocusManager.instance.primaryFocus?.unfocus();
},
child: SafeArea(
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(10),
child: Column(
children: [
Container(
child: TextFormField(
cursorColor: greyColor,
controller: nameController,
decoration: textFormFieldDecoration(
Icons.phone, 'Enter Name'),
),
),
SizedBox(
height: MediaQuery.of(context).size.height * .02,
),
Container(
child: TextFormField(
cursorColor: greyColor,
controller: mobileNumberController,
keyboardType: TextInputType.number,
decoration: textFormFieldDecoration(
Icons.phone, 'Enter MobileNumber'),
),
),
SizedBox(
height: MediaQuery.of(context).size.height * .04,
),
Container(
width: double.infinity,
height:
MediaQuery.of(context).size.height * .05,
child: ElevatedButton(
style: ElevatedButton.styleFrom(
primary: primaryColor, // background
onPrimary: Colors.black, // foreground
),
onPressed: () async {
if (nameController.text != '' &&
mobileNumberController.text != '') {
AppSettings.preLoaderDialog(context);
var now = new DateTime.now();
String formattedDate = DateFormat('yyyy-MM-dd kk:mm').format(now);
var payload = new Map<String, dynamic>();
payload["name"] = nameController.text;
payload["phone"] = mobileNumberController.text;
payload["dateAndTime"] = formattedDate;
bool invitationStatus = await AppSettings.inviteFriend(payload);
try{
if(invitationStatus){
Navigator.of(context, rootNavigator: true).pop();
AppSettings.longSuccessToast("Invitation sent successfully");
nameController.clear();
mobileNumberController.clear();
}
else{
Navigator.of(context, rootNavigator: true).pop();
AppSettings.longFailedToast("Failed invite your friend");
}
}
catch(e){
AppSettings.longFailedToast("Failed invite your friend");
}
}
else {
AppSettings.longFailedToast("details should not be empty");
}
},
child: const Text('Invite'),
)),
SizedBox(
height: MediaQuery.of(context).size.height * .02,
),
Container(
child: Text(
'Or',
style: TextStyle(
color: primaryColor,
fontWeight: FontWeight.bold,
fontSize: 20),
),
),
SizedBox(
height: MediaQuery.of(context).size.height * .02,
),
TextButton(
child: const Text(
'Select from contacts',
style: TextStyle(
decoration: TextDecoration.underline,
color: primaryColor,
fontSize: 20),
),
onPressed: () async {
Contact? contact =
await _contactPicker.selectContact();
setState(() {
_contact = contact;
});
AppSettings.preLoaderDialog(context);
var now = new DateTime.now();
String formattedDate = DateFormat('yyyy-MM-dd kk:mm').format(now);
var payload = new Map<String, dynamic>();
String contactNumber=_contact!.phoneNumbers.toString();
String newContact= contactNumber.substring( 1, contactNumber.length - 1 ).trim();
String stringAfterRemovingWhiteSpace = '';
for (int i = 0; i < newContact.length; i++) {
if (!newContact[i].contains(' ')) {
stringAfterRemovingWhiteSpace = stringAfterRemovingWhiteSpace + "" + newContact[i];
}
}
payload["name"] =_contact!.fullName;
payload["phone"] = stringAfterRemovingWhiteSpace;
payload["dateAndTime"] = formattedDate;
bool invitationStatus = await AppSettings.inviteFriend(payload);
try{
if(invitationStatus){
Navigator.of(context, rootNavigator: true).pop();
AppSettings.longSuccessToast("Invitation sent successfully");
}
else{
Navigator.of(context, rootNavigator: true).pop();
AppSettings.longFailedToast("Failed invite your friend");
}
}
catch(e){
AppSettings.longFailedToast("Failed invite your friend");
}
},
)
],
))))));
}
}