You are on page 1of 8

// ignore_for_file: non_constant_identifier_names, avoid_print,

use_build_context_synchronously

import 'package:angel_paws/provider/storage_service.dart';
import 'package:angel_paws/screens/app.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:date_time_picker/date_time_picker.dart';
import 'package:file_picker/file_picker.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'dart:async';

import 'package:intl/intl.dart';

import '../payment/payment_page.dart';

// ignore: must_be_immutable
class PetForm extends StatefulWidget {
final Map<String, dynamic> userDetail;

PetForm({Key? key, required this.userDetail}) : super(key: key);

@override
State<PetForm> createState() => _PetFormState();
}

class _PetFormState extends State<PetForm> {


final formKey = GlobalKey<FormState>();

final _petNameController = TextEditingController();


final _breedController = TextEditingController();
final _colorController = TextEditingController();
final _ageController = TextEditingController();
final _discriptionController = TextEditingController();

final Storage storage = Storage();


String? image;

String? genderDropDownValue;

@override
void dispose() {
_petNameController.dispose();
_breedController.dispose();
_colorController.dispose();
_ageController.dispose();
_discriptionController.dispose();
super.dispose();
}

// List<String> items = <String>[


// 'Dog',
// 'Cat',
// 'Bird',
// 'Fish',
// ];

List<String> genderItems = <String>[


'Male',
'Female',
];

// FilePickerResult? result;
// String? fileName;
// PlatformFile? pickedfile;
// bool isLoading = false;
// final DateTime petAddedDate = DateTime.now();

// void uploadFile() async {


// final results = await FilePicker.platform
// .pickFiles(allowMultiple: false, type: FileType.image);

// if (results != null) {
// showDialog(
// context: context,
// builder: (context) {
// return const AlertDialog(
// content: Text('Photo uploaded'),
// );
// });
// }
// if (results == null) {
// ScaffoldMessenger.of(context).showSnackBar(
// const SnackBar(
// content: Text("No file selected"),
// ),
// );
// }
// final path = results!.files.single.path!;
// final fileName = results.files.single.name;

// try {
// String imageUpload = await storage.uploadFile(path, fileName);
// image = await FirebaseStorage.instance.ref(imageUpload).getDownloadURL();
// } catch (e) {
// ScaffoldMessenger.of(context).showSnackBar(
// SnackBar(
// content: Text("Error: $e"),
// ),
// );
// }
// }

Future addPet() async {


addUserDetail(
widget.userDetail['uid'].toString(),
widget.userDetail['userName'].toString(),
widget.userDetail['address'].toString(),
widget.userDetail['contactNumber'].toString(),
widget.userDetail['secondaryContactNumber'].toString(),
widget.userDetail['startDate'].toString(),
widget.userDetail['endDate'].toString(),
_petNameController.text.trim().toString(),
_breedController.text.trim().toString(),
_colorController.text.trim().toString(),
_ageController.text.trim().toString(),
genderDropDownValue.toString(),
_discriptionController.text.trim().toString(),
);

await showDialog(
context: context,
builder: (context) {
return const AlertDialog(
content: Text('New Pet Added'),
);
});

setState(() {
_petNameController.text = '';
_breedController.text = '';
_colorController.text = '';
_ageController.text = '';
_discriptionController.text = '';
});
}

Future addUserDetail(
String uid,
String userName,
String address,
String primaryContact,
String secondaryContact,
String startDate,
String endDate,
String petName,
String breed,
String color,
String age,
String gender,
String discription) async {
await FirebaseFirestore.instance.collection('initialBooking').add({
'uid': uid,
'petname': userName,
'address': address,
'primary Contact': primaryContact,
'secondary Contact': secondaryContact,
'start date': startDate,
'end date': endDate,
'pet name': petName,
'breed': breed,
'color': color,
'pet age': age,
'pet gender': gender,
'pet discription': discription,
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
drawer: const NavigationDrawer(),
backgroundColor: Colors.grey[300],
appBar: AppBar(
backgroundColor: Color.fromRGBO(104, 44, 144, 0.4),
title: const Text('Add Pet'),
),
body: SingleChildScrollView(
child: Form(
key: formKey,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
SizedBox(
height: MediaQuery.of(context).size.height / 1.25,
child: Column(
children: <Widget>[
const SizedBox(
height: 20,
),

//name
Padding(
padding: const EdgeInsets.symmetric(horizontal: 25.0),
child: TextFormField(
controller: _petNameController,
decoration: InputDecoration(
enabledBorder: OutlineInputBorder(
borderSide: const BorderSide(color: Colors.white),
borderRadius: BorderRadius.circular(12),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: Theme.of(context).primaryColor),
borderRadius: BorderRadius.circular(12),
),
hintText: 'Your Name :(First Last) *',
fillColor: Colors.grey[200],
filled: true,
),
),
),
const SizedBox(
height: 10,
),

//age
Padding(
padding: const EdgeInsets.symmetric(horizontal: 25.0),
child: TextFormField(
controller: _breedController,
decoration: InputDecoration(
enabledBorder: OutlineInputBorder(
borderSide: const BorderSide(color: Colors.white),
borderRadius: BorderRadius.circular(12),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: Theme.of(context).primaryColor),
borderRadius: BorderRadius.circular(12),
),
hintText: 'Your Address*',
fillColor: Colors.grey[200],
filled: true,
),
),
),
const SizedBox(
height: 10,
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 25.0),
child: TextFormField(
controller: _colorController,
validator: (value) {
if (value!.isEmpty || value == '') {
return "Enter age";
} else {
return null;
}
},
decoration: InputDecoration(
enabledBorder: OutlineInputBorder(
borderSide: const BorderSide(color: Colors.white),
borderRadius: BorderRadius.circular(12),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: Theme.of(context).primaryColor),
borderRadius: BorderRadius.circular(12),
),
hintText: 'Your Contact Number : *',
fillColor: Colors.grey[200],
filled: true,
),
),
),
const SizedBox(
height: 10,
),

Padding(
padding: const EdgeInsets.symmetric(horizontal: 25.0),
child: TextFormField(
controller: _ageController,
keyboardType: TextInputType.number,
validator: (value) {
if (value!.isEmpty || value == '') {
return "Enter age";
} else {
return null;
}
},
decoration: InputDecoration(
enabledBorder: OutlineInputBorder(
borderSide: const BorderSide(color: Colors.white),
borderRadius: BorderRadius.circular(12),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: Theme.of(context).primaryColor),
borderRadius: BorderRadius.circular(12),
),
hintText: 'Secondary/Emergency contact',
fillColor: Colors.grey[200],
filled: true,
),
),
),
const SizedBox(
height: 10,
),

Padding(
padding: const EdgeInsets.symmetric(horizontal: 25.0),
child: Container(
padding: const EdgeInsets.only(
left: 10,
right: 10,
),
decoration: BoxDecoration(
border: Border.all(
color: Colors.white,
width: 1,
),
borderRadius: BorderRadius.circular(12),
),
child: DropdownButton<String>(
hint: const Text('Gender'),
underline: const SizedBox(),
dropdownColor: Colors.white,
value: genderDropDownValue,
icon: const Icon(Icons.arrow_drop_down),
iconSize: 30,
isExpanded: true,
items: genderItems
.map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem(
value: value,
child: Text(value),
);
}).toList(),
onChanged: (String? newValue) {
setState(() {
genderDropDownValue = newValue!;
});
},
),
),
),
const SizedBox(
height: 10,
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 25.0),
child: TextFormField(
controller: _discriptionController,
validator: (value) {
if (value!.isEmpty || value == '') {
return "Enter age";
} else {
return null;
}
},
decoration: InputDecoration(
enabledBorder: OutlineInputBorder(
borderSide: const BorderSide(color: Colors.white),
borderRadius: BorderRadius.circular(12),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: Theme.of(context).primaryColor),
borderRadius: BorderRadius.circular(12),
),
hintText: 'Your Contact Number : *',
fillColor: Colors.grey[200],
filled: true,
),
),
),
],
),
),
//add button
Padding(
padding: const EdgeInsets.symmetric(horizontal: 25.0),
child: GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PaymentPage(
allDetails: {
'uid': widget.userDetail['uid'].toString(),
'userName':widget.userDetail['userName'].toString(),
'address':widget.userDetail['address'].toString(),
'contactNumber':
widget.userDetail['contactNumber'].toString(),

'secondaryContactNumber':widget.userDetail['secondaryContactNumber']
.toString(),
'startDate': widget.userDetail['startDate'].toString(),
'endDate': widget.userDetail['endDate'].toString(),
'petName': _petNameController.text.trim().toString(),
'breed':_breedController.text.trim().toString(),
'color': _colorController.text.trim().toString(),
'age': _ageController.text.trim().toString(),
'gender': genderDropDownValue.toString(),
'discription':
_discriptionController.text.trim().toString(),
},
),
),
);
},
child: Container(
padding: const EdgeInsets.all(20),
decoration: BoxDecoration(
color: Color.fromRGBO(104, 44, 144, 0.4),
borderRadius: BorderRadius.circular(12),
),
child: const Center(
child: Text(
'Proceed',
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 18,
),
)),
),
),
),
],
),
),
),
);
}
}

You might also like