feat: Add location permissions and implement current location retrieval in map component

This commit is contained in:
Van Leemput Dayron
2025-10-17 00:59:19 +02:00
parent d1cda9c3ff
commit 1ce5107b97
6 changed files with 355 additions and 131 deletions

View File

@@ -3,6 +3,8 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:label="travel_mate"
android:name="${applicationName}"

View File

@@ -46,9 +46,9 @@
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>NSLocationWhenInUseUsageDescription</key>
<string>We need your location to show it on the map.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>We need your location to show it on the map even in background.</string>
<string>Cette application a besoin de votre position pour afficher votre localisation sur la carte</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Cette application a besoin de votre position pour afficher votre localisation sur la carte</string>
<key>GIDClientID</key>
<string>521527250907-3i1qe2656eojs8k9hjdi573j09i9p41m.apps.googleusercontent.com</string>
</dict>

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:geolocator/geolocator.dart';
class MapContent extends StatefulWidget {
const MapContent({super.key});
@@ -9,22 +10,100 @@ class MapContent extends StatefulWidget {
}
class _MapContentState extends State<MapContent> {
final LatLng _initialPosition = const LatLng(48.8566, 2.3522); // Paris
GoogleMapController? _mapController;
LatLng _initialPosition = const LatLng(48.8566, 2.3522); // Paris par défaut
final TextEditingController _searchController = TextEditingController();
bool _isLoadingLocation = false;
Position? _currentPosition;
@override
void initState() {
super.initState();
_getCurrentLocation();
}
@override
void dispose() {
_searchController.dispose();
_mapController?.dispose();
super.dispose();
}
// Obtenir la position actuelle
Future<void> _getCurrentLocation() async {
setState(() {
_isLoadingLocation = true;
});
try {
// Vérifier si la localisation est activée
bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
_showError('Veuillez activer les services de localisation');
setState(() {
_isLoadingLocation = false;
});
return;
}
// Vérifier les permissions
LocationPermission permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
_showError('Permission de localisation refusée');
setState(() {
_isLoadingLocation = false;
});
return;
}
}
if (permission == LocationPermission.deniedForever) {
_showError('Permission de localisation refusée définitivement');
setState(() {
_isLoadingLocation = false;
});
return;
}
// Obtenir la position actuelle
Position position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high,
);
setState(() {
_currentPosition = position;
_initialPosition = LatLng(position.latitude, position.longitude);
_isLoadingLocation = false;
});
// Animer la caméra vers la position actuelle
if (_mapController != null) {
_mapController!.animateCamera(
CameraUpdate.newLatLngZoom(_initialPosition, 14),
);
}
} catch (e) {
_showError('Erreur lors de la récupération de la position: $e');
setState(() {
_isLoadingLocation = false;
});
}
}
void _showError(String message) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(message), backgroundColor: Colors.red),
);
}
void _searchLocation() {
// TODO: Implémenter la logique de recherche
final searchQuery = _searchController.text.trim();
if (searchQuery.isNotEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Recherche de: $searchQuery')),
);
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text('Recherche de: $searchQuery')));
}
}
@@ -51,64 +130,61 @@ class _MapContentState extends State<MapContent> {
onSubmitted: (_) => _searchLocation(),
),
const SizedBox(height: 8),
const SizedBox(height: 12),
// Bouton chercher
SizedBox(
width: double.infinity,
height: 48,
child: ElevatedButton(
onPressed: _searchLocation,
style: ElevatedButton.styleFrom(
backgroundColor: Theme.of(context).colorScheme.primary,
foregroundColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12.0),
),
),
child: const Text(
'Chercher',
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500),
),
),
),
const SizedBox(height: 8),
// Container avec la carte
// Google Maps
Expanded(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16.0),
boxShadow: [
BoxShadow(
color: Colors.black.withValues(alpha: 0.1),
blurRadius: 8,
offset: const Offset(0, 2),
child: Stack(
children: [
ClipRRect(
borderRadius: BorderRadius.circular(16),
child: GoogleMap(
initialCameraPosition: CameraPosition(
target: _initialPosition,
zoom: 14,
),
onMapCreated: (GoogleMapController controller) {
_mapController = controller;
},
myLocationEnabled: true,
myLocationButtonEnabled: false,
zoomControlsEnabled: false,
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(16.0),
child: GoogleMap(
mapType: MapType.normal,
initialCameraPosition: CameraPosition(
target: _initialPosition,
zoom: 12,
),
onMapCreated: (GoogleMapController controller) {},
myLocationEnabled: true,
myLocationButtonEnabled: true,
zoomControlsEnabled: true,
compassEnabled: true,
),
),
// Indicateur de chargement
if (_isLoadingLocation)
Center(
child: Container(
padding: EdgeInsets.all(16),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
CircularProgressIndicator(),
SizedBox(height: 8),
Text('Localisation en cours...'),
],
),
),
),
],
),
),
],
),
),
),
// Bouton flottant pour recentrer sur la position actuelle
floatingActionButton: FloatingActionButton(
onPressed: _getCurrentLocation,
tooltip: 'Ma position',
child: Icon(Icons.my_location),
),
);
}
}

