import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:telemednet/route_names.dart'; import 'package:image_picker/image_picker.dart'; import 'dart:io'; class PatientRegistrationScreen extends StatefulWidget { const PatientRegistrationScreen({super.key}); @override State createState() => _PatientRegistrationScreenState(); } class _PatientRegistrationScreenState extends State { final TextEditingController _nameController = TextEditingController(); final TextEditingController _phoneController = TextEditingController(); String? _gender; DateTime? _dateOfBirth; File? _image; final ImagePicker _picker = ImagePicker(); Future _getImage(ImageSource source) async { final XFile? pickedFile = await _picker.pickImage(source: source); if (pickedFile != null) { setState(() { _image = File(pickedFile.path); }); } } void _showImageSourceActionSheet(BuildContext context) { showModalBottomSheet( context: context, builder: (BuildContext context) { return SafeArea( child: Wrap( children: [ ListTile( leading: const Icon(Icons.photo_library), title: const Text('Choose from Gallery'), onTap: () { _getImage(ImageSource.gallery); Navigator.pop(context); }, ), ListTile( leading: const Icon(Icons.photo_camera), title: const Text('Take a Photo'), onTap: () { _getImage(ImageSource.camera); Navigator.pop(context); }, ), ], ), ); }, ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Profile'), actions: [ IconButton( icon: const Icon(Icons.check, color: Colors.blue), onPressed: () { // Save profile logic here }, ), ], ), body: SingleChildScrollView( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Center( child: Column( children: [ GestureDetector( onTap: () => _showImageSourceActionSheet(context), child: CircleAvatar( radius: 50, backgroundImage: _image != null ? FileImage(_image!) : null, child: _image == null ? const Icon(Icons.person, size: 50) : null, ), ), TextButton( onPressed: () => _showImageSourceActionSheet(context), child: const Text('Upload picture', style: TextStyle(color: Colors.blue)), ), ], ), ), const SizedBox(height: 20), _buildTextField('Name', _nameController), _buildTextField('Phone number', _phoneController), _buildDropdownField('Gender', _gender, ['Male', 'Female', 'Other'], (value) { setState(() => _gender = value); }), _buildDateField('Date of Birth', _dateOfBirth), _buildNavigationField('Address'), _buildNavigationField('Family members'), ], ), ), ); } Widget _buildTextField(String label, TextEditingController controller) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(label, style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), TextField( controller: controller, decoration: const InputDecoration( border: UnderlineInputBorder(), ), ), const SizedBox(height: 20), ], ); } Widget _buildDropdownField(String label, String? value, List items, Function(String?) onChanged) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(label, style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), DropdownButton( value: value, isExpanded: true, hint: Text('Select $label'), onChanged: onChanged, items: items.map>((String value) { return DropdownMenuItem( value: value, child: Text(value), ); }).toList(), ), const SizedBox(height: 20), ], ); } Widget _buildDateField(String label, DateTime? date) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(label, style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text(date != null ? DateFormat('dd/MM/yyyy').format(date) : 'Select date'), IconButton( icon: const Icon(Icons.calendar_today, color: Colors.blue), onPressed: () async { final DateTime? picked = await showDatePicker( context: context, initialDate: date ?? DateTime.now(), firstDate: DateTime(1900), lastDate: DateTime.now(), ); if (picked != null && picked != date) { setState(() { _dateOfBirth = picked; }); } }, ), ], ), const Divider(), const SizedBox(height: 20), ], ); } Widget _buildNavigationField(String label) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text(label, style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), IconButton( icon: const Icon(Icons.chevron_right, color: Colors.blue), onPressed: () { if (label == 'Address') { Navigator.of(context) .pushNamed(RouteNames.patientAdressScreen); } else { Navigator.of(context) .pushNamed(RouteNames.patientFamilyMembersScreen); } }, ), ], ), const Divider(), const SizedBox(height: 20), ], ); } }