mapa
This commit is contained in:
@@ -1,9 +1,14 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.example.prosappco">
|
package="com.example.prosappco">
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||||
<application
|
<application
|
||||||
android:label="prosapp"
|
android:label="prosapp"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/ic_launcher">
|
android:icon="@mipmap/ic_launcher">
|
||||||
|
|
||||||
|
<meta-data android:name="com.google.android.geo.API_KEY"
|
||||||
|
android:value="AIzaSyCW_og6qQ8W8G-5_BxIS4sBnl8cLkjL95s"/>
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:intl/date_symbol_data_local.dart';
|
||||||
import 'package:prosappco/src/authentication/authentication_repository.dart';
|
import 'package:prosappco/src/authentication/authentication_repository.dart';
|
||||||
|
import 'package:prosappco/src/screens/calendar.dart';
|
||||||
import 'package:prosappco/src/screens/city.dart';
|
import 'package:prosappco/src/screens/city.dart';
|
||||||
import 'package:prosappco/src/screens/login.dart';
|
import 'package:prosappco/src/screens/login.dart';
|
||||||
import 'package:firebase_core/firebase_core.dart';
|
import 'package:firebase_core/firebase_core.dart';
|
||||||
@@ -17,11 +19,14 @@ import 'package:prosappco/src/screens/profile_pro.dart';
|
|||||||
import 'package:prosappco/src/screens/register.dart';
|
import 'package:prosappco/src/screens/register.dart';
|
||||||
import 'package:prosappco/src/screens/request_sent.dart';
|
import 'package:prosappco/src/screens/request_sent.dart';
|
||||||
import 'package:prosappco/src/screens/service.dart';
|
import 'package:prosappco/src/screens/service.dart';
|
||||||
|
|
||||||
import 'firebase_options.dart';
|
import 'firebase_options.dart';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
|
|
||||||
|
await initializeDateFormatting('es_MX', null);
|
||||||
|
|
||||||
SystemChrome.setPreferredOrientations([
|
SystemChrome.setPreferredOrientations([
|
||||||
DeviceOrientation.portraitUp,
|
DeviceOrientation.portraitUp,
|
||||||
DeviceOrientation.portraitDown,
|
DeviceOrientation.portraitDown,
|
||||||
@@ -57,6 +62,7 @@ class MyApp extends StatelessWidget {
|
|||||||
'/servicio': (context) => const ServiceScreen(),
|
'/servicio': (context) => const ServiceScreen(),
|
||||||
'/profesional': (context) => const ProfessionalScreen(),
|
'/profesional': (context) => const ProfessionalScreen(),
|
||||||
'/profilePro': (context) => const ProfilePro(),
|
'/profilePro': (context) => const ProfilePro(),
|
||||||
|
'/calendar': (context) => const CalendarScreen(),
|
||||||
},
|
},
|
||||||
onGenerateRoute: (settings) {
|
onGenerateRoute: (settings) {
|
||||||
throw Exception('Ruta desconocida: ${settings.name}');
|
throw Exception('Ruta desconocida: ${settings.name}');
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import 'package:flutter_rating_bar/flutter_rating_bar.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/models/user_model.dart';
|
import 'package:prosappco/src/models/user_model.dart';
|
||||||
|
import 'package:prosappco/src/screens/calendar.dart';
|
||||||
import 'package:prosappco/src/screens/profile.dart';
|
import 'package:prosappco/src/screens/profile.dart';
|
||||||
|
|
||||||
class DrawerProfessional extends StatefulWidget {
|
class DrawerProfessional extends StatefulWidget {
|
||||||
@@ -155,7 +156,16 @@ class _DrawerProfessionalState extends State<DrawerProfessional> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
onTap: () {},
|
onTap: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
CupertinoPageRoute(
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return const CalendarScreen();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
leading: const Icon(
|
leading: const Icon(
|
||||||
Icons.calendar_month,
|
Icons.calendar_month,
|
||||||
color: Colors.black,
|
color: Colors.black,
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||||
|
import 'package:prosappco/src/authentication/authentication_repository.dart';
|
||||||
|
|
||||||
|
final uid = AuthenticationRepository.instance.getCurrentUserUid();
|
||||||
|
|
||||||
|
// class EventoService {
|
||||||
|
// Future<Event> createEvent() {
|
||||||
|
// FirebaseFirestore.instance.collection('users').doc(uid).update({
|
||||||
|
// 'ejemplo': 'ejm',
|
||||||
|
// });
|
||||||
|
|
||||||
|
// try {} catch (e) {
|
||||||
|
// print('Evento $e');
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:prosappco/src/components/pop_appbar.dart';
|
||||||
|
import 'package:table_calendar/table_calendar.dart';
|
||||||
|
|
||||||
|
class CalendarScreen extends StatefulWidget {
|
||||||
|
const CalendarScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<CalendarScreen> createState() => _CalendarScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _CalendarScreenState extends State<CalendarScreen> {
|
||||||
|
CalendarFormat _calendarFormat = CalendarFormat.month;
|
||||||
|
DateTime today = DateTime.now();
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _onDaySelected(DateTime day, DateTime focusedDay) {
|
||||||
|
setState(() {
|
||||||
|
today = day;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _onFormatChange(CalendarFormat format) {
|
||||||
|
setState(() {
|
||||||
|
_calendarFormat = format;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
// DateTime firstDay = today.subtract(Duration(days: 365));
|
||||||
|
DateTime lastDay = today.add(const Duration(days: 365));
|
||||||
|
|
||||||
|
return SafeArea(
|
||||||
|
child: Scaffold(
|
||||||
|
appBar: PopAppbar(
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
label: 'Calendario',
|
||||||
|
),
|
||||||
|
body: SingleChildScrollView(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
color: const Color.fromARGB(255, 224, 247, 255),
|
||||||
|
child: TableCalendar(
|
||||||
|
locale: 'es_MX',
|
||||||
|
firstDay: DateTime.utc(2010, 10, 16),
|
||||||
|
lastDay: lastDay,
|
||||||
|
focusedDay: today,
|
||||||
|
availableGestures: AvailableGestures.all,
|
||||||
|
onDaySelected: _onDaySelected,
|
||||||
|
selectedDayPredicate: (day) => isSameDay(day, today),
|
||||||
|
calendarFormat: _calendarFormat,
|
||||||
|
onFormatChanged: _onFormatChange,
|
||||||
|
availableCalendarFormats: const {
|
||||||
|
CalendarFormat.month: 'Mes',
|
||||||
|
CalendarFormat.week: 'Semana',
|
||||||
|
CalendarFormat.twoWeeks: '2 Semanas',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
floatingActionButton: FloatingActionButton(
|
||||||
|
onPressed: () {},
|
||||||
|
child: const Icon(Icons.add),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -60,7 +60,7 @@ class _RegisterScreenState extends State<RegisterScreen> {
|
|||||||
child: Row(
|
child: Row(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(
|
icon: const Icon(
|
||||||
Icons.arrow_back,
|
Icons.arrow_back,
|
||||||
size: 30,
|
size: 30,
|
||||||
),
|
),
|
||||||
@@ -68,7 +68,7 @@ class _RegisterScreenState extends State<RegisterScreen> {
|
|||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
Text(
|
const Text(
|
||||||
'Registro',
|
'Registro',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Color(0xFF262626),
|
color: Color(0xFF262626),
|
||||||
@@ -86,23 +86,23 @@ class _RegisterScreenState extends State<RegisterScreen> {
|
|||||||
margin: const EdgeInsets.only(top: 200, left: 50, right: 50),
|
margin: const EdgeInsets.only(top: 200, left: 50, right: 50),
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(bottom: 20),
|
padding: const EdgeInsets.only(bottom: 20),
|
||||||
child: ElevatedButton(
|
child: ElevatedButton(
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await AuthenticationRepository.instance
|
await AuthenticationRepository.instance
|
||||||
.signInWithGoogle();
|
.signInWithGoogle();
|
||||||
},
|
},
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
primary: Color(0xFF2BA4EC),
|
backgroundColor: const Color(0xFF2BA4EC),
|
||||||
shape: RoundedRectangleBorder(
|
shape: RoundedRectangleBorder(
|
||||||
borderRadius: BorderRadius.circular(50),
|
borderRadius: BorderRadius.circular(50),
|
||||||
),
|
),
|
||||||
elevation: 0,
|
elevation: 0,
|
||||||
minimumSize: Size(230, 60),
|
minimumSize: const Size(230, 60),
|
||||||
),
|
),
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: const [
|
||||||
Text(
|
Text(
|
||||||
'Entrar con Google ',
|
'Entrar con Google ',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
@@ -117,9 +117,9 @@ class _RegisterScreenState extends State<RegisterScreen> {
|
|||||||
)),
|
)),
|
||||||
),
|
),
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.symmetric(vertical: 0),
|
padding: const EdgeInsets.symmetric(vertical: 0),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: <Widget>[
|
children: const <Widget>[
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Divider(
|
child: Divider(
|
||||||
color: Colors.black38,
|
color: Colors.black38,
|
||||||
@@ -153,10 +153,10 @@ class _RegisterScreenState extends State<RegisterScreen> {
|
|||||||
color: Color(0xFF65676B))),
|
color: Color(0xFF65676B))),
|
||||||
)),
|
)),
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(bottom: 18),
|
padding: const EdgeInsets.only(bottom: 18),
|
||||||
child: TextFormField(
|
child: TextFormField(
|
||||||
controller: controller.email,
|
controller: controller.email,
|
||||||
decoration: InputDecoration(
|
decoration: const InputDecoration(
|
||||||
enabledBorder: OutlineInputBorder(
|
enabledBorder: OutlineInputBorder(
|
||||||
borderSide:
|
borderSide:
|
||||||
BorderSide(color: Color(0xFFECECEC)),
|
BorderSide(color: Color(0xFFECECEC)),
|
||||||
@@ -190,22 +190,23 @@ class _RegisterScreenState extends State<RegisterScreen> {
|
|||||||
controller: controller.password,
|
controller: controller.password,
|
||||||
obscureText: _obscureText,
|
obscureText: _obscureText,
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
enabledBorder: OutlineInputBorder(
|
enabledBorder: const OutlineInputBorder(
|
||||||
borderSide:
|
borderSide:
|
||||||
BorderSide(color: Color(0xFFECECEC)),
|
BorderSide(color: Color(0xFFECECEC)),
|
||||||
borderRadius: BorderRadius.all(
|
borderRadius: BorderRadius.all(
|
||||||
Radius.circular(50),
|
Radius.circular(50),
|
||||||
)),
|
)),
|
||||||
focusedBorder: OutlineInputBorder(
|
focusedBorder: const OutlineInputBorder(
|
||||||
borderSide:
|
borderSide:
|
||||||
BorderSide(color: Color(0xFFECECEC)),
|
BorderSide(color: Color(0xFFECECEC)),
|
||||||
borderRadius: BorderRadius.all(
|
borderRadius: BorderRadius.all(
|
||||||
Radius.circular(50),
|
Radius.circular(50),
|
||||||
)),
|
)),
|
||||||
hintText: 'Contraseña',
|
hintText: 'Contraseña',
|
||||||
fillColor: Color.fromARGB(255, 239, 239, 239),
|
fillColor:
|
||||||
|
const Color.fromARGB(255, 239, 239, 239),
|
||||||
filled: true,
|
filled: true,
|
||||||
prefixIcon: Icon(Icons.lock_outline),
|
prefixIcon: const Icon(Icons.lock_outline),
|
||||||
suffixIcon: IconButton(
|
suffixIcon: IconButton(
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
_obscureText
|
_obscureText
|
||||||
@@ -242,19 +243,19 @@ class _RegisterScreenState extends State<RegisterScreen> {
|
|||||||
),
|
),
|
||||||
RichText(
|
RichText(
|
||||||
text: TextSpan(
|
text: TextSpan(
|
||||||
style: TextStyle(
|
style: const TextStyle(
|
||||||
fontSize: 16.0,
|
fontSize: 16.0,
|
||||||
color: Color(0xFF65676B),
|
color: Color(0xFF65676B),
|
||||||
fontFamily: 'Poppins',
|
fontFamily: 'Poppins',
|
||||||
),
|
),
|
||||||
children: [
|
children: [
|
||||||
TextSpan(text: 'Ya estas registrado? '),
|
const TextSpan(text: 'Ya estas registrado? '),
|
||||||
WidgetSpan(
|
WidgetSpan(
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.pushReplacementNamed(context, '/login');
|
Navigator.pushReplacementNamed(context, '/login');
|
||||||
},
|
},
|
||||||
child: Text(
|
child: const Text(
|
||||||
'Iniciar Sesión',
|
'Iniciar Sesión',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 16.0,
|
fontSize: 16.0,
|
||||||
|
|||||||
+347
-183
@@ -1,10 +1,15 @@
|
|||||||
import 'package:firebase_auth/firebase_auth.dart';
|
import 'dart:async';
|
||||||
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/gestures.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:geocoding/geocoding.dart';
|
||||||
|
import 'package:geolocator/geolocator.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||||
import 'package:prosappco/src/authentication/authentication_repository.dart';
|
import 'package:prosappco/src/authentication/authentication_repository.dart';
|
||||||
import 'package:prosappco/src/components/drawer_menu.dart';
|
import 'package:prosappco/src/components/drawer_menu.dart';
|
||||||
import 'package:prosappco/src/models/score_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';
|
||||||
|
|
||||||
@@ -16,12 +21,53 @@ class ServiceScreen extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _ServiceScreenState extends State<ServiceScreen> {
|
class _ServiceScreenState extends State<ServiceScreen> {
|
||||||
|
final TextEditingController _locationController = TextEditingController();
|
||||||
|
final String _locationPosition = '';
|
||||||
|
|
||||||
final DateFormat formatter = DateFormat('dd/MM/yyyy');
|
final DateFormat formatter = DateFormat('dd/MM/yyyy');
|
||||||
final DateTime now = DateTime.now();
|
final DateTime now = DateTime.now();
|
||||||
|
|
||||||
DateTime? _selectedDate;
|
DateTime? _selectedDate;
|
||||||
TimeOfDay? _selectedTime;
|
TimeOfDay? _selectedTime;
|
||||||
|
|
||||||
|
late GoogleMapController googleMapController;
|
||||||
|
|
||||||
|
static const CameraPosition initialCameraPosition = CameraPosition(
|
||||||
|
target: LatLng(7.8939100, -72.5078200),
|
||||||
|
zoom: 14.4746,
|
||||||
|
);
|
||||||
|
|
||||||
|
Set<Marker> markers = {};
|
||||||
|
|
||||||
|
Future<Position> _determinePosition() async {
|
||||||
|
bool serviceEnabled;
|
||||||
|
LocationPermission permission;
|
||||||
|
|
||||||
|
serviceEnabled = await Geolocator.isLocationServiceEnabled();
|
||||||
|
|
||||||
|
if (!serviceEnabled) {
|
||||||
|
return Future.error('Location services are disabled');
|
||||||
|
}
|
||||||
|
|
||||||
|
permission = await Geolocator.checkPermission();
|
||||||
|
|
||||||
|
if (permission == LocationPermission.denied) {
|
||||||
|
permission = await Geolocator.requestPermission();
|
||||||
|
|
||||||
|
if (permission == LocationPermission.denied) {
|
||||||
|
return Future.error('Location permission denied');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (permission == LocationPermission.deniedForever) {
|
||||||
|
return Future.error('Location permissions are permanently denied');
|
||||||
|
}
|
||||||
|
|
||||||
|
Position position = await Geolocator.getCurrentPosition();
|
||||||
|
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> _selectDate(BuildContext context) async {
|
Future<void> _selectDate(BuildContext context) async {
|
||||||
final DateTime? picked = await showDatePicker(
|
final DateTime? picked = await showDatePicker(
|
||||||
context: context,
|
context: context,
|
||||||
@@ -63,6 +109,25 @@ class _ServiceScreenState extends State<ServiceScreen> {
|
|||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
late String lat;
|
||||||
|
late String long;
|
||||||
|
var coordinates;
|
||||||
|
|
||||||
|
Future<String> getLocationName(double latitude, double longitude) async {
|
||||||
|
String address;
|
||||||
|
List<Placemark> placemarks =
|
||||||
|
await placemarkFromCoordinates(latitude, longitude);
|
||||||
|
Placemark place = placemarks[0];
|
||||||
|
|
||||||
|
if (place.thoroughfare != '' || place.subThoroughfare != '') {
|
||||||
|
address =
|
||||||
|
"${place.thoroughfare}, ${place.subThoroughfare} ${place.subLocality}, ${place.locality}, ${place.administrativeArea}";
|
||||||
|
} else {
|
||||||
|
address = '';
|
||||||
|
}
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
List<String> opc = ["Servicio", "Opción 1", "Opción 2", "Opción 3"];
|
List<String> opc = ["Servicio", "Opción 1", "Opción 2", "Opción 3"];
|
||||||
@@ -74,201 +139,300 @@ class _ServiceScreenState extends State<ServiceScreen> {
|
|||||||
drawer: DrawerMenu(),
|
drawer: DrawerMenu(),
|
||||||
body: SingleChildScrollView(
|
body: SingleChildScrollView(
|
||||||
reverse: true,
|
reverse: true,
|
||||||
child: Stack(
|
|
||||||
children: [
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.all(20.0),
|
|
||||||
child: Builder(
|
|
||||||
builder: (BuildContext context) {
|
|
||||||
return ElevatedButton(
|
|
||||||
style: ElevatedButton.styleFrom(
|
|
||||||
backgroundColor: Colors.white,
|
|
||||||
shape: const CircleBorder(),
|
|
||||||
elevation: 3,
|
|
||||||
minimumSize: const Size(50, 50),
|
|
||||||
),
|
|
||||||
child: const Icon(
|
|
||||||
Icons.menu,
|
|
||||||
color: Colors.black,
|
|
||||||
size: 30,
|
|
||||||
),
|
|
||||||
onPressed: () {
|
|
||||||
Scaffold.of(context).openDrawer();
|
|
||||||
},
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.only(top: 23, left: 100, right: 25),
|
|
||||||
child: Container(
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
borderRadius: BorderRadius.circular(50),
|
|
||||||
boxShadow: [
|
|
||||||
BoxShadow(
|
|
||||||
color: Colors.grey.withOpacity(0.4),
|
|
||||||
spreadRadius: 1,
|
|
||||||
blurRadius: 2,
|
|
||||||
offset:
|
|
||||||
const Offset(1, 2), // changes position of shadow
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
child: DropdownButtonFormField(
|
|
||||||
value: defaultValue,
|
|
||||||
elevation: 0,
|
|
||||||
decoration: InputDecoration(
|
|
||||||
filled: true,
|
|
||||||
fillColor: Colors.white,
|
|
||||||
contentPadding: const EdgeInsets.symmetric(
|
|
||||||
horizontal: 16, vertical: 8),
|
|
||||||
border: OutlineInputBorder(
|
|
||||||
borderRadius: BorderRadius.circular(50),
|
|
||||||
borderSide: BorderSide.none,
|
|
||||||
),
|
|
||||||
enabledBorder: OutlineInputBorder(
|
|
||||||
borderRadius: BorderRadius.circular(50),
|
|
||||||
borderSide: BorderSide.none,
|
|
||||||
),
|
|
||||||
focusedBorder: OutlineInputBorder(
|
|
||||||
borderRadius: BorderRadius.circular(50),
|
|
||||||
borderSide: BorderSide.none,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
items: opc.map((e) {
|
|
||||||
return DropdownMenuItem(
|
|
||||||
value: e,
|
|
||||||
child: Text(
|
|
||||||
e,
|
|
||||||
style: const TextStyle(fontWeight: FontWeight.bold),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}).toList(),
|
|
||||||
onChanged: (value) {
|
|
||||||
print(value);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
bottomNavigationBar: Container(
|
|
||||||
decoration: const BoxDecoration(
|
|
||||||
color: Colors.white,
|
|
||||||
borderRadius: BorderRadius.only(
|
|
||||||
topRight: Radius.circular(50), topLeft: Radius.circular(50))),
|
|
||||||
height: MediaQuery.of(context).size.height / 2.3,
|
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 15),
|
Stack(
|
||||||
SizedBox(
|
children: [
|
||||||
width: 300,
|
SizedBox(
|
||||||
child: Form(
|
height: MediaQuery.of(context).size.height * 0.6,
|
||||||
child: Column(
|
child: GoogleMap(
|
||||||
children: [
|
mapType: MapType.normal,
|
||||||
TextFormField(
|
initialCameraPosition: initialCameraPosition,
|
||||||
// controller: _cedulaController,
|
markers: markers,
|
||||||
decoration: const InputDecoration(
|
zoomControlsEnabled: false,
|
||||||
prefixIcon: Icon(Icons.near_me),
|
onMapCreated: (GoogleMapController controller) {
|
||||||
hintText: 'Dirección'),
|
googleMapController = controller;
|
||||||
),
|
},
|
||||||
const SizedBox(height: 15),
|
onCameraIdle: () {
|
||||||
TextFormField(
|
if (coordinates != null) {
|
||||||
// controller: _cedulaController,
|
getLocationName(
|
||||||
readOnly: true,
|
coordinates.latitude, coordinates.longitude)
|
||||||
onTap: () async {
|
.then((locationName) {
|
||||||
final String? profesional = await Navigator.push(
|
|
||||||
context,
|
|
||||||
CupertinoPageRoute(
|
|
||||||
builder: (BuildContext context) {
|
|
||||||
return const ProfessionalScreen();
|
|
||||||
},
|
|
||||||
),
|
|
||||||
) as String?;
|
|
||||||
|
|
||||||
if (profesional != null) {
|
|
||||||
setState(() {
|
setState(() {
|
||||||
// _profession = profesional;
|
_locationController.text = locationName;
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
},
|
}
|
||||||
decoration: const InputDecoration(
|
},
|
||||||
prefixIcon: Icon(Icons.assignment_ind_rounded),
|
|
||||||
suffixIcon: Icon(Icons.arrow_drop_down),
|
// onCameraIdle: () {
|
||||||
hintText: 'Seleccionar profesional'),
|
// setState(() {
|
||||||
),
|
// if (coordinates != null) {
|
||||||
const SizedBox(height: 15),
|
|
||||||
Row(
|
// placemarkFromCoordinates(coordinates.target.latitude, coordinates.target.longitude);
|
||||||
children: [
|
// _locationController.text = coordinates.toString();
|
||||||
SizedBox(
|
// }
|
||||||
width: 150,
|
// });
|
||||||
child: TextFormField(
|
// },
|
||||||
onTap: () {
|
onCameraMove: (position) {
|
||||||
_selectDate(context);
|
setState(() {
|
||||||
},
|
coordinates = position.target;
|
||||||
readOnly: true,
|
});
|
||||||
decoration: InputDecoration(
|
},
|
||||||
prefixIcon: const Icon(Icons.calendar_month),
|
gestureRecognizers: <
|
||||||
suffixIcon: _selectedDate == null
|
Factory<OneSequenceGestureRecognizer>>{
|
||||||
? const Icon(Icons.arrow_drop_down)
|
Factory<OneSequenceGestureRecognizer>(
|
||||||
: null,
|
() => EagerGestureRecognizer(),
|
||||||
hintText: 'Fecha',
|
),
|
||||||
),
|
},
|
||||||
controller: TextEditingController(
|
),
|
||||||
text: _selectedDate == null
|
),
|
||||||
? ''
|
const Positioned(
|
||||||
: formatter.format(_selectedDate!)),
|
bottom: 0,
|
||||||
|
right: 0,
|
||||||
|
left: 0,
|
||||||
|
top: 0,
|
||||||
|
child: Icon(
|
||||||
|
Icons.location_on,
|
||||||
|
size: 40,
|
||||||
|
color: Colors.red,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
bottom: 10,
|
||||||
|
right: 20,
|
||||||
|
child: FloatingActionButton(
|
||||||
|
onPressed: () async {
|
||||||
|
try {
|
||||||
|
Position position = await _determinePosition();
|
||||||
|
|
||||||
|
googleMapController.animateCamera(
|
||||||
|
CameraUpdate.newCameraPosition(
|
||||||
|
CameraPosition(
|
||||||
|
target: LatLng(
|
||||||
|
position.latitude,
|
||||||
|
position.longitude,
|
||||||
|
),
|
||||||
|
zoom: 17),
|
||||||
),
|
),
|
||||||
|
);
|
||||||
|
setState(() {});
|
||||||
|
} catch (e) {
|
||||||
|
Get.snackbar(
|
||||||
|
'ubicación desactivada',
|
||||||
|
'Por favor activa la ubicacion de tu telefono.',
|
||||||
|
snackPosition: SnackPosition.TOP,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// markers.clear();
|
||||||
|
|
||||||
|
// markers.add(Marker(
|
||||||
|
// markerId: const MarkerId('currentLocation'),
|
||||||
|
// position:
|
||||||
|
// LatLng(position.latitude, position.longitude)));
|
||||||
|
},
|
||||||
|
elevation: 0,
|
||||||
|
child: const Icon(Icons.location_on),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(20.0),
|
||||||
|
child: Builder(
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return ElevatedButton(
|
||||||
|
style: ElevatedButton.styleFrom(
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
shape: const CircleBorder(),
|
||||||
|
elevation: 3,
|
||||||
|
minimumSize: const Size(50, 50),
|
||||||
),
|
),
|
||||||
SizedBox(
|
child: const Icon(
|
||||||
width: 150,
|
Icons.menu,
|
||||||
child: TextFormField(
|
color: Colors.black,
|
||||||
onTap: () {
|
size: 30,
|
||||||
_selectTime(context);
|
),
|
||||||
},
|
onPressed: () {
|
||||||
readOnly: true,
|
Scaffold.of(context).openDrawer();
|
||||||
decoration: const InputDecoration(
|
},
|
||||||
suffixIcon: Icon(Icons.arrow_drop_down),
|
);
|
||||||
hintText: 'Hora',
|
},
|
||||||
),
|
),
|
||||||
controller: TextEditingController(
|
),
|
||||||
text: _selectedTime == null
|
Padding(
|
||||||
? ''
|
padding:
|
||||||
: ' ${_selectedTime!.format(context)}'),
|
const EdgeInsets.only(top: 23, left: 100, right: 25),
|
||||||
),
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(50),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.grey.withOpacity(0.4),
|
||||||
|
spreadRadius: 1,
|
||||||
|
blurRadius: 2,
|
||||||
|
offset: const Offset(
|
||||||
|
1, 2), // changes position of shadow
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
const SizedBox(height: 15),
|
child: DropdownButtonFormField(
|
||||||
TextFormField(
|
value: defaultValue,
|
||||||
// controller: _cedulaController,
|
elevation: 0,
|
||||||
decoration: const InputDecoration(
|
decoration: InputDecoration(
|
||||||
prefixIcon: Icon(Icons.message_outlined),
|
filled: true,
|
||||||
hintText: 'Observaciones'),
|
fillColor: Colors.white,
|
||||||
),
|
contentPadding: const EdgeInsets.symmetric(
|
||||||
const SizedBox(height: 30),
|
horizontal: 16, vertical: 8),
|
||||||
ElevatedButton(
|
border: OutlineInputBorder(
|
||||||
onPressed: () {},
|
|
||||||
style: ElevatedButton.styleFrom(
|
|
||||||
backgroundColor: const Color(0xFF2BA4EC),
|
|
||||||
shape: RoundedRectangleBorder(
|
|
||||||
borderRadius: BorderRadius.circular(50),
|
borderRadius: BorderRadius.circular(50),
|
||||||
|
borderSide: BorderSide.none,
|
||||||
|
),
|
||||||
|
enabledBorder: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.circular(50),
|
||||||
|
borderSide: BorderSide.none,
|
||||||
|
),
|
||||||
|
focusedBorder: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.circular(50),
|
||||||
|
borderSide: BorderSide.none,
|
||||||
),
|
),
|
||||||
elevation: 0,
|
|
||||||
minimumSize: const Size(230, 50),
|
|
||||||
),
|
),
|
||||||
child: const Text(
|
items: opc.map((e) {
|
||||||
'Solicitar servicio',
|
return DropdownMenuItem(
|
||||||
style: TextStyle(
|
value: e,
|
||||||
color: Colors.white,
|
child: Text(
|
||||||
fontWeight: FontWeight.bold,
|
e,
|
||||||
fontSize: 18,
|
style:
|
||||||
),
|
const TextStyle(fontWeight: FontWeight.bold),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}).toList(),
|
||||||
|
onChanged: (value) {
|
||||||
|
print(value);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
decoration: const BoxDecoration(color: Colors.white),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
const SizedBox(height: 5),
|
||||||
|
SizedBox(
|
||||||
|
width: 320,
|
||||||
|
child: Form(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
TextFormField(
|
||||||
|
controller: _locationController,
|
||||||
|
decoration: const InputDecoration(
|
||||||
|
prefixIcon: Icon(Icons.near_me),
|
||||||
|
hintText: 'Dirección'),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15),
|
||||||
|
TextFormField(
|
||||||
|
// controller: _cedulaController,
|
||||||
|
readOnly: true,
|
||||||
|
onTap: () async {
|
||||||
|
final String? profesional =
|
||||||
|
await Navigator.push(
|
||||||
|
context,
|
||||||
|
CupertinoPageRoute(
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return const ProfessionalScreen();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
) as String?;
|
||||||
|
|
||||||
|
if (profesional != null) {
|
||||||
|
setState(() {
|
||||||
|
// _profession = profesional;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
decoration: const InputDecoration(
|
||||||
|
prefixIcon:
|
||||||
|
Icon(Icons.assignment_ind_rounded),
|
||||||
|
suffixIcon: Icon(Icons.arrow_drop_down),
|
||||||
|
hintText: 'Seleccionar profesional'),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
width: 180,
|
||||||
|
child: TextFormField(
|
||||||
|
onTap: () {
|
||||||
|
_selectDate(context);
|
||||||
|
},
|
||||||
|
readOnly: true,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
prefixIcon:
|
||||||
|
const Icon(Icons.calendar_month),
|
||||||
|
suffixIcon: _selectedDate == null
|
||||||
|
? const Icon(Icons.arrow_drop_down)
|
||||||
|
: null,
|
||||||
|
hintText: 'Fecha',
|
||||||
|
),
|
||||||
|
controller: TextEditingController(
|
||||||
|
text: _selectedDate == null
|
||||||
|
? ''
|
||||||
|
: formatter.format(_selectedDate!)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
width: 140,
|
||||||
|
child: TextFormField(
|
||||||
|
onTap: () {
|
||||||
|
_selectTime(context);
|
||||||
|
},
|
||||||
|
readOnly: true,
|
||||||
|
decoration: const InputDecoration(
|
||||||
|
suffixIcon: Icon(Icons.arrow_drop_down),
|
||||||
|
hintText: 'Hora',
|
||||||
|
),
|
||||||
|
controller: TextEditingController(
|
||||||
|
text: _selectedTime == null
|
||||||
|
? ''
|
||||||
|
: ' ${_selectedTime!.format(context)}'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15),
|
||||||
|
TextFormField(
|
||||||
|
// controller: _cedulaController,
|
||||||
|
decoration: const InputDecoration(
|
||||||
|
prefixIcon: Icon(Icons.message_outlined),
|
||||||
|
hintText: 'Observaciones'),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 20),
|
||||||
|
ElevatedButton(
|
||||||
|
onPressed: () {},
|
||||||
|
style: ElevatedButton.styleFrom(
|
||||||
|
backgroundColor: const Color(0xFF2BA4EC),
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(50),
|
||||||
|
),
|
||||||
|
elevation: 0,
|
||||||
|
minimumSize: const Size(230, 50),
|
||||||
|
),
|
||||||
|
child: const Text(
|
||||||
|
'Solicitar servicio',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontSize: 18,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
),
|
||||||
),
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -9,10 +9,12 @@ import cloud_firestore
|
|||||||
import firebase_auth
|
import firebase_auth
|
||||||
import firebase_core
|
import firebase_core
|
||||||
import firebase_storage
|
import firebase_storage
|
||||||
|
import geolocator_apple
|
||||||
|
|
||||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||||
FLTFirebaseFirestorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseFirestorePlugin"))
|
FLTFirebaseFirestorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseFirestorePlugin"))
|
||||||
FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin"))
|
FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin"))
|
||||||
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
|
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
|
||||||
FLTFirebaseStoragePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseStoragePlugin"))
|
FLTFirebaseStoragePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseStoragePlugin"))
|
||||||
|
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
|
||||||
}
|
}
|
||||||
|
|||||||
+136
@@ -240,6 +240,86 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.4.0"
|
version: "10.4.0"
|
||||||
|
geocoding:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: geocoding
|
||||||
|
sha256: b34c0501bbbaf3190b85bef3078b27cf66c28a8915c6d3af50d67f356aa7da31
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.0"
|
||||||
|
geocoding_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: geocoding_android
|
||||||
|
sha256: "5a1fc0cec9b0497b44ca31c1fa8d1c891f3aded1053e6bb2eac075d3bd1bf046"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.0"
|
||||||
|
geocoding_ios:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: geocoding_ios
|
||||||
|
sha256: c85495ce8fb34e4fbd2dd8fc5f79263d622d9f88c4af948c965daf6b27a7f3a1
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.0"
|
||||||
|
geocoding_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: geocoding_platform_interface
|
||||||
|
sha256: "8848605d307d844d89937cdb4b8ad7dfa880552078f310fa24d8a460f6dddab4"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.1"
|
||||||
|
geolocator:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: geolocator
|
||||||
|
sha256: "5c23f3613f50586c0bbb2b8f970240ae66b3bd992088cf60dd5ee2e6f7dde3a8"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "9.0.2"
|
||||||
|
geolocator_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: geolocator_android
|
||||||
|
sha256: "2ba24690aee0a3e1b6b7bd47c2711a50c874e95e4c758346589d35194adf6d6a"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.1.7"
|
||||||
|
geolocator_apple:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: geolocator_apple
|
||||||
|
sha256: "22b60ca3b8c0f58e6a9688ff855ee39ab813ca3f0c0609a48d282f6631266f2e"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.5"
|
||||||
|
geolocator_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: geolocator_platform_interface
|
||||||
|
sha256: af4d69231452f9620718588f41acc4cb58312368716bfff2e92e770b46ce6386
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.0.7"
|
||||||
|
geolocator_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: geolocator_web
|
||||||
|
sha256: f68a122da48fcfff68bbc9846bb0b74ef651afe84a1b1f6ec20939de4d6860e1
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.6"
|
||||||
|
geolocator_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: geolocator_windows
|
||||||
|
sha256: f5911c88e23f48b598dd506c7c19eff0e001645bdc03bb6fecb9f4549208354d
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.1.1"
|
||||||
get:
|
get:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -256,6 +336,38 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.2.0"
|
version: "0.2.0"
|
||||||
|
google_maps_flutter:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: google_maps_flutter
|
||||||
|
sha256: "24392ef192f3b00bcd93151375676805a9933574423a5bd5509a0ead2e8a4215"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.5"
|
||||||
|
google_maps_flutter_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: google_maps_flutter_android
|
||||||
|
sha256: ee3c1a63983b8ba17a9a7c1233c3542fbfbc0ebf540d3aa9b8fd5162681e0219
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.10"
|
||||||
|
google_maps_flutter_ios:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: google_maps_flutter_ios
|
||||||
|
sha256: e9ad74415a222573625a2c1717adc1e375b18e8ce660fc12db734d1bda1132d4
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.1"
|
||||||
|
google_maps_flutter_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: google_maps_flutter_platform_interface
|
||||||
|
sha256: a07811d2b82055815ede75e1fe4b7b76f71a0b4820b26f71bdaddd157d6a3e20
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.6"
|
||||||
google_sign_in:
|
google_sign_in:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -448,6 +560,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.1"
|
version: "3.2.1"
|
||||||
|
simple_gesture_detector:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: simple_gesture_detector
|
||||||
|
sha256: "86d08f85f1f58583b7b4b941d989f48ea6ce08c1724a1d10954a277c2ec36592"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.2.0"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -477,6 +597,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.1.1"
|
||||||
|
stream_transform:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: stream_transform
|
||||||
|
sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.0"
|
||||||
string_scanner:
|
string_scanner:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -485,6 +613,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0"
|
version: "1.2.0"
|
||||||
|
table_calendar:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: table_calendar
|
||||||
|
sha256: "7f1270313c0cdb245b583ed8518982c01d4a7e95869b3c30abcbae3b642c45d0"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.8"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
+19
-15
@@ -37,21 +37,25 @@ dependencies:
|
|||||||
cupertino_icons: ^1.0.2
|
cupertino_icons: ^1.0.2
|
||||||
|
|
||||||
# Google Sign In
|
# Google Sign In
|
||||||
firebase_auth: ^4.3.0
|
firebase_auth:
|
||||||
firebase_core: ^2.8.0
|
firebase_core:
|
||||||
google_sign_in: ^6.0.2
|
google_sign_in:
|
||||||
provider: ^6.0.5
|
provider:
|
||||||
get: ^4.6.5
|
get:
|
||||||
font_awesome_flutter: ^10.4.0
|
font_awesome_flutter:
|
||||||
flutter_otp_text_field: ^1.1.1
|
flutter_otp_text_field:
|
||||||
intl_phone_field: ^3.1.0
|
intl_phone_field:
|
||||||
cloud_firestore: ^4.5.0
|
cloud_firestore:
|
||||||
diacritic: ^0.1.3
|
diacritic:
|
||||||
firebase_storage: ^11.1.0
|
firebase_storage:
|
||||||
image_picker: ^0.8.7+1
|
image_picker:
|
||||||
flutter_animate: ^4.1.1+1
|
flutter_animate:
|
||||||
flutter_rating_bar: ^4.0.1
|
flutter_rating_bar:
|
||||||
intl:
|
table_calendar:
|
||||||
|
intl:
|
||||||
|
google_maps_flutter: ^2.2.5
|
||||||
|
geolocator: ^9.0.2
|
||||||
|
geocoding: ^2.1.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
@@ -6,6 +6,9 @@
|
|||||||
|
|
||||||
#include "generated_plugin_registrant.h"
|
#include "generated_plugin_registrant.h"
|
||||||
|
|
||||||
|
#include <geolocator_windows/geolocator_windows.h>
|
||||||
|
|
||||||
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||||
|
GeolocatorWindowsRegisterWithRegistrar(
|
||||||
|
registry->GetRegistrarForPlugin("GeolocatorWindows"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
list(APPEND FLUTTER_PLUGIN_LIST
|
list(APPEND FLUTTER_PLUGIN_LIST
|
||||||
|
geolocator_windows
|
||||||
)
|
)
|
||||||
|
|
||||||
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
||||||
|
|||||||
Reference in New Issue
Block a user