View File

@@ -53,16 +53,16 @@ class MyApp extends StatelessWidget {
create: (context) => ThemeBloc()..add(ThemeLoadRequested()),
),
BlocProvider<AuthBloc>(
create: (context) => AuthBloc(
authRepository: context.read<AuthRepository>(),
)..add(AuthCheckRequested()),
create: (context) =>
AuthBloc(authRepository: context.read<AuthRepository>())
..add(AuthCheckRequested()),
),
BlocProvider(create: (context) => GroupBloc(
context.read<GroupRepository>(),
)),
BlocProvider(create: (context) => TripBloc(
tripRepository: context.read<TripRepository>(),
),
BlocProvider(
create: (context) => GroupBloc(context.read<GroupRepository>()),
),
BlocProvider(
create: (context) =>
TripBloc(tripRepository: context.read<TripRepository>()),
),
BlocProvider(create: (context) => UserBloc()),
],
@@ -86,14 +86,7 @@ class MyApp extends StatelessWidget {
),
useMaterial3: true,
),
home: BlocBuilder<AuthBloc, AuthState>(
builder: (context, authState) {
if (authState is AuthAuthenticated) {
return const HomePage();
}
return const LoginPage();
},
),
home: const LoginPage(),
routes: {
'/login': (context) => const LoginPage(),
'/signup': (context) => const SignUpPage(),

View File

@@ -5,10 +5,18 @@ packages:
dependency: transitive
description:
name: _flutterfire_internals
sha256: "23d16f00a2da8ffa997c782453c73867b0609bd90435195671a54de38a3566df"
sha256: f871a7d1b686bea1f13722aa51ab31554d05c81f47054d6de48cc8c45153508b
url: "https://pub.dev"
source: hosted
version: "1.3.62"
version: "1.3.63"
args:
dependency: transitive
description:
name: args
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
url: "https://pub.dev"
source: hosted
version: "2.7.0"
async:
dependency: transitive
description:
@@ -29,10 +37,10 @@ packages:
dependency: transitive
description:
name: bloc
sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e"
sha256: a2cebb899f91d36eeeaa55c7b20b5915db5a9df1b8fd4a3c9c825e22e474537d
url: "https://pub.dev"
source: hosted
version: "8.1.4"
version: "9.1.0"
boolean_selector:
dependency: transitive
description:
@@ -61,26 +69,26 @@ packages:
dependency: "direct main"
description:
name: cloud_firestore
sha256: af66aeffe5943d582c0f655ec860433dbd773ac4a4ffc62c11960b52a18833fe
sha256: ea3fe98eaf0c3b675ab2a242d98430518da60f89d5cc9774df7b2d9110aaf160
url: "https://pub.dev"
source: hosted
version: "6.0.2"
version: "6.0.3"
cloud_firestore_platform_interface:
dependency: transitive
description:
name: cloud_firestore_platform_interface
sha256: "494dd3d275a0259e3ba08b442b54e64839b0cf58352a50fe97eb67cacf3bad28"
sha256: b5592862c451ebfd229b430907b6feb2082333d6e5a61d0eafd547c2afc6f68e
url: "https://pub.dev"
source: hosted
version: "7.0.2"
version: "7.0.3"
cloud_firestore_web:
dependency: transitive
description:
name: cloud_firestore_web
sha256: "85b7b071c23eecbbbb47a9fbd2cfdb1b6af20f2323663fd90234d91a064f0584"
sha256: eca0337985e0eedcef8a3e5380950af01c0853951b6b8427e7909115d81d7b9c
url: "https://pub.dev"
source: hosted
version: "5.0.2"
version: "5.0.3"
collection:
dependency: transitive
description:
@@ -89,6 +97,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.19.1"
crypto:
dependency: transitive
description:
name: crypto
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
url: "https://pub.dev"
source: hosted
version: "3.0.6"
csslib:
dependency: transitive
description:
@@ -105,6 +121,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.8"
dbus:
dependency: transitive
description:
name: dbus
sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c"
url: "https://pub.dev"
source: hosted
version: "0.7.11"
equatable:
dependency: "direct main"
description:
@@ -141,50 +165,58 @@ packages:
dependency: "direct main"
description:
name: firebase_auth
sha256: "735f857c9363376eeb585e7ba57e67e5f495202cd3f609902b8769795fd823bc"
sha256: "3150a56fc0f20b4b926e1343bfdca3acb591a0aa1c95bae5426353f384085352"
url: "https://pub.dev"
source: hosted
version: "6.1.0"
version: "6.1.1"
firebase_auth_platform_interface:
dependency: transitive
description:
name: firebase_auth_platform_interface
sha256: "5badda0ea5048ffbb1726169cf5530539490de8055c3bd43f4f9cd5fcef8e556"
sha256: "7bc50c0d74dd8f4c72d7840ae64ea7b638f203d089e5c4a90a157b2f2ead1963"
url: "https://pub.dev"
source: hosted
version: "8.1.2"
version: "8.1.3"
firebase_auth_web:
dependency: transitive
description:
name: firebase_auth_web
sha256: "07c889d2c56e648ed30225e819801d7e45542747a658d9c385520de35d312dec"
sha256: "351dcb82bc542e21a426cd97ffcc40d7232981dafc3fd89a6c932876a09240e1"
url: "https://pub.dev"
source: hosted
version: "6.0.3"
version: "6.0.4"
firebase_core:
dependency: "direct main"
description:
name: firebase_core
sha256: "4dd96f05015c0dcceaa47711394c32971aee70169625d5e2477e7676c01ce0ee"
sha256: "132e1c311bc41e7d387b575df0aacdf24efbf4930365eb61042be5bde3978f03"
url: "https://pub.dev"
source: hosted
version: "4.1.1"
version: "4.2.0"
firebase_core_platform_interface:
dependency: transitive
description:
name: firebase_core_platform_interface
sha256: "5873a370f0d232918e23a5a6137dbe4c2c47cf017301f4ea02d9d636e52f60f0"
sha256: cccb4f572325dc14904c02fcc7db6323ad62ba02536833dddb5c02cac7341c64
url: "https://pub.dev"
source: hosted
version: "6.0.1"
version: "6.0.2"
firebase_core_web:
dependency: transitive
description:
name: firebase_core_web
sha256: "61a51037312dac781f713308903bb7a1762a7f92f7bc286a3a0947fb2a713b82"
sha256: ecde2def458292404a4fcd3731ee4992fd631a0ec359d2d67c33baa8da5ec8ae
url: "https://pub.dev"
source: hosted
version: "3.1.1"
version: "3.2.0"
fixnum:
dependency: transitive
description:
name: fixnum
sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
url: "https://pub.dev"
source: hosted
version: "1.1.1"
flutter:
dependency: "direct main"
description: flutter
@@ -194,26 +226,26 @@ packages:
dependency: "direct main"
description:
name: flutter_bloc
sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a
sha256: cf51747952201a455a1c840f8171d273be009b932c75093020f9af64f2123e38
url: "https://pub.dev"
source: hosted
version: "8.1.6"
version: "9.1.1"
flutter_lints:
dependency: "direct dev"
description:
name: flutter_lints
sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1"
sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1"
url: "https://pub.dev"
source: hosted
version: "5.0.0"
version: "6.0.0"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: b0694b7fb1689b0e6cc193b3f1fcac6423c4f93c74fb20b806c6b6f196db0c31
sha256: "306f0596590e077338312f38837f595c04f28d6cdeeac392d3d74df2f0003687"
url: "https://pub.dev"
source: hosted
version: "2.0.30"
version: "2.0.32"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -224,6 +256,70 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
geoclue:
dependency: transitive
description:
name: geoclue
sha256: c2a998c77474fc57aa00c6baa2928e58f4b267649057a1c76738656e9dbd2a7f
url: "https://pub.dev"
source: hosted
version: "0.1.1"
geolocator:
dependency: "direct main"
description:
name: geolocator
sha256: "79939537046c9025be47ec645f35c8090ecadb6fe98eba146a0d25e8c1357516"
url: "https://pub.dev"
source: hosted
version: "14.0.2"
geolocator_android:
dependency: transitive
description:
name: geolocator_android
sha256: "179c3cb66dfa674fc9ccbf2be872a02658724d1c067634e2c427cf6df7df901a"
url: "https://pub.dev"
source: hosted
version: "5.0.2"
geolocator_apple:
dependency: transitive
description:
name: geolocator_apple
sha256: dbdd8789d5aaf14cf69f74d4925ad1336b4433a6efdf2fce91e8955dc921bf22
url: "https://pub.dev"
source: hosted
version: "2.3.13"
geolocator_linux:
dependency: transitive
description:
name: geolocator_linux
sha256: c4e966f0a7a87e70049eac7a2617f9e16fd4c585a26e4330bdfc3a71e6a721f3
url: "https://pub.dev"
source: hosted
version: "0.2.3"
geolocator_platform_interface:
dependency: transitive
description:
name: geolocator_platform_interface
sha256: "30cb64f0b9adcc0fb36f628b4ebf4f731a2961a0ebd849f4b56200205056fe67"
url: "https://pub.dev"
source: hosted
version: "4.2.6"
geolocator_web:
dependency: transitive
description:
name: geolocator_web
sha256: b1ae9bdfd90f861fde8fd4f209c37b953d65e92823cb73c7dee1fa021b06f172
url: "https://pub.dev"
source: hosted
version: "4.1.3"
geolocator_windows:
dependency: transitive
description:
name: geolocator_windows
sha256: "175435404d20278ffd220de83c2ca293b73db95eafbdc8131fe8609be1421eb6"
url: "https://pub.dev"
source: hosted
version: "0.2.5"
google_identity_services_web:
dependency: transitive
description:
@@ -252,10 +348,10 @@ packages:
dependency: transitive
description:
name: google_maps_flutter_android
sha256: a6c9d43f6a944ff4bae5c3deb34817970ac3d591dcd7f5bd2ea450ab9e9c514a
sha256: f820a3990d4ff23e3baf01ce794f7f08cca9a9ce6c875ec96882d605f6f039df
url: "https://pub.dev"
source: hosted
version: "2.18.2"
version: "2.18.4"
google_maps_flutter_ios:
dependency: transitive
description:
@@ -292,10 +388,10 @@ packages:
dependency: transitive
description:
name: google_sign_in_android
sha256: "7abdfa0088dc8f7d08eb3dbb1665a72bcb5b37afa256c9ec5d21e1e2d7503e5c"
sha256: "7a0d3b7e73e21d88612ebbb1942e91ee1eb35ed3086b1a0a3398b2248be29034"
url: "https://pub.dev"
source: hosted
version: "7.2.0"
version: "7.2.2"
google_sign_in_ios:
dependency: transitive
description:
@@ -320,6 +416,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.0"
gsettings:
dependency: transitive
description:
name: gsettings
sha256: "1b0ce661f5436d2db1e51f3c4295a49849f03d304003a7ba177d01e3a858249c"
url: "https://pub.dev"
source: hosted
version: "0.2.8"
html:
dependency: transitive
description:
@@ -344,14 +448,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.1.2"
js:
dependency: transitive
description:
name: js
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
url: "https://pub.dev"
source: hosted
version: "0.6.7"
leak_tracker:
dependency: transitive
description:
@@ -380,34 +476,34 @@ packages:
dependency: transitive
description:
name: lints
sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0
url: "https://pub.dev"
source: hosted
version: "5.1.1"
version: "6.0.0"
location:
dependency: "direct main"
description:
name: location
sha256: "06be54f682c9073cbfec3899eb9bc8ed90faa0e17735c9d9fa7fe426f5be1dd1"
sha256: b080053c181c7d152c43dd576eec6436c40e25f326933051c330da563ddd5333
url: "https://pub.dev"
source: hosted
version: "5.0.3"
version: "8.0.1"
location_platform_interface:
dependency: transitive
description:
name: location_platform_interface
sha256: "8aa1d34eeecc979d7c9fe372931d84f6d2ebbd52226a54fe1620de6fdc0753b1"
sha256: ca8700bb3f6b1e8b2afbd86bd78b2280d116c613ca7bfa1d4d7b64eba357d749
url: "https://pub.dev"
source: hosted
version: "3.1.2"
version: "6.0.1"
location_web:
dependency: transitive
description:
name: location_web
sha256: ec484c66e8a4ff1ee5d044c203f4b6b71e3a0556a97b739a5bc9616de672412b
sha256: b8e3add5efe0d65c5e692b7a135d80a4015c580d3ea646fa71973e97668dd868
url: "https://pub.dev"
source: hosted
version: "4.2.0"
version: "6.0.1"
matcher:
dependency: transitive
description:
@@ -440,6 +536,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.0"
package_info_plus:
dependency: transitive
description:
name: package_info_plus
sha256: "16eee997588c60225bda0488b6dcfac69280a6b7a3cf02c741895dd370a02968"
url: "https://pub.dev"
source: hosted
version: "8.3.1"
package_info_plus_platform_interface:
dependency: transitive
description:
name: package_info_plus_platform_interface
sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086"
url: "https://pub.dev"
source: hosted
version: "3.2.1"
path:
dependency: transitive
description:
@@ -460,10 +572,10 @@ packages:
dependency: transitive
description:
name: path_provider_android
sha256: "993381400e94d18469750e5b9dcb8206f15bc09f9da86b9e44a9b0092a0066db"
sha256: e122c5ea805bb6773bb12ce667611265980940145be920cd09a4b0ec0285cb16
url: "https://pub.dev"
source: hosted
version: "2.2.18"
version: "2.2.20"
path_provider_foundation:
dependency: transitive
description:
@@ -496,6 +608,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.3.0"
petitparser:
dependency: transitive
description:
name: petitparser
sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1"
url: "https://pub.dev"
source: hosted
version: "7.0.1"
platform:
dependency: transitive
description:
@@ -540,10 +660,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_android
sha256: bd14436108211b0d4ee5038689a56d4ae3620fd72fd6036e113bf1345bc74d9e
sha256: "34266009473bf71d748912da4bf62d439185226c03e01e2d9687bc65bbfcb713"
url: "https://pub.dev"
source: hosted
version: "2.4.13"
version: "2.4.15"
shared_preferences_foundation:
dependency: transitive
description:
@@ -597,6 +717,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.10.1"
sprintf:
dependency: transitive
description:
name: sprintf
sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
url: "https://pub.dev"
source: hosted
version: "7.0.0"
stack_trace:
dependency: transitive
description:
@@ -653,6 +781,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.4.0"
uuid:
dependency: transitive
description:
name: uuid
sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
url: "https://pub.dev"
source: hosted
version: "4.5.1"
vector_math:
dependency: transitive
description:
@@ -677,6 +813,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.1"
win32:
dependency: transitive
description:
name: win32
sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e
url: "https://pub.dev"
source: hosted
version: "5.15.0"
xdg_directories:
dependency: transitive
description:
@@ -685,6 +829,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.0"
xml:
dependency: transitive
description:
name: xml
sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025"
url: "https://pub.dev"
source: hosted
version: "6.6.1"
sdks:
dart: ">=3.9.2 <4.0.0"
flutter: ">=3.29.0"
flutter: ">=3.35.0"

View File

@@ -34,8 +34,8 @@ dependencies:
shared_preferences: ^2.2.2
path_provider: ^2.1.1
bcrypt: ^1.1.3
location: ^5.0.0
flutter_bloc : ^8.1.3
location: ^8.0.1
flutter_bloc : ^9.1.1
equatable: ^2.0.5
# The following adds the Cupertino Icons font to your application.
@@ -47,6 +47,7 @@ dependencies:
cloud_firestore: ^6.0.2
google_sign_in: ^7.2.0
google_sign_in_platform_interface: ^3.1.0
geolocator: ^14.0.2
dev_dependencies:
flutter_test:
@@ -57,7 +58,7 @@ dev_dependencies:
# activated in the `analysis_options.yaml` file located at the root of your
# package. See that file for information about deactivating specific lint
# rules and activating additional ones.
flutter_lints: ^5.0.0
flutter_lints: ^6.0.0
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec