pick profesional
This commit is contained in:
@@ -32,7 +32,6 @@ class _CitaScreenState extends State<CitaScreen> {
|
|||||||
ScoresModel.scoreTo(widget.evento.userId.toString(), false, false).then(
|
ScoresModel.scoreTo(widget.evento.userId.toString(), false, false).then(
|
||||||
(ScoresModel s) => setState(() {
|
(ScoresModel s) => setState(() {
|
||||||
scoresModel = s;
|
scoresModel = s;
|
||||||
print('escore $scoresModel');
|
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import 'package:diacritic/diacritic.dart';
|
|||||||
import 'package:firebase_storage/firebase_storage.dart';
|
import 'package:firebase_storage/firebase_storage.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
import 'package:prosappco/src/authentication/authentication_repository.dart';
|
import 'package:prosappco/src/authentication/authentication_repository.dart';
|
||||||
import 'package:prosappco/src/components/photo_view.dart';
|
import 'package:prosappco/src/components/photo_view.dart';
|
||||||
import 'package:prosappco/src/components/pop_appbar.dart';
|
import 'package:prosappco/src/components/pop_appbar.dart';
|
||||||
@@ -31,6 +32,9 @@ class Professional {
|
|||||||
final String professionName;
|
final String professionName;
|
||||||
final String cityName;
|
final String cityName;
|
||||||
final String ubicacion;
|
final String ubicacion;
|
||||||
|
final String realAddress;
|
||||||
|
final double latitude;
|
||||||
|
final double longitude;
|
||||||
final List<String> professionalEspecializado;
|
final List<String> professionalEspecializado;
|
||||||
final ScoresModel scores;
|
final ScoresModel scores;
|
||||||
|
|
||||||
@@ -43,6 +47,9 @@ class Professional {
|
|||||||
required this.ubicacion,
|
required this.ubicacion,
|
||||||
required this.professionalEspecializado,
|
required this.professionalEspecializado,
|
||||||
required this.scores,
|
required this.scores,
|
||||||
|
required this.realAddress,
|
||||||
|
required this.latitude,
|
||||||
|
required this.longitude,
|
||||||
});
|
});
|
||||||
|
|
||||||
String getEspecializaciones() {
|
String getEspecializaciones() {
|
||||||
@@ -57,6 +64,9 @@ class Professional {
|
|||||||
' professionName: $professionName,\n'
|
' professionName: $professionName,\n'
|
||||||
' cityName: $cityName,\n'
|
' cityName: $cityName,\n'
|
||||||
' ubicacion: $ubicacion,\n'
|
' ubicacion: $ubicacion,\n'
|
||||||
|
' realAddress: $realAddress,\n'
|
||||||
|
' latitude: $latitude,\n'
|
||||||
|
' longitude: $longitude,\n'
|
||||||
' professionalEspecializado: ${getEspecializaciones()}\n'
|
' professionalEspecializado: ${getEspecializaciones()}\n'
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
@@ -88,6 +98,9 @@ class Professional {
|
|||||||
professionalRef: storage.ref().child(photo),
|
professionalRef: storage.ref().child(photo),
|
||||||
professionalEspecializado: especializaciones,
|
professionalEspecializado: especializaciones,
|
||||||
ubicacion: data['ubicacion'] ?? '',
|
ubicacion: data['ubicacion'] ?? '',
|
||||||
|
realAddress: data['address'] ?? '',
|
||||||
|
latitude: data['latitude'] ?? 0,
|
||||||
|
longitude: data['longitude'] ?? 0,
|
||||||
scores: await ScoresModel.scoreFrom(uid, true, true),
|
scores: await ScoresModel.scoreFrom(uid, true, true),
|
||||||
);
|
);
|
||||||
return professional;
|
return professional;
|
||||||
@@ -100,6 +113,44 @@ class Professional {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _ProfessionalScreenState extends State<ProfessionalScreen> {
|
class _ProfessionalScreenState extends State<ProfessionalScreen> {
|
||||||
|
Future<String?> _showChoiceDialog(BuildContext context) async {
|
||||||
|
String? selectedOption = await showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return AlertDialog(
|
||||||
|
content: SingleChildScrollView(
|
||||||
|
child: ListBody(
|
||||||
|
children: [
|
||||||
|
GestureDetector(
|
||||||
|
child: const Text(
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
"A domicilio",
|
||||||
|
style: TextStyle(color: Color(0xFF2BA4EC)),
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
Navigator.of(context).pop("domicilio");
|
||||||
|
},
|
||||||
|
),
|
||||||
|
const Divider(color: Colors.black54),
|
||||||
|
GestureDetector(
|
||||||
|
child: const Text(
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
"En sitio",
|
||||||
|
style: TextStyle(color: Color(0xFF2BA4EC)),
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
Navigator.of(context).pop("sitio");
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
return selectedOption;
|
||||||
|
}
|
||||||
|
|
||||||
List<Professional>? filteredProfessionals;
|
List<Professional>? filteredProfessionals;
|
||||||
|
|
||||||
TextEditingController searchController = TextEditingController();
|
TextEditingController searchController = TextEditingController();
|
||||||
@@ -136,6 +187,9 @@ class _ProfessionalScreenState extends State<ProfessionalScreen> {
|
|||||||
professionalRef: storage.ref().child(_photo),
|
professionalRef: storage.ref().child(_photo),
|
||||||
professionalEspecializado: especializaciones,
|
professionalEspecializado: especializaciones,
|
||||||
ubicacion: data['ubicacion'] ?? '',
|
ubicacion: data['ubicacion'] ?? '',
|
||||||
|
realAddress: data['address'] ?? '',
|
||||||
|
latitude: data['latitude'] ?? 0,
|
||||||
|
longitude: data['longitude'] ?? 0,
|
||||||
scores: await ScoresModel.scoreTo(user.id, true, true),
|
scores: await ScoresModel.scoreTo(user.id, true, true),
|
||||||
);
|
);
|
||||||
professionals.add(professional);
|
professionals.add(professional);
|
||||||
@@ -265,8 +319,39 @@ class _ProfessionalScreenState extends State<ProfessionalScreen> {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
subtitle: professionals[index].ubicacion == 'ambos'
|
||||||
|
? const Text(
|
||||||
|
'Disponibilidad a domicilio y en sitio',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.blue,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: professionals[index].ubicacion == 'sitio'
|
||||||
|
? Text(
|
||||||
|
'Disponibilidad en ${professionals[index].ubicacion}',
|
||||||
|
style: const TextStyle(
|
||||||
|
color: Colors.blue,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: Text(
|
||||||
|
'Disponibilidad a ${professionals[index].ubicacion}',
|
||||||
|
style: const TextStyle(
|
||||||
|
color: Colors.blue,
|
||||||
|
),
|
||||||
|
),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.pop(context, professionals[index]);
|
if (professionals[index].ubicacion == 'ambos') {
|
||||||
|
_showChoiceDialog(context).then((String? value) {
|
||||||
|
if (value != null) {
|
||||||
|
Navigator.pop(context, [professionals[index], value]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (professionals[index].ubicacion == 'sitio') {
|
||||||
|
Navigator.pop(context, [professionals[index], 'sitio']);
|
||||||
|
} else {
|
||||||
|
Navigator.pop(
|
||||||
|
context, [professionals[index], 'domicilio']);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:firebase_auth/firebase_auth.dart';
|
|
||||||
import 'package:firebase_storage/firebase_storage.dart';
|
import 'package:firebase_storage/firebase_storage.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
@@ -14,6 +13,7 @@ import 'package:prosappco/src/models/event_model.dart';
|
|||||||
import 'package:prosappco/src/models/user_model.dart';
|
import 'package:prosappco/src/models/user_model.dart';
|
||||||
import 'package:prosappco/src/screens/professional.dart';
|
import 'package:prosappco/src/screens/professional.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
|
import 'package:prosappco/src/screens/service_after.dart';
|
||||||
import 'package:prosappco/src/screens/service_type.dart';
|
import 'package:prosappco/src/screens/service_type.dart';
|
||||||
|
|
||||||
class ServiceScreen extends StatefulWidget {
|
class ServiceScreen extends StatefulWidget {
|
||||||
@@ -31,7 +31,11 @@ class _ServiceScreenState extends State<ServiceScreen> {
|
|||||||
final _profesionalController = TextEditingController();
|
final _profesionalController = TextEditingController();
|
||||||
final _serviceTypeController = TextEditingController();
|
final _serviceTypeController = TextEditingController();
|
||||||
final _observacionController = TextEditingController();
|
final _observacionController = TextEditingController();
|
||||||
var professionalId = '';
|
String professionalId = '';
|
||||||
|
String professionalAddress = '';
|
||||||
|
String professionalUbicacion = '';
|
||||||
|
double? professionalLatitude;
|
||||||
|
double? professionalLongitude;
|
||||||
String _serviceType = 'Servicio';
|
String _serviceType = 'Servicio';
|
||||||
String _professional = '';
|
String _professional = '';
|
||||||
final DateFormat formatter = DateFormat('dd/MM/yyyy');
|
final DateFormat formatter = DateFormat('dd/MM/yyyy');
|
||||||
@@ -161,14 +165,16 @@ class _ServiceScreenState extends State<ServiceScreen> {
|
|||||||
googleMapController = controller;
|
googleMapController = controller;
|
||||||
},
|
},
|
||||||
onCameraIdle: () {
|
onCameraIdle: () {
|
||||||
if (coordinates != null) {
|
if (professionalAddress == '') {
|
||||||
getLocationName(
|
if (coordinates != null) {
|
||||||
coordinates.latitude, coordinates.longitude)
|
getLocationName(
|
||||||
.then((locationName) {
|
coordinates.latitude, coordinates.longitude)
|
||||||
setState(() {
|
.then((locationName) {
|
||||||
_locationController.text = locationName;
|
setState(() {
|
||||||
|
_locationController.text = locationName;
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onCameraMove: (position) {
|
onCameraMove: (position) {
|
||||||
@@ -223,11 +229,6 @@ class _ServiceScreenState extends State<ServiceScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// markers.clear();
|
// markers.clear();
|
||||||
|
|
||||||
// markers.add(Marker(
|
|
||||||
// markerId: MarkerId('currentLocation'),
|
|
||||||
// position:
|
|
||||||
// LatLng(position.latitude, position.longitude)));
|
|
||||||
},
|
},
|
||||||
elevation: 0,
|
elevation: 0,
|
||||||
child: const Icon(
|
child: const Icon(
|
||||||
@@ -340,8 +341,7 @@ class _ServiceScreenState extends State<ServiceScreen> {
|
|||||||
controller: _profesionalController,
|
controller: _profesionalController,
|
||||||
readOnly: true,
|
readOnly: true,
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
final Professional? profesional =
|
final dynamic datos = await Navigator.push(
|
||||||
await Navigator.push(
|
|
||||||
context,
|
context,
|
||||||
CupertinoPageRoute(
|
CupertinoPageRoute(
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
@@ -351,13 +351,54 @@ class _ServiceScreenState extends State<ServiceScreen> {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
if (datos != null) {
|
||||||
|
Professional? profesional = datos[0];
|
||||||
|
|
||||||
if (profesional != null) {
|
if (profesional != null) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_profesionalController.text =
|
_profesionalController.text =
|
||||||
profesional.name.toString();
|
profesional.name.toString();
|
||||||
professionalId = profesional.id;
|
|
||||||
});
|
professionalAddress =
|
||||||
|
profesional.realAddress;
|
||||||
|
|
||||||
|
professionalUbicacion =
|
||||||
|
profesional.ubicacion;
|
||||||
|
|
||||||
|
_locationController.text =
|
||||||
|
profesional.realAddress;
|
||||||
|
|
||||||
|
professionalLatitude =
|
||||||
|
profesional.latitude;
|
||||||
|
professionalLongitude =
|
||||||
|
profesional.longitude;
|
||||||
|
|
||||||
|
if (professionalLatitude != null &&
|
||||||
|
professionalLatitude != 0 &&
|
||||||
|
professionalLongitude != null &&
|
||||||
|
professionalLongitude != 0) {
|
||||||
|
markers.clear();
|
||||||
|
|
||||||
|
markers.add(Marker(
|
||||||
|
markerId:
|
||||||
|
const MarkerId('professional'),
|
||||||
|
position: LatLng(
|
||||||
|
professionalLatitude!,
|
||||||
|
professionalLongitude!)));
|
||||||
|
googleMapController.animateCamera(
|
||||||
|
CameraUpdate.newCameraPosition(
|
||||||
|
CameraPosition(
|
||||||
|
target: LatLng(
|
||||||
|
professionalLatitude!,
|
||||||
|
professionalLongitude!,
|
||||||
|
),
|
||||||
|
zoom: 17),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
professionalId = profesional.id;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
decoration: const InputDecoration(
|
decoration: const InputDecoration(
|
||||||
@@ -440,6 +481,15 @@ class _ServiceScreenState extends State<ServiceScreen> {
|
|||||||
professionalId,
|
professionalId,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Navigator.push(
|
||||||
|
// context,
|
||||||
|
// CupertinoPageRoute(
|
||||||
|
// builder: (BuildContext context) {
|
||||||
|
// return const ServiceAfterScreen();
|
||||||
|
// },
|
||||||
|
// ),
|
||||||
|
// );
|
||||||
},
|
},
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
backgroundColor: const Color(0xFF2BA4EC),
|
backgroundColor: const Color(0xFF2BA4EC),
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:prosappco/src/components/pop_appbar.dart';
|
||||||
|
|
||||||
|
class ServiceAfterScreen extends StatefulWidget {
|
||||||
|
const ServiceAfterScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<ServiceAfterScreen> createState() => _ServiceAfterScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ServiceAfterScreenState extends State<ServiceAfterScreen> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar:
|
||||||
|
PopAppbar(onPressed: () => Navigator.pop(context), label: 'Servicio'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user