|
|
import 'package:flutter/material.dart';
|
|
|
import 'package:healthcare_user/common/settings.dart';
|
|
|
import 'package:flutter_native_contact_picker/flutter_native_contact_picker.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.person, '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: buttonColors, // 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"] = AppSettings.userName;
|
|
|
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"] =AppSettings.userName;
|
|
|
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");
|
|
|
}
|
|
|
},
|
|
|
)
|
|
|
],
|
|
|
))))));
|
|
|
}
|
|
|
}
|