added search functionality
This commit is contained in:
60
lib/view/locationSearch.dart
Normal file
60
lib/view/locationSearch.dart
Normal file
@@ -0,0 +1,60 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:latlong2/latlong.dart';
|
||||
import 'package:osm_nominatim/osm_nominatim.dart';
|
||||
|
||||
class LocationSearchDelegate extends SearchDelegate<LatLng?> {
|
||||
@override
|
||||
List<Widget>? buildActions(BuildContext context) {
|
||||
return [
|
||||
IconButton(
|
||||
icon: const Icon(Icons.clear),
|
||||
onPressed: () => query = '',
|
||||
)
|
||||
];
|
||||
}
|
||||
|
||||
@override
|
||||
Widget? buildLeading(BuildContext context) {
|
||||
return IconButton(
|
||||
icon: const Icon(Icons.arrow_back),
|
||||
onPressed: () => close(context, null),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget buildResults(BuildContext context) {
|
||||
return FutureBuilder<List<Place>>(
|
||||
future: query.isEmpty ? Future.value([]) : Nominatim.searchByName(
|
||||
query: query,
|
||||
limit: 10,
|
||||
language: 'de',
|
||||
// https://gist.github.com/graydon/11198540#file-country-bounding-boxes-py-L45
|
||||
viewBox: ViewBox(54.983104153, 15.0169958839, 47.3024876979, 5.98865807458)
|
||||
),
|
||||
builder: (BuildContext context, AsyncSnapshot<List<Place>> snapshot) {
|
||||
switch (snapshot.connectionState) {
|
||||
case ConnectionState.waiting:
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
case ConnectionState.active:
|
||||
case ConnectionState.none:
|
||||
case ConnectionState.done:
|
||||
return ListView.builder(
|
||||
itemCount: snapshot.data?.length ?? 0,
|
||||
itemBuilder: (context, index) {
|
||||
Place place = snapshot.data![index];
|
||||
return ListTile(
|
||||
title: Text(place.displayName),
|
||||
onTap: () => close(context, LatLng(place.lat, place.lon)),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget buildSuggestions(BuildContext context) {
|
||||
return buildResults(context);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user