1import 'package:easy_localization/easy_localization.dart';
2import 'package:flutter/material.dart';
3import 'package:flutter_bloc/flutter_bloc.dart';
4import 'package:google_maps_flutter/google_maps_flutter.dart';
5import 'package:geolocator/geolocator.dart';
6import 'package:geocoding/geocoding.dart';
7import 'package:go_router/go_router.dart';
9import '../../../../../core/constants/assets.dart';
10import '../../../../../core/router/routes.dart';
11import '../../../../../core/ui/theme/color_palette.dart';
12import '../../../../../core/ui/widgets/custom_scaffold.dart';
13import '../../bloc/planning_bloc/routing_planning_bloc.dart';
14import 'widgets/map_widget.dart';
15import 'widgets/bottom_content_panel.dart';
21 State<StartLocationScreen>
createState() => _StartLocationScreenState();
24class _StartLocationScreenState
extends State<StartLocationScreen> {
36 "elementType":
"labels.icon",
44 "featureType":
"transit",
62 bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
63 if (!serviceEnabled) {
71 LocationPermission permission = await Geolocator.checkPermission();
72 if (permission == LocationPermission.denied) {
73 permission = await Geolocator.requestPermission();
74 if (permission == LocationPermission.denied) {
83 if (permission == LocationPermission.deniedForever) {
91 final position = await Geolocator.getCurrentPosition(
92 locationSettings:
const LocationSettings(
93 accuracy: LocationAccuracy.high,
94 timeLimit: Duration(seconds: 10),
98 final location = LatLng(position.latitude, position.longitude);
99 final truckIcon = await BitmapDescriptor.asset(
100 const ImageConfiguration(),
109 markerId:
const MarkerId(
'start_location'),
112 anchor:
const Offset(0.5, 0.5),
121 CameraUpdate.newCameraPosition(
139 List<Placemark> placemarks = await placemarkFromCoordinates(
144 if (placemarks.isNotEmpty && mounted) {
145 final placemark = placemarks.first;
148 if (placemark.street != null && placemark.street!.isNotEmpty) {
152 if (placemark.locality != null && placemark.locality!.isNotEmpty) {
154 address += placemark.locality!;
157 if (placemark.administrativeArea != null &&
158 placemark.administrativeArea!.isNotEmpty) {
160 address += placemark.administrativeArea!;
179 context.read<RoutingPlanningBloc>().add(
185 context.push(
Routes.weeklyCollectionsScreen.route);
189 Widget
build(BuildContext context) {
190 return CustomScaffold(
191 isLeadingVisible:
false,
192 title:
'scheduling.start_location'.tr(),
201 onMapCreated: (GoogleMapController controller) {
override void initState()
class App extends StatefulWidget build(BuildContext context)
static const String pinIcon
static const antiFlashWhite
class EndLocationChooserScreen extends StatefulWidget _mapController
Future< void > _getAddressFromLocation(LatLng location) async
class UpdateLocationEvent extends LocationSelectionEvent location
const SetStartLocationEvent({ required this.location, required this.address, })
Future< void > _getCurrentLocation() async
style Column(crossAxisAlignment:CrossAxisAlignment.end, children:[Container(padding:EdgeInsets.symmetric(horizontal:8.w, vertical:4.h), decoration:BoxDecoration(color:ColorPalette.tiffanyBlue.withValues(alpha:0.1), borderRadius:BorderRadius.circular(12),), child:Text(collection.type ?? '', style:Theme.of(context).textTheme.bodySmall?.copyWith(color:ColorPalette.tiffanyBlue, fontWeight:FontWeight.bold,),),),],)