Nominatim Flutter Plugin with Isolate Loading & Hive Caching
The Nominatim Flutter Plugin offers seamless interaction with the Nominatim service, allowing for reverse geocoding and place searching in your Flutter applications. Notably, it supports asynchronous data loading via a dedicated isolate and provides efficient caching using Hive, enhanced with DioCache customization.
Features
- Reverse Geocoding & Place Searching: Directly integrate with Nominatim.
- Check Server Status: Verify the operational status of the Nominatim server.
- Lookup: Retrieve detailed information about specific places using unique identifiers (OSM IDs).
- Asynchronous Isolate Loading: Load data in a separate thread, ensuring your UI remains smooth.
- Hive Caching: Speed up data retrieval with efficient caching.
- DioCache Customization: Take control of caching behavior by configuring DioCache settings.
Usage
To use the Nominatim Flutter Plugin, follow these steps:
-
Installation: Add the package to your
pubspec.yaml
file and runflutter pub get
to install it.dependencies: nominatim_flutter: ^0.0.5 # Replace with the latest version
-
Import Classes: Import the necessary classes in your Dart code.
import 'package:nominatim_flutter/nominatim_flutter.dart';
-
Configuration (Optional): Before you start making requests, you can optionally set up caching preferences using DioCache.
NominatimFlutter.instance.configureDioCache( useCacheInterceptor: true, maxStale: Duration(days: 7), );
This step allows you to determine whether the cache interceptor is used and to set the maximum staleness of the cache.
-
Reverse Geocoding: Retrieve address information from latitude and longitude coordinates.
final reverseRequest = ReverseRequest( lat: 10.7950, lon: 106.7218, addressDetails: true, extraTags: true, nameDetails: true, ); final reverseResult = await NominatimFlutter.instance.reverse( reverseRequest: reverseRequest, language: 'en-US,en;q=0.5', // Specify the desired language(s) here ); print(reverseResult);
-
Search for Places: Search for places based on query and location.
final searchRequest = SearchRequest( query: 'Landmark 81', limit: 3, addressDetails: true, extraTags: true, nameDetails: true, ); final searchResult = await NominatimFlutter.instance.search( searchRequest: searchRequest, language: 'en-US,en;q=0.5', // Specify the desired language(s) here ); for (var result in searchResult) { print(result); }
-
Check Server Status: Verify the status of the Nominatim server to ensure it is operational.
final statusResult = await NominatimFlutter.instance.status(); if (statusResult.status == Status.ok) { print('Nominatim server is operational.'); } else { print('Nominatim server is down.'); }
-
Lookup: Retrieve detailed information about a specific place using its unique identifier (OSM ID).
final lookupRequest = LookupRequest( osmIds: 'R146656,W104393803,N240109189', // Replace with actual OSM IDs addressDetails: true, extraTags: true, nameDetails: true, ); final lookupResult = await NominatimFlutter.instance.lookup( lookupRequest: lookupRequest, language: 'en-US,en;q=0.5', // Specify the desired language(s) here ); for (var result in lookupResult) { print(result); }
-
Contributions: Contributions are welcome! If you encounter any issues or have suggestions for improvements, please feel free to submit a pull request or create an issue on the GitHub repository.
-
License: This project is licensed under the GPL-3.0 License. Refer to the LICENSE file for details.
Remember to replace the version number (^0.0.5
) with the actual version of your Nominatim Flutter Plugin. Customize the usage examples and other sections according to your project's needs.
Libraries
- config/dio_cache_configuration
- model/isolate_helper_mixin
- model/request/lookup_request
- model/request/request
- model/request/reverse_request
- model/request/search_request
- model/response/nominatim_response
- model/response/response
- model/response/status_response
- network/api_provider
- network/dio_factory
- nominatim_flutter
- service/nominatim_service
- service/nominatim_service_client