working state with dynamic location tracker
This commit is contained in:
parent
a2ede1f582
commit
3256c6d46a
@ -34,7 +34,7 @@ jobs:
|
||||
|
||||
- run: flutter pub get
|
||||
|
||||
- run: flutter build apk --debug --split-per-abi
|
||||
- run: flutter build apk --release --split-per-abi
|
||||
|
||||
- name: Release APK
|
||||
uses: https://gitea.com/akkuman/gitea-release-action@v1
|
||||
|
@ -1,13 +1,62 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
Widget singleDestination(BuildContext context, String title, String description, String image) {
|
||||
|
||||
|
||||
List<Widget> loadDestinations() {
|
||||
List<Widget> cities = [
|
||||
singleDestination(
|
||||
"New York",
|
||||
"The Big Apple",
|
||||
"https://upload.wikimedia.org/wikipedia/commons/thumb/3/34/View_of_New_York_City.jpg/800px-View_of_New_York_City.jpg"
|
||||
),
|
||||
singleDestination(
|
||||
"Los Angeles",
|
||||
"City of Angels",
|
||||
"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8d/Los_Angeles_City_Hall_2013.jpg/800px-Los_Angeles_City_Hall_2013.jpg"
|
||||
),
|
||||
singleDestination(
|
||||
"Chicago",
|
||||
"The Windy City",
|
||||
"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Chicago_skyline%2C_viewed_from_John_Hancock_Center.jpg/800px-Chicago_skyline%2C_viewed_from_John_Hancock_Center.jpg"
|
||||
),
|
||||
singleDestination(
|
||||
"San Francisco",
|
||||
"The Golden City",
|
||||
"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6d/San_Francisco_City_Hall_2013.jpg/800px-San_Francisco_City_Hall_2013.jpg"
|
||||
),
|
||||
singleDestination(
|
||||
"Miami",
|
||||
"The Magic City",
|
||||
"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6e/Miami_collage.jpg/800px-Miami_collage.jpg"
|
||||
),
|
||||
singleDestination(
|
||||
"Las Vegas",
|
||||
"Sin City",
|
||||
"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6e/Las_Vegas_Strip.jpg/800px-Las_Vegas_Strip.jpg"
|
||||
),
|
||||
singleDestination(
|
||||
"Seattle",
|
||||
"Emerald City",
|
||||
"https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Seattle_Kerry_Park_Skyline.jpg/800px-Seattle_Kerry_Park_Skyline.jpg"
|
||||
),
|
||||
singleDestination(
|
||||
"Boston",
|
||||
"Beantown",
|
||||
"https://upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Boston_skyline_from_Longfellow_Bridge_September_2017_panorama_2.jpg/800px-Boston"
|
||||
)
|
||||
];
|
||||
cities.shuffle();
|
||||
return cities;
|
||||
}
|
||||
|
||||
Widget singleDestination(String title, String description, String image) {
|
||||
return Card(
|
||||
child: ListTile(
|
||||
leading: Icon(Icons.location_on),
|
||||
title: Text(title),
|
||||
subtitle: Text(description),
|
||||
onTap: () {
|
||||
Navigator.pushNamed(context, '/destination');
|
||||
// Navigator.pushNamed(context, '/destination');
|
||||
},
|
||||
),
|
||||
);
|
||||
|
@ -1,14 +1,74 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_map/flutter_map.dart';
|
||||
import 'package:sliding_up_panel/sliding_up_panel.dart';
|
||||
import 'package:latlong2/latlong.dart';
|
||||
import 'package:geocoding/geocoding.dart';
|
||||
import 'package:geocode/geocode.dart';
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:fast_network_navigation/modules/navigation.dart';
|
||||
|
||||
class MapPage extends StatefulWidget {
|
||||
@override
|
||||
_MapPageState createState() => _MapPageState();
|
||||
}
|
||||
class Debounce {
|
||||
Duration delay;
|
||||
Timer? _timer;
|
||||
|
||||
Debounce(
|
||||
this.delay,
|
||||
);
|
||||
|
||||
call(void Function() callback) {
|
||||
_timer?.cancel();
|
||||
_timer = Timer(delay, callback);
|
||||
}
|
||||
|
||||
dispose() {
|
||||
_timer?.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class _MapPageState extends State<MapPage> {
|
||||
GeoCode geoCode = GeoCode();
|
||||
final mapController = MapController();
|
||||
String _currentCityName = "...";
|
||||
final Debounce _debounce = Debounce(Duration(seconds: 3));
|
||||
|
||||
void _setCurrentCityName() async {
|
||||
if (mapController.camera.zoom < 9) {
|
||||
return; // Don't bother if the view is too wide
|
||||
}
|
||||
var currentCoordinates = mapController.camera.center;
|
||||
String? city;
|
||||
|
||||
try{
|
||||
List<Placemark> placemarks = await placemarkFromCoordinates(currentCoordinates.latitude, currentCoordinates.longitude);
|
||||
city = placemarks[0].locality.toString();
|
||||
} catch (e) {
|
||||
debugPrint("Error: $e");
|
||||
try {
|
||||
Address address = await geoCode.reverseGeocoding(latitude: currentCoordinates.latitude, longitude: currentCoordinates.longitude);
|
||||
|
||||
if (address.city == null || address.city.toString().contains("Throttled!")){
|
||||
throw Exception("Probably rate limited");
|
||||
}
|
||||
city = address.city.toString();
|
||||
} catch (e) {
|
||||
debugPrint("Error: $e");
|
||||
|
||||
}
|
||||
}
|
||||
if (city != null) {
|
||||
setState(() {
|
||||
_currentCityName = city!;
|
||||
});
|
||||
} else {
|
||||
_debounce(() async {_setCurrentCityName();});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@ -18,8 +78,15 @@ class _MapPageState extends State<MapPage> {
|
||||
panel: _floatingPanel(theme),
|
||||
collapsed: _floatingCollapsed(theme),
|
||||
body: FlutterMap(
|
||||
mapController: mapController,
|
||||
options: MapOptions(
|
||||
initialZoom: 11,
|
||||
initialCenter: LatLng(51.509364, -0.128928),
|
||||
onMapReady: () {
|
||||
mapController.mapEventStream.listen((evt) {_debounce(() async {_setCurrentCityName();});});
|
||||
// And any other `MapController` dependent non-movement methods
|
||||
},
|
||||
|
||||
),
|
||||
children: [
|
||||
openStreetMapTileLayer,
|
||||
@ -59,14 +126,7 @@ class _MapPageState extends State<MapPage> {
|
||||
children: <Widget>[
|
||||
Greeting(theme),
|
||||
Text("Got a lot to do today! Here is a rundown:"),
|
||||
singleDestination(context, "Location 1", "some description", "Further information"),
|
||||
singleDestination(context, "Location 2", "some description", "Further information"),
|
||||
singleDestination(context, "Location 3", "some description", "Further information"),
|
||||
singleDestination(context, "Location 4", "some description", "Further information"),
|
||||
singleDestination(context, "Location 5", "some description", "Further information"),
|
||||
singleDestination(context, "Location 6", "some description", "Further information"),
|
||||
singleDestination(context, "Location 7", "some description", "Further information"),
|
||||
singleDestination(context, "Location 8", "some description", "Further information"),
|
||||
...loadDestinations(),
|
||||
],
|
||||
),
|
||||
),
|
||||
@ -78,7 +138,7 @@ class _MapPageState extends State<MapPage> {
|
||||
Widget Greeting (ThemeData theme) {
|
||||
return Center(
|
||||
child: Text(
|
||||
"Explore Kview",
|
||||
"Explore ${_currentCityName}",
|
||||
style: TextStyle(color: theme.primaryColor, fontSize: 24.0, fontWeight: FontWeight.bold),
|
||||
),
|
||||
);
|
||||
|
50
pubspec.lock
50
pubspec.lock
@ -83,6 +83,46 @@ packages:
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
geocode:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: geocode
|
||||
sha256: cf9727c369bb3703b97d6e440225962dc27b7f3c686662fe3cdcc91cbfb7074d
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.3"
|
||||
geocoding:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: geocoding
|
||||
sha256: d580c801cba9386b4fac5047c4c785a4e19554f46be42f4f5e5b7deacd088a66
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.0"
|
||||
geocoding_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: geocoding_android
|
||||
sha256: "1b13eca79b11c497c434678fed109c2be020b158cec7512c848c102bc7232603"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.3.1"
|
||||
geocoding_ios:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: geocoding_ios
|
||||
sha256: "94ddba60387501bd1c11e18dca7c5a9e8c645d6e3da9c38b9762434941870c24"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
geocoding_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: geocoding_platform_interface
|
||||
sha256: "8c2c8226e5c276594c2e18bfe88b19110ed770aeb7c1ab50ede570be8b92229b"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.2.0"
|
||||
http:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -108,7 +148,7 @@ packages:
|
||||
source: hosted
|
||||
version: "0.19.0"
|
||||
latlong2:
|
||||
dependency: transitive
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: latlong2
|
||||
sha256: "98227922caf49e6056f91b6c56945ea1c7b166f28ffcd5fb8e72fc0b453cc8fe"
|
||||
@ -203,6 +243,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.9.0"
|
||||
plugin_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: plugin_platform_interface
|
||||
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.8"
|
||||
polylabel:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1,5 +1,5 @@
|
||||
name: fast_network_navigation
|
||||
description: "A new Flutter project."
|
||||
name: "fast_network_navigation"
|
||||
description: "An interactive city navigator."
|
||||
# The following line prevents the package from being accidentally published to
|
||||
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
||||
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||
@ -37,6 +37,9 @@ dependencies:
|
||||
cupertino_icons: ^1.0.6
|
||||
flutter_map: ^6.1.0
|
||||
sliding_up_panel: ^2.0.0+1
|
||||
latlong2: ^0.9.1
|
||||
geocoding: ^3.0.0
|
||||
geocode: ^1.0.3
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
Loading…
x
Reference in New Issue
Block a user