Professional Documents
Culture Documents
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;
@override
State<PetForm> createState() => _PetFormState();
}
String? genderDropDownValue;
@override
void dispose() {
_petNameController.dispose();
_breedController.dispose();
_colorController.dispose();
_ageController.dispose();
_discriptionController.dispose();
super.dispose();
}
// FilePickerResult? result;
// String? fileName;
// PlatformFile? pickedfile;
// bool isLoading = false;
// final DateTime petAddedDate = DateTime.now();
// 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"),
// ),
// );
// }
// }
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,
),
)),
),
),
),
],
),
),
),
);
}
}