location_reader

location_reader is a Flutter package designed to simplify the process of retrieving and handling location-related data. It supports features such as obtaining the current location, converting coordinates to city names or country codes, managing location permissions, and performing nearby location queries with GeoFirePoint and Firebase.

Features

  • 🌍 Get current location using Geolocator
  • πŸ™οΈ Convert latitude and longitude to city name and country code using geocoding
  • πŸ“ Retrieve GeoFirePoint objects for use in Firebase
  • πŸ“‘ Nearby location query support via geoflutterfire2
  • πŸ” Seamless location permission handling
  • πŸ’‘ Clean architecture with services, repositories, use cases, and cubits

Installation

Add the following to your pubspec.yaml:

dependencies:
  location_reader: ^<latest_version>

Then run:

flutter pub get

Getting Started

1. Register Dependencies

Ensure you call the DI registration method before using the services:

registerLocationServiceGetItDi();

2. Use Cases

You can access location-related use cases like this:

final getCurrentLocation = sl<GetCurrentLocation>();
final location = await getCurrentLocation();

3. UI Integration

Use LocationPicker and CountryCodeLoader widgets:

LocationPicker(
  onTap: () => // pick location logic,
)
CountryCodeLoader(
  page: (code) => Text("Country: $code"),
)

Dependencies

  • geolocator
  • geocoding
  • geoflutterfire2
  • flutter_bloc
  • get_it
  • dartz
  • json_serializable

Example Use Cases

  • GetCityName
  • GetCountryCode
  • GetCurrentLocation

All of these use cases internally handle permissions, errors, and edge cases.

JSON Support

The LocationModel class supports JSON serialization using json_serializable.

Error Handling

Utilizes Either from dartz and custom IFailure/LocationError for structured error handling.

Contributing

Feel free to open issues and contribute pull requests for enhancements or bug fixes.

License

MIT License. See LICENSE file for details.

Libraries

config/bloc_provider/register_location_bloc_provider
config/di/register_location_service_get_it_di
data/data_sources/address_service_impl
data/data_sources/city_name_service_impl
data/data_sources/country_code_service_impl
data/data_sources/geo_fire_point_converter_impl
data/data_sources/i_location_services/i_address_service
data/data_sources/i_location_services/i_city_name_service
data/data_sources/i_location_services/i_country_code_service
data/data_sources/i_location_services/i_geo_fire_point_converter
data/data_sources/i_location_services/i_location_crud_service
data/data_sources/i_location_services/i_location_permission_manager
data/data_sources/i_location_services/i_location_service_geo_fire_point_provider
data/data_sources/i_location_services/i_location_service_geo_locator_provider
data/data_sources/i_location_services/i_nearby_location_service
data/data_sources/location_firestore_crud_service_impl
data/data_sources/location_permission_manager_geo_locator_provider_impl
data/data_sources/location_service_geo_fire_point_provider_impl
data/data_sources/location_service_geo_locator_provider_impl
data/data_sources/nearby_location_geofire_service_impl
data/geofence_searvice
data/model/location_model
data/repositories/city_name_repository_impl
data/repositories/country_code_repository_impl
data/repositories/current_location_repository_impl
data/repositories/geo_location_repository
domain/entities/location_entity
domain/i_repository/i_city_name_repository
domain/i_repository/i_country_code_repository
domain/i_repository/i_current_location_repository
domain/i_repository/i_location_repository
domain/usecases/get_city_name
domain/usecases/get_country_code
domain/usecases/get_current_location
location_reader
utils/convert_geo_fire_point
utils/json_geo_point_converter_utils
view_model/city_name_cubit/city_name_cubit
view_model/city_name_cubit/city_name_state
view_model/country_code_cubit/country_code_cubit
view_model/country_code_cubit/country_code_state
view_model/location_picker_cubit/location_picker_cubit
views/widgets/city_name_builder
views/widgets/country_code_loader
views/widgets/location_picker