Compare commits
	
		
			4 Commits
		
	
	
		
			renovate/c
			...
			75efe1aaac
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 75efe1aaac | |||
| 07dde5ab58 | |||
| db82495f11 | |||
| 889b6c2096 | 
							
								
								
									
										6
									
								
								backend/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								backend/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +1,10 @@
 | 
				
			|||||||
# osm-cache
 | 
					# osm-cache and wikidata cache
 | 
				
			||||||
cache/
 | 
					cache/
 | 
				
			||||||
apicache/
 | 
					apicache/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# wikidata throttle
 | 
				
			||||||
 | 
					*.ctrl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Byte-compiled / optimized / DLL files
 | 
					# Byte-compiled / optimized / DLL files
 | 
				
			||||||
__pycache__/
 | 
					__pycache__/
 | 
				
			||||||
*.py[cod]
 | 
					*.py[cod]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,5 +13,6 @@ EXPOSE 8000
 | 
				
			|||||||
# Set environment variables used by the deployment. These can be overridden by the user using this image.
 | 
					# Set environment variables used by the deployment. These can be overridden by the user using this image.
 | 
				
			||||||
ENV NUM_WORKERS=1
 | 
					ENV NUM_WORKERS=1
 | 
				
			||||||
ENV OSM_CACHE_DIR=/cache
 | 
					ENV OSM_CACHE_DIR=/cache
 | 
				
			||||||
 | 
					ENV MEMCACHED_HOST_PATH=none
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CMD fastapi run src/main.py --port 8000 --workers $NUM_WORKERS
 | 
					CMD fastapi run src/main.py --port 8000 --workers $NUM_WORKERS
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,3 +14,4 @@ shapely = "*"
 | 
				
			|||||||
scipy = "*"
 | 
					scipy = "*"
 | 
				
			||||||
osmpythontools = "*"
 | 
					osmpythontools = "*"
 | 
				
			||||||
pywikibot = "*"
 | 
					pywikibot = "*"
 | 
				
			||||||
 | 
					pymemcache = "*"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										25
									
								
								backend/Pipfile.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										25
									
								
								backend/Pipfile.lock
									
									
									
										generated
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    "_meta": {
 | 
					    "_meta": {
 | 
				
			||||||
        "hash": {
 | 
					        "hash": {
 | 
				
			||||||
            "sha256": "f0de801038593d42d8b780d14c2c72bb4f5f5e66df02f72244917ede5d5ebce6"
 | 
					            "sha256": "4f8b3f0395b4e5352330616870da13acf41e16d1b69ba31b15fd688e90b8b628"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "pipfile-spec": 6,
 | 
					        "pipfile-spec": 6,
 | 
				
			||||||
        "requires": {},
 | 
					        "requires": {},
 | 
				
			||||||
@@ -1102,6 +1102,15 @@
 | 
				
			|||||||
            "markers": "python_version >= '3.8'",
 | 
					            "markers": "python_version >= '3.8'",
 | 
				
			||||||
            "version": "==2.18.0"
 | 
					            "version": "==2.18.0"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "pymemcache": {
 | 
				
			||||||
 | 
					            "hashes": [
 | 
				
			||||||
 | 
					                "sha256:27bf9bd1bbc1e20f83633208620d56de50f14185055e49504f4f5e94e94aff94",
 | 
				
			||||||
 | 
					                "sha256:f507bc20e0dc8d562f8df9d872107a278df049fa496805c1431b926f3ddd0eab"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "index": "pypi",
 | 
				
			||||||
 | 
					            "markers": "python_version >= '3.7'",
 | 
				
			||||||
 | 
					            "version": "==4.0.0"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "pyparsing": {
 | 
					        "pyparsing": {
 | 
				
			||||||
            "hashes": [
 | 
					            "hashes": [
 | 
				
			||||||
                "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad",
 | 
					                "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad",
 | 
				
			||||||
@@ -1142,12 +1151,12 @@
 | 
				
			|||||||
        },
 | 
					        },
 | 
				
			||||||
        "pywikibot": {
 | 
					        "pywikibot": {
 | 
				
			||||||
            "hashes": [
 | 
					            "hashes": [
 | 
				
			||||||
                "sha256:3f4fbc57f1765aa0fa1ccf84125bcfa475cae95b9cc0291867b751f3d4ac8fa2",
 | 
					                "sha256:0dd8291f1a26abb9fce2c2108a90dc338274988e60d21723aec1d3b0de321b5e",
 | 
				
			||||||
                "sha256:a26d918cf88ef56fdb1421b65b09def200cc28031cdc922d72a4198fbfddd225"
 | 
					                "sha256:7953fc4a6c498057e6eb7d9b762bbccb61348af0a599b89d7e246d5175b20a9b"
 | 
				
			||||||
            ],
 | 
					            ],
 | 
				
			||||||
            "index": "pypi",
 | 
					            "index": "pypi",
 | 
				
			||||||
            "markers": "python_full_version >= '3.7.0'",
 | 
					            "markers": "python_full_version >= '3.7.0'",
 | 
				
			||||||
            "version": "==9.2.1"
 | 
					            "version": "==9.3.0"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "pyyaml": {
 | 
					        "pyyaml": {
 | 
				
			||||||
            "hashes": [
 | 
					            "hashes": [
 | 
				
			||||||
@@ -1349,7 +1358,7 @@
 | 
				
			|||||||
                "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d",
 | 
					                "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d",
 | 
				
			||||||
                "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"
 | 
					                "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"
 | 
				
			||||||
            ],
 | 
					            ],
 | 
				
			||||||
            "markers": "python_version >= '3.8'",
 | 
					            "markers": "python_version < '3.13'",
 | 
				
			||||||
            "version": "==4.12.2"
 | 
					            "version": "==4.12.2"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "tzdata": {
 | 
					        "tzdata": {
 | 
				
			||||||
@@ -1658,11 +1667,11 @@
 | 
				
			|||||||
        },
 | 
					        },
 | 
				
			||||||
        "xarray": {
 | 
					        "xarray": {
 | 
				
			||||||
            "hashes": [
 | 
					            "hashes": [
 | 
				
			||||||
                "sha256:0b91e0bc4dc0296947947640fe31ec6e867ce258d2f7cbc10bedf4a6d68340c7",
 | 
					                "sha256:1b0fd51ec408474aa1f4a355d75c00cc1c02bd425d97b2c2e551fd21810e7f64",
 | 
				
			||||||
                "sha256:721a7394e8ec3d592b2d8ebe21eed074ac077dc1bb1bd777ce00e41700b4866c"
 | 
					                "sha256:4cae512d121a8522d41e66d942fb06c526bc1fd32c2c181d5fe62fe65b671638"
 | 
				
			||||||
            ],
 | 
					            ],
 | 
				
			||||||
            "markers": "python_version >= '3.9'",
 | 
					            "markers": "python_version >= '3.9'",
 | 
				
			||||||
            "version": "==2024.6.0"
 | 
					            "version": "==2024.7.0"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "develop": {}
 | 
					    "develop": {}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,3 +25,7 @@ logging.config.dictConfig(config)
 | 
				
			|||||||
# if we are in a debug session, set the log level to debug
 | 
					# if we are in a debug session, set the log level to debug
 | 
				
			||||||
if os.getenv('DEBUG', False):
 | 
					if os.getenv('DEBUG', False):
 | 
				
			||||||
    logging.getLogger().setLevel(logging.DEBUG)
 | 
					    logging.getLogger().setLevel(logging.DEBUG)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MEMCACHED_HOST_PATH = os.getenv('MEMCACHED_HOST_PATH', None)
 | 
				
			||||||
 | 
					if MEMCACHED_HOST_PATH == "none":
 | 
				
			||||||
 | 
					    MEMCACHED_HOST_PATH = None
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +1,14 @@
 | 
				
			|||||||
import logging
 | 
					import logging
 | 
				
			||||||
from fastapi import FastAPI, Query, Body
 | 
					from fastapi import FastAPI, Query, Body, HTTPException
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from structs.landmark import Landmark
 | 
					from structs.landmark import Landmark
 | 
				
			||||||
from structs.preferences import Preferences
 | 
					from structs.preferences import Preferences
 | 
				
			||||||
from structs.linked_landmarks import LinkedLandmarks
 | 
					from structs.linked_landmarks import LinkedLandmarks
 | 
				
			||||||
 | 
					from structs.trip import Trip
 | 
				
			||||||
from utils.landmarks_manager import LandmarkManager
 | 
					from utils.landmarks_manager import LandmarkManager
 | 
				
			||||||
from utils.optimizer import Optimizer
 | 
					from utils.optimizer import Optimizer
 | 
				
			||||||
from utils.refiner import Refiner
 | 
					from utils.refiner import Refiner
 | 
				
			||||||
 | 
					from persistence import client as cache_client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
logger = logging.getLogger(__name__)
 | 
					logger = logging.getLogger(__name__)
 | 
				
			||||||
@@ -17,8 +19,8 @@ optimizer = Optimizer()
 | 
				
			|||||||
refiner = Refiner(optimizer=optimizer)
 | 
					refiner = Refiner(optimizer=optimizer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.post("/route/new")
 | 
					@app.post("/trip/new")
 | 
				
			||||||
def get_route(preferences: Preferences, start: tuple[float, float], end: tuple[float, float] | None = None) -> str:
 | 
					def new_trip(preferences: Preferences, start: tuple[float, float], end: tuple[float, float] | None = None) -> Trip:
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    Main function to call the optimizer.
 | 
					    Main function to call the optimizer.
 | 
				
			||||||
    :param preferences: the preferences specified by the user as the post body
 | 
					    :param preferences: the preferences specified by the user as the post body
 | 
				
			||||||
@@ -47,22 +49,32 @@ def get_route(preferences: Preferences, start: tuple[float, float], end: tuple[f
 | 
				
			|||||||
    landmarks_short.insert(0, start_landmark)
 | 
					    landmarks_short.insert(0, start_landmark)
 | 
				
			||||||
    landmarks_short.append(end_landmark)
 | 
					    landmarks_short.append(end_landmark)
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    # TODO infer these parameters from the preferences
 | 
					 | 
				
			||||||
    max_walking_time = 4    # hours
 | 
					 | 
				
			||||||
    detour = 30             # minutes
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # First stage optimization
 | 
					    # First stage optimization
 | 
				
			||||||
    base_tour = optimizer.solve_optimization(max_walking_time*60, landmarks_short)
 | 
					    base_tour = optimizer.solve_optimization(preferences.max_time_minute, landmarks_short)
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    # Second stage optimization
 | 
					    # Second stage optimization
 | 
				
			||||||
    refined_tour = refiner.refine_optimization(landmarks, base_tour, max_walking_time*60, detour)
 | 
					    refined_tour = refiner.refine_optimization(landmarks, base_tour, preferences.max_time_minute, preferences.detour_tolerance_minute)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    linked_tour = LinkedLandmarks(refined_tour)
 | 
					    linked_tour = LinkedLandmarks(refined_tour)
 | 
				
			||||||
    return linked_tour[0].uuid
 | 
					    # upon creation of the trip, persistence of both the trip and its landmarks is ensured. Ca
 | 
				
			||||||
 | 
					    trip = Trip.from_linked_landmarks(linked_tour, cache_client)
 | 
				
			||||||
 | 
					    return trip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### For already existing trips/landmarks
 | 
				
			||||||
 | 
					@app.get("/trip/{trip_uuid}")
 | 
				
			||||||
 | 
					def get_trip(trip_uuid: str) -> Trip:
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        trip = cache_client.get(f"trip_{trip_uuid}")
 | 
				
			||||||
 | 
					        return trip
 | 
				
			||||||
 | 
					    except KeyError:
 | 
				
			||||||
 | 
					        raise HTTPException(status_code=404, detail="Trip not found")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.get("/landmark/{landmark_uuid}")
 | 
					@app.get("/landmark/{landmark_uuid}")
 | 
				
			||||||
def get_landmark(landmark_uuid: str) -> Landmark:
 | 
					def get_landmark(landmark_uuid: str) -> Landmark:
 | 
				
			||||||
    #cherche dans linked_tour et retourne le landmark correspondant
 | 
					    try:
 | 
				
			||||||
    pass
 | 
					        landmark = cache_client.get(f"landmark_{landmark_uuid}")
 | 
				
			||||||
 | 
					        return landmark
 | 
				
			||||||
 | 
					    except KeyError:
 | 
				
			||||||
 | 
					        raise HTTPException(status_code=404, detail="Landmark not found")
 | 
				
			||||||
							
								
								
									
										18
									
								
								backend/src/persistence.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								backend/src/persistence.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					from pymemcache.client.base import Client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import constants
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DummyClient:
 | 
				
			||||||
 | 
					    _data = {}
 | 
				
			||||||
 | 
					    def set(self, key, value, **kwargs):
 | 
				
			||||||
 | 
					        self._data[key] = value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get(self, key, **kwargs):
 | 
				
			||||||
 | 
					        return self._data[key]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if constants.MEMCACHED_HOST_PATH is None:
 | 
				
			||||||
 | 
					    client = DummyClient()
 | 
				
			||||||
 | 
					else:
 | 
				
			||||||
 | 
					    client = Client(constants.MEMCACHED_HOST_PATH, timeout=1)
 | 
				
			||||||
@@ -1,4 +1,3 @@
 | 
				
			|||||||
import uuid
 | 
					 | 
				
			||||||
from .landmark import Landmark
 | 
					from .landmark import Landmark
 | 
				
			||||||
from utils.get_time_separation import get_time
 | 
					from utils.get_time_separation import get_time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -9,8 +8,7 @@ class LinkedLandmarks:
 | 
				
			|||||||
    """
 | 
					    """
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    _landmarks = list[Landmark]
 | 
					    _landmarks = list[Landmark]
 | 
				
			||||||
    total_time = int
 | 
					    total_time: int = 0
 | 
				
			||||||
    uuid = str
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, data: list[Landmark] = None) -> None:
 | 
					    def __init__(self, data: list[Landmark] = None) -> None:
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
@@ -19,7 +17,6 @@ class LinkedLandmarks:
 | 
				
			|||||||
        Args:
 | 
					        Args:
 | 
				
			||||||
            data (list[Landmark], optional): The list of landmarks that are linked together. Defaults to None.
 | 
					            data (list[Landmark], optional): The list of landmarks that are linked together. Defaults to None.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        self.uuid = uuid.uuid4()
 | 
					 | 
				
			||||||
        self._landmarks = data if data else []
 | 
					        self._landmarks = data if data else []
 | 
				
			||||||
        self._link_landmarks()
 | 
					        self._link_landmarks()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,7 +25,6 @@ class LinkedLandmarks:
 | 
				
			|||||||
        """
 | 
					        """
 | 
				
			||||||
        Create the links between the landmarks in the list by setting their .next_uuid and the .time_to_next attributes.
 | 
					        Create the links between the landmarks in the list by setting their .next_uuid and the .time_to_next attributes.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        self.total_time = 0
 | 
					 | 
				
			||||||
        for i, landmark in enumerate(self._landmarks[:-1]):
 | 
					        for i, landmark in enumerate(self._landmarks[:-1]):
 | 
				
			||||||
            landmark.next_uuid = self._landmarks[i + 1].uuid
 | 
					            landmark.next_uuid = self._landmarks[i + 1].uuid
 | 
				
			||||||
            time_to_next = get_time(landmark.location, self._landmarks[i + 1].location)
 | 
					            time_to_next = get_time(landmark.location, self._landmarks[i + 1].location)
 | 
				
			||||||
@@ -44,18 +40,4 @@ class LinkedLandmarks:
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __str__(self) -> str:
 | 
					    def __str__(self) -> str:
 | 
				
			||||||
        return f"LinkedLandmarks, total time: {self.total_time} minutes, {len(self._landmarks)} stops: [{','.join([str(landmark) for landmark in self._landmarks])}]"
 | 
					        return f"LinkedLandmarks [{' ->'.join([str(landmark) for landmark in self._landmarks])}]"
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def asdict(self) -> dict:
 | 
					 | 
				
			||||||
        """
 | 
					 | 
				
			||||||
        Convert the linked landmarks to a json serializable dictionary.
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        Returns:
 | 
					 | 
				
			||||||
            dict: A dictionary representation of the linked landmarks.
 | 
					 | 
				
			||||||
        """
 | 
					 | 
				
			||||||
        return {
 | 
					 | 
				
			||||||
            'uuid': self.uuid,
 | 
					 | 
				
			||||||
            'total_time': self.total_time,
 | 
					 | 
				
			||||||
            'landmarks': [landmark.dict() for landmark in self._landmarks]
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,6 @@ from pydantic import BaseModel
 | 
				
			|||||||
from typing import Optional, Literal
 | 
					from typing import Optional, Literal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Preference(BaseModel) :
 | 
					class Preference(BaseModel) :
 | 
				
			||||||
    name: str
 | 
					 | 
				
			||||||
    type: Literal['sightseeing', 'nature', 'shopping', 'start', 'finish']
 | 
					    type: Literal['sightseeing', 'nature', 'shopping', 'start', 'finish']
 | 
				
			||||||
    score: int          # score could be from 1 to 5
 | 
					    score: int          # score could be from 1 to 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										28
									
								
								backend/src/structs/trip.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								backend/src/structs/trip.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					from pydantic import BaseModel, Field
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from .landmark import Landmark
 | 
				
			||||||
 | 
					from .linked_landmarks import LinkedLandmarks
 | 
				
			||||||
 | 
					import uuid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Trip(BaseModel):
 | 
				
			||||||
 | 
					    uuid: str = Field(default_factory=uuid.uuid4)
 | 
				
			||||||
 | 
					    total_time: int
 | 
				
			||||||
 | 
					    first_landmark_uuid: str
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @classmethod
 | 
				
			||||||
 | 
					    def from_linked_landmarks(self, landmarks: LinkedLandmarks, cache_client) -> "Trip":
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        Initialize a new Trip object and ensure it is stored in the cache.
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        trip = Trip(
 | 
				
			||||||
 | 
					            total_time = landmarks.total_time,
 | 
				
			||||||
 | 
					            first_landmark_uuid = str(landmarks[0].uuid)
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Store the trip in the cache
 | 
				
			||||||
 | 
					        cache_client.set(f"trip_{trip.uuid}", trip)
 | 
				
			||||||
 | 
					        for landmark in landmarks:
 | 
				
			||||||
 | 
					            cache_client.set(f"landmark_{landmark.uuid}", landmark)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return trip
 | 
				
			||||||
@@ -20,18 +20,9 @@ def test(start_coords: tuple[float, float], finish_coords: tuple[float, float] =
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    preferences = Preferences(
 | 
					    preferences = Preferences(
 | 
				
			||||||
                    sightseeing=Preference(
 | 
					        sightseeing=Preference(type='sightseeing', score = 5),
 | 
				
			||||||
                                  name='sightseeing', 
 | 
					        nature=Preference(type='nature', score = 5),
 | 
				
			||||||
                                  type='sightseeing',
 | 
					        shopping=Preference(type='shopping', score = 5),
 | 
				
			||||||
                                  score = 5),
 | 
					 | 
				
			||||||
                    nature=Preference(
 | 
					 | 
				
			||||||
                                  name='nature', 
 | 
					 | 
				
			||||||
                                  type='nature',
 | 
					 | 
				
			||||||
                                  score = 5),
 | 
					 | 
				
			||||||
                    shopping=Preference(
 | 
					 | 
				
			||||||
                                  name='shopping', 
 | 
					 | 
				
			||||||
                                  type='shopping',
 | 
					 | 
				
			||||||
                                  score = 5),
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        max_time_minute=180,
 | 
					        max_time_minute=180,
 | 
				
			||||||
        detour_tolerance_minute=30
 | 
					        detour_tolerance_minute=30
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,10 +15,6 @@ from .take_most_important import take_most_important
 | 
				
			|||||||
import constants
 | 
					import constants
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SIGHTSEEING = 'sightseeing'
 | 
					 | 
				
			||||||
NATURE = 'nature'
 | 
					 | 
				
			||||||
SHOPPING = 'shopping'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class LandmarkManager:
 | 
					class LandmarkManager:
 | 
				
			||||||
@@ -74,25 +70,25 @@ class LandmarkManager:
 | 
				
			|||||||
        # list for sightseeing
 | 
					        # list for sightseeing
 | 
				
			||||||
        if preferences.sightseeing.score != 0:
 | 
					        if preferences.sightseeing.score != 0:
 | 
				
			||||||
            score_function = lambda loc, n_tags: int((self.count_elements_close_to(loc) + ((n_tags**1.2)*self.tag_coeff) )*self.church_coeff)  
 | 
					            score_function = lambda loc, n_tags: int((self.count_elements_close_to(loc) + ((n_tags**1.2)*self.tag_coeff) )*self.church_coeff)  
 | 
				
			||||||
            L1 = self.fetch_landmarks(bbox, self.amenity_selectors['sightseeing'], SIGHTSEEING, score_function)
 | 
					            L1 = self.fetch_landmarks(bbox, self.amenity_selectors['sightseeing'], preferences.sightseeing.type, score_function)
 | 
				
			||||||
            self.correct_score(L1, preferences.sightseeing)
 | 
					 | 
				
			||||||
            L += L1
 | 
					            L += L1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # list for nature
 | 
					        # list for nature
 | 
				
			||||||
        if preferences.nature.score != 0:
 | 
					        if preferences.nature.score != 0:
 | 
				
			||||||
            score_function = lambda loc, n_tags: int((self.count_elements_close_to(loc) + ((n_tags**1.2)*self.tag_coeff) )*self.park_coeff)  
 | 
					            score_function = lambda loc, n_tags: int((self.count_elements_close_to(loc) + ((n_tags**1.2)*self.tag_coeff) )*self.park_coeff)  
 | 
				
			||||||
            L2 = self.fetch_landmarks(bbox, self.amenity_selectors['nature'], NATURE, score_function)
 | 
					            L2 = self.fetch_landmarks(bbox, self.amenity_selectors['nature'], preferences.nature.type, score_function)
 | 
				
			||||||
            self.correct_score(L2, preferences.nature)
 | 
					 | 
				
			||||||
            L += L2
 | 
					            L += L2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # list for shopping
 | 
					        # list for shopping
 | 
				
			||||||
        if preferences.shopping.score != 0:
 | 
					        if preferences.shopping.score != 0:
 | 
				
			||||||
            score_function = lambda loc, n_tags: int(self.count_elements_close_to(loc) + ((n_tags**1.2)*self.tag_coeff))
 | 
					            score_function = lambda loc, n_tags: int(self.count_elements_close_to(loc) + ((n_tags**1.2)*self.tag_coeff))
 | 
				
			||||||
            L3 = self.fetch_landmarks(bbox, self.amenity_selectors['shopping'], SHOPPING, score_function)
 | 
					            L3 = self.fetch_landmarks(bbox, self.amenity_selectors['shopping'], preferences.shopping.type, score_function)
 | 
				
			||||||
            self.correct_score(L3, preferences.shopping)
 | 
					 | 
				
			||||||
            L += L3
 | 
					            L += L3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        L = self.remove_duplicates(L)
 | 
					        L = self.remove_duplicates(L)
 | 
				
			||||||
 | 
					        self.correct_score(L, preferences)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        L_constrained = take_most_important(L, self.N_important)
 | 
					        L_constrained = take_most_important(L, self.N_important)
 | 
				
			||||||
        self.logger.info(f'Generated {len(L)} landmarks around {center_coordinates}, and constrained to {len(L_constrained)} most important ones.')
 | 
					        self.logger.info(f'Generated {len(L)} landmarks around {center_coordinates}, and constrained to {len(L_constrained)} most important ones.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -123,7 +119,7 @@ class LandmarkManager:
 | 
				
			|||||||
        return L_clean
 | 
					        return L_clean
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def correct_score(self, landmarks: list[Landmark], preference: Preference):
 | 
					    def correct_score(self, landmarks: list[Landmark], preferences: Preferences) -> None:
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        Adjust the attractiveness score of each landmark in the list based on user preferences.
 | 
					        Adjust the attractiveness score of each landmark in the list based on user preferences.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -132,20 +128,16 @@ class LandmarkManager:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        Args:
 | 
					        Args:
 | 
				
			||||||
            landmarks (list[Landmark]): A list of landmarks whose scores need to be corrected.
 | 
					            landmarks (list[Landmark]): A list of landmarks whose scores need to be corrected.
 | 
				
			||||||
            preference (Preference): The user's preference settings that influence the attractiveness score adjustment.
 | 
					            preferences (Preferences): The user's preference settings that influence the attractiveness score adjustment.
 | 
				
			||||||
 | 
					 | 
				
			||||||
        Raises:
 | 
					 | 
				
			||||||
            TypeError: If the type of any landmark in the list does not match the expected type in the preference.
 | 
					 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if len(landmarks) == 0:
 | 
					        score_dict = {
 | 
				
			||||||
            return
 | 
					            preferences.sightseeing.type: preferences.sightseeing.score,
 | 
				
			||||||
        
 | 
					            preferences.nature.type: preferences.nature.score,
 | 
				
			||||||
        if landmarks[0].type != preference.type:
 | 
					            preferences.shopping.type: preferences.shopping.score
 | 
				
			||||||
            raise TypeError(f"LandmarkType {preference.type} does not match the type of Landmark {landmarks[0].name}")
 | 
					        }
 | 
				
			||||||
 | 
					        for landmark in landmarks:
 | 
				
			||||||
        for elem in landmarks:
 | 
					            landmark.attractiveness = int(landmark.attractiveness * score_dict[landmark.type] / 5)        
 | 
				
			||||||
            elem.attractiveness = int(elem.attractiveness*preference.score/5)     # arbitrary computation
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def count_elements_close_to(self, coordinates: tuple[float, float]) -> int:
 | 
					    def count_elements_close_to(self, coordinates: tuple[float, float]) -> int:
 | 
				
			||||||
@@ -310,7 +302,7 @@ class LandmarkManager:
 | 
				
			|||||||
                        if "leisure" in tag and elem.tag('leisure') == "park":
 | 
					                        if "leisure" in tag and elem.tag('leisure') == "park":
 | 
				
			||||||
                            elem_type = "nature"
 | 
					                            elem_type = "nature"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if landmarktype != SHOPPING:
 | 
					                    if landmarktype != "shopping":
 | 
				
			||||||
                        if "shop" in tag:
 | 
					                        if "shop" in tag:
 | 
				
			||||||
                            skip = True
 | 
					                            skip = True
 | 
				
			||||||
                            break
 | 
					                            break
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,7 +42,7 @@ if (secretPropertiesFile.exists()) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
android {
 | 
					android {
 | 
				
			||||||
    namespace "com.example.fast_network_navigation"
 | 
					    namespace "com.anydev.anyway"
 | 
				
			||||||
    compileSdk flutter.compileSdkVersion
 | 
					    compileSdk flutter.compileSdkVersion
 | 
				
			||||||
    ndkVersion flutter.ndkVersion
 | 
					    ndkVersion flutter.ndkVersion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -61,7 +61,7 @@ android {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    defaultConfig {
 | 
					    defaultConfig {
 | 
				
			||||||
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
 | 
					        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
 | 
				
			||||||
        applicationId "com.example.fast_network_navigation"
 | 
					        applicationId "com.anydev.anyway"
 | 
				
			||||||
        // You can update the following values to match your application needs.
 | 
					        // You can update the following values to match your application needs.
 | 
				
			||||||
        // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
 | 
					        // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
 | 
				
			||||||
        // Minimum Android version for Google Maps SDK
 | 
					        // Minimum Android version for Google Maps SDK
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
    <uses-permission android:name="android.permission.INTERNET"/>
 | 
					    <uses-permission android:name="android.permission.INTERNET"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <application
 | 
					    <application
 | 
				
			||||||
        android:label="fast_network_navigation"
 | 
					        android:label="anyway"
 | 
				
			||||||
        android:name="${applicationName}"
 | 
					        android:name="${applicationName}"
 | 
				
			||||||
        android:icon="@mipmap/ic_launcher">
 | 
					        android:icon="@mipmap/ic_launcher">
 | 
				
			||||||
        <activity
 | 
					        <activity
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
package com.example.fast_network_navigation
 | 
					package com.anydev.anyway
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.flutter.embedding.android.FlutterActivity
 | 
					import io.flutter.embedding.android.FlutterActivity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@
 | 
				
			|||||||
	<key>CFBundleInfoDictionaryVersion</key>
 | 
						<key>CFBundleInfoDictionaryVersion</key>
 | 
				
			||||||
	<string>6.0</string>
 | 
						<string>6.0</string>
 | 
				
			||||||
	<key>CFBundleName</key>
 | 
						<key>CFBundleName</key>
 | 
				
			||||||
	<string>fast_network_navigation</string>
 | 
						<string>anyway</string>
 | 
				
			||||||
	<key>CFBundlePackageType</key>
 | 
						<key>CFBundlePackageType</key>
 | 
				
			||||||
	<string>APPL</string>
 | 
						<string>APPL</string>
 | 
				
			||||||
	<key>CFBundleShortVersionString</key>
 | 
						<key>CFBundleShortVersionString</key>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								frontend/lib/constants.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								frontend/lib/constants.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					const String APP_NAME = 'AnyWay';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const String API_URL_BASE = 'https://anyway.kluster.moll.re';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,12 +1,15 @@
 | 
				
			|||||||
import 'package:fast_network_navigation/modules/trips_overview.dart';
 | 
					 | 
				
			||||||
import 'package:fast_network_navigation/pages/new_trip.dart';
 | 
					 | 
				
			||||||
import 'package:fast_network_navigation/pages/tutorial.dart';
 | 
					 | 
				
			||||||
import 'package:fast_network_navigation/structs/trip.dart';
 | 
					 | 
				
			||||||
import 'package:fast_network_navigation/utils/load_trips.dart';
 | 
					 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'package:fast_network_navigation/pages/overview.dart';
 | 
					import 'package:anyway/constants.dart';
 | 
				
			||||||
import 'package:fast_network_navigation/pages/profile.dart';
 | 
					
 | 
				
			||||||
 | 
					import 'package:anyway/structs/trip.dart';
 | 
				
			||||||
 | 
					import 'package:anyway/modules/trips_overview.dart';
 | 
				
			||||||
 | 
					import 'package:anyway/utils/load_trips.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import 'package:anyway/pages/new_trip.dart';
 | 
				
			||||||
 | 
					import 'package:anyway/pages/tutorial.dart';
 | 
				
			||||||
 | 
					import 'package:anyway/pages/overview.dart';
 | 
				
			||||||
 | 
					import 'package:anyway/pages/profile.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// BasePage is the scaffold that holds all other pages
 | 
					// BasePage is the scaffold that holds all other pages
 | 
				
			||||||
// A side drawer is used to switch between pages
 | 
					// A side drawer is used to switch between pages
 | 
				
			||||||
@@ -43,7 +46,7 @@ class _BasePageState extends State<BasePage> {
 | 
				
			|||||||
    final ThemeData theme = Theme.of(context);
 | 
					    final ThemeData theme = Theme.of(context);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    return Scaffold(
 | 
					    return Scaffold(
 | 
				
			||||||
      appBar: AppBar(title: Text("City Nav")),
 | 
					      appBar: AppBar(title: Text(APP_NAME)),
 | 
				
			||||||
      body: Center(child: currentView),
 | 
					      body: Center(child: currentView),
 | 
				
			||||||
      drawer: Drawer(
 | 
					      drawer: Drawer(
 | 
				
			||||||
        child: Column(
 | 
					        child: Column(
 | 
				
			||||||
@@ -54,7 +57,7 @@ class _BasePageState extends State<BasePage> {
 | 
				
			|||||||
              ),
 | 
					              ),
 | 
				
			||||||
              child: Center(
 | 
					              child: Center(
 | 
				
			||||||
                child: Text(
 | 
					                child: Text(
 | 
				
			||||||
                  'City Nav',
 | 
					                  APP_NAME,
 | 
				
			||||||
                  style: TextStyle(
 | 
					                  style: TextStyle(
 | 
				
			||||||
                    color: Colors.white,
 | 
					                    color: Colors.white,
 | 
				
			||||||
                    fontSize: 24,
 | 
					                    fontSize: 24,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,17 +1,17 @@
 | 
				
			|||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:fast_network_navigation/layout.dart';
 | 
					import 'package:anyway/constants.dart';
 | 
				
			||||||
 | 
					import 'package:anyway/layout.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void main() => runApp(const App());
 | 
					void main() => runApp(const App());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class App extends StatelessWidget {
 | 
					class App extends StatelessWidget {
 | 
				
			||||||
  const App({super.key});
 | 
					  const App({super.key});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static const appTitle = 'City Nav';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  Widget build(BuildContext context) {
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
    return MaterialApp(
 | 
					    return MaterialApp(
 | 
				
			||||||
      title: appTitle,
 | 
					      title: APP_NAME,
 | 
				
			||||||
      home: BasePage(mainScreen: "map"),
 | 
					      home: BasePage(mainScreen: "map"),
 | 
				
			||||||
      theme: ThemeData(useMaterial3: true, colorSchemeSeed: Colors.green),
 | 
					      theme: ThemeData(useMaterial3: true, colorSchemeSeed: Colors.green),
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
import 'package:fast_network_navigation/structs/trip.dart';
 | 
					import 'package:anyway/structs/trip.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
import 'package:fast_network_navigation/structs/landmark.dart';
 | 
					import 'package:anyway/structs/landmark.dart';
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,9 @@
 | 
				
			|||||||
import 'dart:collection';
 | 
					import 'dart:collection';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'package:fast_network_navigation/modules/landmark_card.dart';
 | 
					import 'package:anyway/modules/landmark_card.dart';
 | 
				
			||||||
import 'package:fast_network_navigation/structs/landmark.dart';
 | 
					import 'package:anyway/structs/landmark.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'package:fast_network_navigation/structs/trip.dart';
 | 
					import 'package:anyway/structs/trip.dart';
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:shared_preferences/shared_preferences.dart';
 | 
					import 'package:shared_preferences/shared_preferences.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -71,8 +71,34 @@ class _LandmarksOverviewState extends State<LandmarksOverview> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Widget landmarksWithSteps(LinkedList<Landmark> landmarks) {
 | 
					Widget landmarksWithSteps(LinkedList<Landmark> landmarks) {
 | 
				
			||||||
  List<Widget> children = [];
 | 
					  List<Widget> children = [];
 | 
				
			||||||
 | 
					  int lkey = 0;
 | 
				
			||||||
  for (Landmark landmark in landmarks) {
 | 
					  for (Landmark landmark in landmarks) {
 | 
				
			||||||
    children.add(LandmarkCard(landmark));
 | 
					    children.add(
 | 
				
			||||||
 | 
					      Dismissible(
 | 
				
			||||||
 | 
					        key: ValueKey<int>(lkey),
 | 
				
			||||||
 | 
					        child: LandmarkCard(landmark),
 | 
				
			||||||
 | 
					        // onDismissed: (direction) {
 | 
				
			||||||
 | 
					        //   // Remove the item from the data source.
 | 
				
			||||||
 | 
					        //   setState(() {
 | 
				
			||||||
 | 
					        //     landmarks.remove(landmark);
 | 
				
			||||||
 | 
					        //   });
 | 
				
			||||||
 | 
					        //   // Then show a snackbar.
 | 
				
			||||||
 | 
					        //   ScaffoldMessenger.of(context)
 | 
				
			||||||
 | 
					        //       .showSnackBar(SnackBar(content: Text("${landmark.name} dismissed")));
 | 
				
			||||||
 | 
					        // },
 | 
				
			||||||
 | 
					        background: Container(color: Colors.red),
 | 
				
			||||||
 | 
					        secondaryBackground: Container(
 | 
				
			||||||
 | 
					          color: Colors.red,
 | 
				
			||||||
 | 
					          child: Icon(
 | 
				
			||||||
 | 
					            Icons.delete,
 | 
				
			||||||
 | 
					            color: Colors.white,
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					          padding: EdgeInsets.all(15),
 | 
				
			||||||
 | 
					          alignment: Alignment.centerRight,
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					      )
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    lkey++;
 | 
				
			||||||
    if (landmark.next != null) {
 | 
					    if (landmark.next != null) {
 | 
				
			||||||
      Widget step = stepBetweenLandmarks(landmark, landmark.next!);
 | 
					      Widget step = stepBetweenLandmarks(landmark, landmark.next!);
 | 
				
			||||||
      children.add(step);
 | 
					      children.add(step);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,10 @@
 | 
				
			|||||||
import 'dart:collection';
 | 
					import 'dart:collection';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'package:fast_network_navigation/structs/landmark.dart';
 | 
					 | 
				
			||||||
import 'package:fast_network_navigation/structs/trip.dart';
 | 
					 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					import 'package:anyway/structs/landmark.dart';
 | 
				
			||||||
 | 
					import 'package:anyway/structs/trip.dart';
 | 
				
			||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
 | 
					import 'package:google_maps_flutter/google_maps_flutter.dart';
 | 
				
			||||||
 | 
					import 'package:the_widget_marker/the_widget_marker.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class MapWidget extends StatefulWidget {
 | 
					class MapWidget extends StatefulWidget {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -25,6 +26,7 @@ class _MapWidgetState extends State<MapWidget> {
 | 
				
			|||||||
    zoom: 11.0,
 | 
					    zoom: 11.0,
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
  Set<Marker> markers = <Marker>{};
 | 
					  Set<Marker> markers = <Marker>{};
 | 
				
			||||||
 | 
					  final GlobalKey globalKey = GlobalKey();
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void _onMapCreated(GoogleMapController controller) async {
 | 
					  void _onMapCreated(GoogleMapController controller) async {
 | 
				
			||||||
@@ -49,28 +51,81 @@ class _MapWidgetState extends State<MapWidget> {
 | 
				
			|||||||
    Trip? trip = await widget.trip;
 | 
					    Trip? trip = await widget.trip;
 | 
				
			||||||
    LinkedList<Landmark>? landmarks = trip?.landmarks;
 | 
					    LinkedList<Landmark>? landmarks = trip?.landmarks;
 | 
				
			||||||
    if (landmarks != null){
 | 
					    if (landmarks != null){
 | 
				
			||||||
      setState(() {
 | 
					 | 
				
			||||||
      for (Landmark landmark in landmarks) {
 | 
					      for (Landmark landmark in landmarks) {
 | 
				
			||||||
        markers.add(Marker(
 | 
					        markers.add(Marker(
 | 
				
			||||||
          markerId: MarkerId(landmark.name),
 | 
					          markerId: MarkerId(landmark.name),
 | 
				
			||||||
          position: LatLng(landmark.location[0], landmark.location[1]),
 | 
					          position: LatLng(landmark.location[0], landmark.location[1]),
 | 
				
			||||||
            infoWindow: InfoWindow(title: landmark.name, snippet: landmark.type.name),
 | 
					          // infoWindow: InfoWindow(title: landmark.name, snippet: landmark.type.name),
 | 
				
			||||||
 | 
					          icon: await MarkerIcon.widgetToIcon(globalKey),
 | 
				
			||||||
        ));
 | 
					        ));
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      });
 | 
					      setState(() {});
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  Widget build(BuildContext context) {
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
    return GoogleMap(
 | 
					    return Stack(
 | 
				
			||||||
 | 
					      children: [
 | 
				
			||||||
 | 
					        MyMarker(globalKey),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        GoogleMap(
 | 
				
			||||||
              onMapCreated: _onMapCreated,
 | 
					              onMapCreated: _onMapCreated,
 | 
				
			||||||
              initialCameraPosition: _cameraPosition,
 | 
					              initialCameraPosition: _cameraPosition,
 | 
				
			||||||
              onCameraIdle: _onCameraIdle,
 | 
					              onCameraIdle: _onCameraIdle,
 | 
				
			||||||
              // onLongPress: ,
 | 
					              // onLongPress: ,
 | 
				
			||||||
              markers: markers,
 | 
					              markers: markers,
 | 
				
			||||||
              cloudMapId: '41c21ac9b81dbfd8',
 | 
					              cloudMapId: '41c21ac9b81dbfd8',
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class MyMarker extends StatelessWidget {
 | 
				
			||||||
 | 
					  // declare a global key and get it trough Constructor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  MyMarker(this.globalKeyMyWidget);
 | 
				
			||||||
 | 
					  final GlobalKey globalKeyMyWidget;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
 | 
					    // This returns an outlined circle, with an icon corresponding to the landmark type
 | 
				
			||||||
 | 
					    // As a small dot, the number of the landmark is displayed in the top right
 | 
				
			||||||
 | 
					    return RepaintBoundary(
 | 
				
			||||||
 | 
					      key: globalKeyMyWidget,
 | 
				
			||||||
 | 
					      child: Stack(
 | 
				
			||||||
 | 
					        children: [
 | 
				
			||||||
 | 
					          Container(
 | 
				
			||||||
 | 
					            width: 75,
 | 
				
			||||||
 | 
					            height: 75,
 | 
				
			||||||
 | 
					            decoration: BoxDecoration(
 | 
				
			||||||
 | 
					              gradient: LinearGradient(
 | 
				
			||||||
 | 
					                begin: Alignment.topLeft,
 | 
				
			||||||
 | 
					                end: Alignment.bottomRight,
 | 
				
			||||||
 | 
					                colors: [Colors.red, Colors.yellow]
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					              shape: BoxShape.circle,
 | 
				
			||||||
 | 
					              border: Border.all(color: Colors.black, width: 5),
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					            child: Icon(Icons.location_on, color: Colors.black, size: 50),
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					          Positioned(
 | 
				
			||||||
 | 
					            top: 0,
 | 
				
			||||||
 | 
					            right: 0,
 | 
				
			||||||
 | 
					            child: Container(
 | 
				
			||||||
 | 
					              padding: EdgeInsets.all(5),
 | 
				
			||||||
 | 
					              decoration: BoxDecoration(
 | 
				
			||||||
 | 
					                color: Theme.of(context).primaryColor,
 | 
				
			||||||
 | 
					                shape: BoxShape.circle,
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					              child: Text('1', style: TextStyle(color: Colors.white, fontSize: 20)),
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'package:fast_network_navigation/layout.dart';
 | 
					import 'package:anyway/layout.dart';
 | 
				
			||||||
import 'package:fast_network_navigation/structs/trip.dart';
 | 
					import 'package:anyway/structs/trip.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TripsOverview extends StatefulWidget {
 | 
					class TripsOverview extends StatefulWidget {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					import 'package:anyway/layout.dart';
 | 
				
			||||||
 | 
					import 'package:anyway/structs/preferences.dart';
 | 
				
			||||||
 | 
					import 'package:anyway/utils/fetch_trip.dart';
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					import "package:anyway/structs/trip.dart";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class NewTripPage extends StatefulWidget {
 | 
					class NewTripPage extends StatefulWidget {
 | 
				
			||||||
  const NewTripPage({Key? key}) : super(key: key);
 | 
					  const NewTripPage({Key? key}) : super(key: key);
 | 
				
			||||||
@@ -9,22 +15,71 @@ class NewTripPage extends StatefulWidget {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class _NewTripPageState extends State<NewTripPage> {
 | 
					class _NewTripPageState extends State<NewTripPage> {
 | 
				
			||||||
 | 
					  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
 | 
				
			||||||
 | 
					  final TextEditingController latController = TextEditingController();
 | 
				
			||||||
 | 
					  final TextEditingController lonController = TextEditingController();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  Widget build(BuildContext context) {
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
    return Scaffold(
 | 
					    return Scaffold(
 | 
				
			||||||
      appBar: AppBar(
 | 
					      appBar: AppBar(
 | 
				
			||||||
        title: const Text('New Trip'),
 | 
					        title: const Text('New Trip'),
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
      body: Center(
 | 
					      body: Form(
 | 
				
			||||||
 | 
					        key: _formKey,
 | 
				
			||||||
 | 
					        child: 
 | 
				
			||||||
 | 
					          Padding(
 | 
				
			||||||
 | 
					            padding: const EdgeInsets.all(15.0),
 | 
				
			||||||
            child: Column(
 | 
					            child: Column(
 | 
				
			||||||
          mainAxisAlignment: MainAxisAlignment.center,
 | 
					              crossAxisAlignment: CrossAxisAlignment.start,
 | 
				
			||||||
 | 
					              
 | 
				
			||||||
              children: <Widget>[
 | 
					              children: <Widget>[
 | 
				
			||||||
            const Text(
 | 
					                TextFormField(
 | 
				
			||||||
              'Create a new trip',
 | 
					                  decoration: const InputDecoration(hintText: 'Lat'),
 | 
				
			||||||
 | 
					                  controller: latController,
 | 
				
			||||||
 | 
					                  validator: (String? value) {
 | 
				
			||||||
 | 
					                    if (value == null || value.isEmpty || double.tryParse(value) == null){
 | 
				
			||||||
 | 
					                      return 'Please enter a floating point number';
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    return null;
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					                TextFormField(
 | 
				
			||||||
 | 
					                  decoration: const InputDecoration(hintText: 'Lon'),
 | 
				
			||||||
 | 
					                  controller: lonController,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  validator: (String? value) {
 | 
				
			||||||
 | 
					                    if (value == null || value.isEmpty || double.tryParse(value) == null){
 | 
				
			||||||
 | 
					                      return 'Please enter a floating point number';
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    return null;
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					                Divider(height: 15, color: Colors.transparent),
 | 
				
			||||||
 | 
					                ElevatedButton(
 | 
				
			||||||
 | 
					                  onPressed: () {
 | 
				
			||||||
 | 
					                    if (_formKey.currentState!.validate()) {
 | 
				
			||||||
 | 
					                      List<double> startPoint = [
 | 
				
			||||||
 | 
					                        double.parse(latController.text),
 | 
				
			||||||
 | 
					                        double.parse(lonController.text)
 | 
				
			||||||
 | 
					                      ];
 | 
				
			||||||
 | 
					                      UserPreferences preferences = UserPreferences();
 | 
				
			||||||
 | 
					                      preferences.load();
 | 
				
			||||||
 | 
					                      Future<Trip> trip = fetchTrip(startPoint, preferences);
 | 
				
			||||||
 | 
					                        Navigator.of(context).push(
 | 
				
			||||||
 | 
					                          MaterialPageRoute(
 | 
				
			||||||
 | 
					                            builder: (context) => BasePage(mainScreen: "map", trip: trip)
 | 
				
			||||||
 | 
					                          )
 | 
				
			||||||
 | 
					                        );
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                  child: const Text('Create trip'),
 | 
				
			||||||
                ),
 | 
					                ),
 | 
				
			||||||
              ],
 | 
					              ],
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
      ),
 | 
					          )
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					      )
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,11 +1,11 @@
 | 
				
			|||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:sliding_up_panel/sliding_up_panel.dart';
 | 
					import 'package:sliding_up_panel/sliding_up_panel.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'package:fast_network_navigation/structs/trip.dart';
 | 
					import 'package:anyway/structs/trip.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'package:fast_network_navigation/modules/landmarks_overview.dart';
 | 
					import 'package:anyway/modules/landmarks_overview.dart';
 | 
				
			||||||
import 'package:fast_network_navigation/modules/map.dart';
 | 
					import 'package:anyway/modules/map.dart';
 | 
				
			||||||
import 'package:fast_network_navigation/modules/greeter.dart';
 | 
					import 'package:anyway/modules/greeter.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
import 'package:fast_network_navigation/structs/preferences.dart';
 | 
					import 'package:anyway/structs/preferences.dart';
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
// import "package:fast_network_navigation/structs/landmark.dart";
 | 
					// import "package:anyway/structs/landmark.dart";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// class Linked<Landmark> {
 | 
					// class Linked<Landmark> {
 | 
				
			||||||
//   Landmark? head;
 | 
					//   Landmark? head;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,14 +0,0 @@
 | 
				
			|||||||
import "package:fast_network_navigation/structs/landmark.dart";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class Route {
 | 
					 | 
				
			||||||
  final String name;
 | 
					 | 
				
			||||||
  final Duration duration;
 | 
					 | 
				
			||||||
  final List<Landmark> landmarks;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  Route({
 | 
					 | 
				
			||||||
    required this.name,
 | 
					 | 
				
			||||||
    required this.duration,
 | 
					 | 
				
			||||||
    required this.landmarks
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
import 'dart:collection';
 | 
					import 'dart:collection';
 | 
				
			||||||
import 'dart:convert';
 | 
					import 'dart:convert';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'package:fast_network_navigation/structs/landmark.dart';
 | 
					import 'package:anyway/structs/landmark.dart';
 | 
				
			||||||
import 'package:shared_preferences/shared_preferences.dart';
 | 
					import 'package:shared_preferences/shared_preferences.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Trip {
 | 
					class Trip {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,52 +0,0 @@
 | 
				
			|||||||
// import "package:fast_network_navigation/structs/landmark.dart";
 | 
					 | 
				
			||||||
// import 'package:http/http.dart' as http;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Future<List<Landmark>> fetchLandmarks() async {
 | 
					 | 
				
			||||||
//   // final response = await http
 | 
					 | 
				
			||||||
//   //     .get(Uri.parse('https://nav.kluster.moll.re/v1/destination/1'));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//   // if (response.statusCode == 200) {
 | 
					 | 
				
			||||||
//     // If the server did return a 200 OK response,
 | 
					 | 
				
			||||||
//     // then parse the JSON.
 | 
					 | 
				
			||||||
//     List<Landmark> landmarks = [
 | 
					 | 
				
			||||||
//       // 48°51′29.6″N 2°17′40.2″E
 | 
					 | 
				
			||||||
//       Landmark(
 | 
					 | 
				
			||||||
//         name: "Eiffel Tower",
 | 
					 | 
				
			||||||
//         location: [48.51296, 2.17402],
 | 
					 | 
				
			||||||
//         type: LandmarkType(name: "Tower"),
 | 
					 | 
				
			||||||
//         imageURL: "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Tour_Eiffel_Wikimedia_Commons.jpg/1037px-Tour_Eiffel_Wikimedia_Commons.jpg"
 | 
					 | 
				
			||||||
//         ),
 | 
					 | 
				
			||||||
//       Landmark(
 | 
					 | 
				
			||||||
//         name: "Notre Dame Cathedral",
 | 
					 | 
				
			||||||
//         location: [48.8530, 2.3498],
 | 
					 | 
				
			||||||
//         type: LandmarkType(name: "Monument"),
 | 
					 | 
				
			||||||
//         imageURL: "https://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/Notre-Dame_de_Paris%2C_4_October_2017.jpg/440px-Notre-Dame_de_Paris%2C_4_October_2017.jpg"
 | 
					 | 
				
			||||||
//         ),
 | 
					 | 
				
			||||||
//       Landmark(
 | 
					 | 
				
			||||||
//         name: "Louvre palace",
 | 
					 | 
				
			||||||
//         location: [48.8606, 2.3376],
 | 
					 | 
				
			||||||
//         type: LandmarkType(name: "Museum"),
 | 
					 | 
				
			||||||
//         imageURL: "https://upload.wikimedia.org/wikipedia/commons/thumb/6/66/Louvre_Museum_Wikimedia_Commons.jpg/540px-Louvre_Museum_Wikimedia_Commons.jpg"
 | 
					 | 
				
			||||||
//         ),
 | 
					 | 
				
			||||||
//       Landmark(
 | 
					 | 
				
			||||||
//         name: "Pont-des-arts",
 | 
					 | 
				
			||||||
//         location: [48.5130, 2.2015],
 | 
					 | 
				
			||||||
//         type: LandmarkType(name: "Bridge"),
 | 
					 | 
				
			||||||
//         imageURL: "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/Pont_des_Arts%2C_6e_Arrondissement%2C_Paris_%28HDR%29_20140320_1.jpg/560px-Pont_des_Arts%2C_6e_Arrondissement%2C_Paris_%28HDR%29_20140320_1.jpg"),
 | 
					 | 
				
			||||||
//       Landmark(
 | 
					 | 
				
			||||||
//         name: "Panthéon",
 | 
					 | 
				
			||||||
//         location: [48.5046, 2.2046],
 | 
					 | 
				
			||||||
//         type: LandmarkType(name: "Monument"),
 | 
					 | 
				
			||||||
//         imageURL: "https://upload.wikimedia.org/wikipedia/commons/thumb/8/80/Pantheon_of_Paris_007.JPG/1280px-Pantheon_of_Paris_007.JPG"
 | 
					 | 
				
			||||||
//         ),
 | 
					 | 
				
			||||||
//     ];
 | 
					 | 
				
			||||||
//     // sleep 10 seconds
 | 
					 | 
				
			||||||
//     await Future.delayed(Duration(seconds: 5));
 | 
					 | 
				
			||||||
//     return landmarks;
 | 
					 | 
				
			||||||
//   // } else {
 | 
					 | 
				
			||||||
//   //   // If the server did not return a 200 OK response,
 | 
					 | 
				
			||||||
//   //   // then throw an exception.
 | 
					 | 
				
			||||||
//   //   throw Exception('Failed to load destination');
 | 
					 | 
				
			||||||
//   // }
 | 
					 | 
				
			||||||
// }
 | 
					 | 
				
			||||||
							
								
								
									
										45
									
								
								frontend/lib/utils/fetch_trip.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								frontend/lib/utils/fetch_trip.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					import 'package:dio/dio.dart';
 | 
				
			||||||
 | 
					import 'package:anyway/constants.dart';
 | 
				
			||||||
 | 
					import "package:anyway/structs/landmark.dart";
 | 
				
			||||||
 | 
					import "package:anyway/structs/trip.dart";
 | 
				
			||||||
 | 
					import "package:anyway/structs/preferences.dart";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "package:anyway/structs/linked_landmarks.dart";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Dio dio = Dio(
 | 
				
			||||||
 | 
					    BaseOptions(
 | 
				
			||||||
 | 
					      baseUrl: API_URL_BASE,
 | 
				
			||||||
 | 
					      connectTimeout: const Duration(seconds: 5),
 | 
				
			||||||
 | 
					      receiveTimeout: const Duration(seconds: 60),
 | 
				
			||||||
 | 
					      // api is notoriously slow
 | 
				
			||||||
 | 
					      // headers: {
 | 
				
			||||||
 | 
					      //   HttpHeaders.userAgentHeader: 'dio',
 | 
				
			||||||
 | 
					      //   'api': '1.0.0',
 | 
				
			||||||
 | 
					      // },
 | 
				
			||||||
 | 
					      contentType: Headers.jsonContentType,
 | 
				
			||||||
 | 
					      responseType: ResponseType.json,
 | 
				
			||||||
 | 
					  ),
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Future<Trip> fetchTrip(
 | 
				
			||||||
 | 
					  List<double> startPoint,
 | 
				
			||||||
 | 
					  UserPreferences preferences,
 | 
				
			||||||
 | 
					) async {
 | 
				
			||||||
 | 
					  final response = await dio.post(
 | 
				
			||||||
 | 
					    "/trip/new",
 | 
				
			||||||
 | 
					    data: {
 | 
				
			||||||
 | 
					      // 'preferences': preferences.toJson(),
 | 
				
			||||||
 | 
					      'start': [48,2.3]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // handle errors
 | 
				
			||||||
 | 
					  if (response.statusCode != 200) {
 | 
				
			||||||
 | 
					    throw Exception('Failed to load trip');
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (response.data["error"] != null) {
 | 
				
			||||||
 | 
					    throw Exception(response.data["error"]);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return Trip.fromJson(response.data);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
import 'dart:collection';
 | 
					import 'dart:collection';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'package:fast_network_navigation/structs/trip.dart';
 | 
					import 'package:anyway/structs/trip.dart';
 | 
				
			||||||
import 'package:fast_network_navigation/structs/landmark.dart';
 | 
					import 'package:anyway/structs/landmark.dart';
 | 
				
			||||||
import 'package:shared_preferences/shared_preferences.dart';
 | 
					import 'package:shared_preferences/shared_preferences.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Future<List<Trip>> loadTrips() async {
 | 
					Future<List<Trip>> loadTrips() async {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,10 +4,10 @@ project(runner LANGUAGES CXX)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# The name of the executable created for the application. Change this to change
 | 
					# The name of the executable created for the application. Change this to change
 | 
				
			||||||
# the on-disk name of your application.
 | 
					# the on-disk name of your application.
 | 
				
			||||||
set(BINARY_NAME "fast_network_navigation")
 | 
					set(BINARY_NAME "anyway")
 | 
				
			||||||
# The unique GTK application identifier for this application. See:
 | 
					# The unique GTK application identifier for this application. See:
 | 
				
			||||||
# https://wiki.gnome.org/HowDoI/ChooseApplicationID
 | 
					# https://wiki.gnome.org/HowDoI/ChooseApplicationID
 | 
				
			||||||
set(APPLICATION_ID "com.example.fast_network_navigation")
 | 
					set(APPLICATION_ID "com.example.anyway")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
 | 
					# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
 | 
				
			||||||
# versions of CMake.
 | 
					# versions of CMake.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,11 +40,11 @@ static void my_application_activate(GApplication* application) {
 | 
				
			|||||||
  if (use_header_bar) {
 | 
					  if (use_header_bar) {
 | 
				
			||||||
    GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
 | 
					    GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
 | 
				
			||||||
    gtk_widget_show(GTK_WIDGET(header_bar));
 | 
					    gtk_widget_show(GTK_WIDGET(header_bar));
 | 
				
			||||||
    gtk_header_bar_set_title(header_bar, "fast_network_navigation");
 | 
					    gtk_header_bar_set_title(header_bar, "anyway");
 | 
				
			||||||
    gtk_header_bar_set_show_close_button(header_bar, TRUE);
 | 
					    gtk_header_bar_set_show_close_button(header_bar, TRUE);
 | 
				
			||||||
    gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
 | 
					    gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    gtk_window_set_title(window, "fast_network_navigation");
 | 
					    gtk_window_set_title(window, "anyway");
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  gtk_window_set_default_size(window, 1280, 720);
 | 
					  gtk_window_set_default_size(window, 1280, 720);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,8 +5,12 @@
 | 
				
			|||||||
import FlutterMacOS
 | 
					import FlutterMacOS
 | 
				
			||||||
import Foundation
 | 
					import Foundation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import path_provider_foundation
 | 
				
			||||||
import shared_preferences_foundation
 | 
					import shared_preferences_foundation
 | 
				
			||||||
 | 
					import sqflite
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
 | 
					func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
 | 
				
			||||||
 | 
					  PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
 | 
				
			||||||
  SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
 | 
					  SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
 | 
				
			||||||
 | 
					  SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,7 +64,7 @@
 | 
				
			|||||||
		331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
 | 
							331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
 | 
				
			||||||
		333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
 | 
							333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
 | 
				
			||||||
		335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
 | 
							335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
 | 
				
			||||||
		33CC10ED2044A3C60003C045 /* fast_network_navigation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "fast_network_navigation.app"; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
							33CC10ED2044A3C60003C045 /* anyway.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "anyway.app"; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
				
			||||||
		33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
 | 
							33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
 | 
				
			||||||
		33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
 | 
							33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
 | 
				
			||||||
		33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
 | 
							33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
 | 
				
			||||||
@@ -131,7 +131,7 @@
 | 
				
			|||||||
		33CC10EE2044A3C60003C045 /* Products */ = {
 | 
							33CC10EE2044A3C60003C045 /* Products */ = {
 | 
				
			||||||
			isa = PBXGroup;
 | 
								isa = PBXGroup;
 | 
				
			||||||
			children = (
 | 
								children = (
 | 
				
			||||||
				33CC10ED2044A3C60003C045 /* fast_network_navigation.app */,
 | 
									33CC10ED2044A3C60003C045 /* anyway.app */,
 | 
				
			||||||
				331C80D5294CF71000263BE5 /* RunnerTests.xctest */,
 | 
									331C80D5294CF71000263BE5 /* RunnerTests.xctest */,
 | 
				
			||||||
			);
 | 
								);
 | 
				
			||||||
			name = Products;
 | 
								name = Products;
 | 
				
			||||||
@@ -217,7 +217,7 @@
 | 
				
			|||||||
			);
 | 
								);
 | 
				
			||||||
			name = Runner;
 | 
								name = Runner;
 | 
				
			||||||
			productName = Runner;
 | 
								productName = Runner;
 | 
				
			||||||
			productReference = 33CC10ED2044A3C60003C045 /* fast_network_navigation.app */;
 | 
								productReference = 33CC10ED2044A3C60003C045 /* anyway.app */;
 | 
				
			||||||
			productType = "com.apple.product-type.application";
 | 
								productType = "com.apple.product-type.application";
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
/* End PBXNativeTarget section */
 | 
					/* End PBXNativeTarget section */
 | 
				
			||||||
@@ -388,7 +388,7 @@
 | 
				
			|||||||
				PRODUCT_BUNDLE_IDENTIFIER = com.example.fastNetworkNavigation.RunnerTests;
 | 
									PRODUCT_BUNDLE_IDENTIFIER = com.example.fastNetworkNavigation.RunnerTests;
 | 
				
			||||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
									PRODUCT_NAME = "$(TARGET_NAME)";
 | 
				
			||||||
				SWIFT_VERSION = 5.0;
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/fast_network_navigation.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/fast_network_navigation";
 | 
									TEST_HOST = "$(BUILT_PRODUCTS_DIR)/anyway.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/anyway";
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			name = Debug;
 | 
								name = Debug;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
@@ -402,7 +402,7 @@
 | 
				
			|||||||
				PRODUCT_BUNDLE_IDENTIFIER = com.example.fastNetworkNavigation.RunnerTests;
 | 
									PRODUCT_BUNDLE_IDENTIFIER = com.example.fastNetworkNavigation.RunnerTests;
 | 
				
			||||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
									PRODUCT_NAME = "$(TARGET_NAME)";
 | 
				
			||||||
				SWIFT_VERSION = 5.0;
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/fast_network_navigation.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/fast_network_navigation";
 | 
									TEST_HOST = "$(BUILT_PRODUCTS_DIR)/anyway.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/anyway";
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			name = Release;
 | 
								name = Release;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
@@ -416,7 +416,7 @@
 | 
				
			|||||||
				PRODUCT_BUNDLE_IDENTIFIER = com.example.fastNetworkNavigation.RunnerTests;
 | 
									PRODUCT_BUNDLE_IDENTIFIER = com.example.fastNetworkNavigation.RunnerTests;
 | 
				
			||||||
				PRODUCT_NAME = "$(TARGET_NAME)";
 | 
									PRODUCT_NAME = "$(TARGET_NAME)";
 | 
				
			||||||
				SWIFT_VERSION = 5.0;
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/fast_network_navigation.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/fast_network_navigation";
 | 
									TEST_HOST = "$(BUILT_PRODUCTS_DIR)/anyway.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/anyway";
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			name = Profile;
 | 
								name = Profile;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@
 | 
				
			|||||||
            <BuildableReference
 | 
					            <BuildableReference
 | 
				
			||||||
               BuildableIdentifier = "primary"
 | 
					               BuildableIdentifier = "primary"
 | 
				
			||||||
               BlueprintIdentifier = "33CC10EC2044A3C60003C045"
 | 
					               BlueprintIdentifier = "33CC10EC2044A3C60003C045"
 | 
				
			||||||
               BuildableName = "fast_network_navigation.app"
 | 
					               BuildableName = "anyway.app"
 | 
				
			||||||
               BlueprintName = "Runner"
 | 
					               BlueprintName = "Runner"
 | 
				
			||||||
               ReferencedContainer = "container:Runner.xcodeproj">
 | 
					               ReferencedContainer = "container:Runner.xcodeproj">
 | 
				
			||||||
            </BuildableReference>
 | 
					            </BuildableReference>
 | 
				
			||||||
@@ -31,7 +31,7 @@
 | 
				
			|||||||
         <BuildableReference
 | 
					         <BuildableReference
 | 
				
			||||||
            BuildableIdentifier = "primary"
 | 
					            BuildableIdentifier = "primary"
 | 
				
			||||||
            BlueprintIdentifier = "33CC10EC2044A3C60003C045"
 | 
					            BlueprintIdentifier = "33CC10EC2044A3C60003C045"
 | 
				
			||||||
            BuildableName = "fast_network_navigation.app"
 | 
					            BuildableName = "anyway.app"
 | 
				
			||||||
            BlueprintName = "Runner"
 | 
					            BlueprintName = "Runner"
 | 
				
			||||||
            ReferencedContainer = "container:Runner.xcodeproj">
 | 
					            ReferencedContainer = "container:Runner.xcodeproj">
 | 
				
			||||||
         </BuildableReference>
 | 
					         </BuildableReference>
 | 
				
			||||||
@@ -65,7 +65,7 @@
 | 
				
			|||||||
         <BuildableReference
 | 
					         <BuildableReference
 | 
				
			||||||
            BuildableIdentifier = "primary"
 | 
					            BuildableIdentifier = "primary"
 | 
				
			||||||
            BlueprintIdentifier = "33CC10EC2044A3C60003C045"
 | 
					            BlueprintIdentifier = "33CC10EC2044A3C60003C045"
 | 
				
			||||||
            BuildableName = "fast_network_navigation.app"
 | 
					            BuildableName = "anyway.app"
 | 
				
			||||||
            BlueprintName = "Runner"
 | 
					            BlueprintName = "Runner"
 | 
				
			||||||
            ReferencedContainer = "container:Runner.xcodeproj">
 | 
					            ReferencedContainer = "container:Runner.xcodeproj">
 | 
				
			||||||
         </BuildableReference>
 | 
					         </BuildableReference>
 | 
				
			||||||
@@ -82,7 +82,7 @@
 | 
				
			|||||||
         <BuildableReference
 | 
					         <BuildableReference
 | 
				
			||||||
            BuildableIdentifier = "primary"
 | 
					            BuildableIdentifier = "primary"
 | 
				
			||||||
            BlueprintIdentifier = "33CC10EC2044A3C60003C045"
 | 
					            BlueprintIdentifier = "33CC10EC2044A3C60003C045"
 | 
				
			||||||
            BuildableName = "fast_network_navigation.app"
 | 
					            BuildableName = "anyway.app"
 | 
				
			||||||
            BlueprintName = "Runner"
 | 
					            BlueprintName = "Runner"
 | 
				
			||||||
            ReferencedContainer = "container:Runner.xcodeproj">
 | 
					            ReferencedContainer = "container:Runner.xcodeproj">
 | 
				
			||||||
         </BuildableReference>
 | 
					         </BuildableReference>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
// 'flutter create' template.
 | 
					// 'flutter create' template.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// The application's name. By default this is also the title of the Flutter window.
 | 
					// The application's name. By default this is also the title of the Flutter window.
 | 
				
			||||||
PRODUCT_NAME = fast_network_navigation
 | 
					PRODUCT_NAME = anyway
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// The application's bundle identifier
 | 
					// The application's bundle identifier
 | 
				
			||||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.fastNetworkNavigation
 | 
					PRODUCT_BUNDLE_IDENTIFIER = com.example.fastNetworkNavigation
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,14 @@
 | 
				
			|||||||
# Generated by pub
 | 
					# Generated by pub
 | 
				
			||||||
# See https://dart.dev/tools/pub/glossary#lockfile
 | 
					# See https://dart.dev/tools/pub/glossary#lockfile
 | 
				
			||||||
packages:
 | 
					packages:
 | 
				
			||||||
 | 
					  args:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: args
 | 
				
			||||||
 | 
					      sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "2.5.0"
 | 
				
			||||||
  async:
 | 
					  async:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -41,6 +49,14 @@ packages:
 | 
				
			|||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "1.18.0"
 | 
					    version: "1.18.0"
 | 
				
			||||||
 | 
					  crypto:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: crypto
 | 
				
			||||||
 | 
					      sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "3.0.3"
 | 
				
			||||||
  csslib:
 | 
					  csslib:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -57,6 +73,22 @@ packages:
 | 
				
			|||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "1.0.8"
 | 
					    version: "1.0.8"
 | 
				
			||||||
 | 
					  dio:
 | 
				
			||||||
 | 
					    dependency: "direct main"
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: dio
 | 
				
			||||||
 | 
					      sha256: e17f6b3097b8c51b72c74c9f071a605c47bcc8893839bd66732457a5ebe73714
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "5.5.0+1"
 | 
				
			||||||
 | 
					  dio_web_adapter:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: dio_web_adapter
 | 
				
			||||||
 | 
					      sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac"
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "1.0.1"
 | 
				
			||||||
  fake_async:
 | 
					  fake_async:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -81,11 +113,27 @@ packages:
 | 
				
			|||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "7.0.0"
 | 
					    version: "7.0.0"
 | 
				
			||||||
 | 
					  fixnum:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: fixnum
 | 
				
			||||||
 | 
					      sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "1.1.0"
 | 
				
			||||||
  flutter:
 | 
					  flutter:
 | 
				
			||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description: flutter
 | 
					    description: flutter
 | 
				
			||||||
    source: sdk
 | 
					    source: sdk
 | 
				
			||||||
    version: "0.0.0"
 | 
					    version: "0.0.0"
 | 
				
			||||||
 | 
					  flutter_cache_manager:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: flutter_cache_manager
 | 
				
			||||||
 | 
					      sha256: a77f77806a790eb9ba0118a5a3a936e81c4fea2b61533033b2b0c3d50bbde5ea
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "3.4.0"
 | 
				
			||||||
  flutter_lints:
 | 
					  flutter_lints:
 | 
				
			||||||
    dependency: "direct dev"
 | 
					    dependency: "direct dev"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -98,10 +146,18 @@ packages:
 | 
				
			|||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: flutter_plugin_android_lifecycle
 | 
					      name: flutter_plugin_android_lifecycle
 | 
				
			||||||
      sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f"
 | 
					      sha256: "9d98bd47ef9d34e803d438f17fd32b116d31009f534a6fa5ce3a1167f189a6de"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.0.19"
 | 
					    version: "2.0.21"
 | 
				
			||||||
 | 
					  flutter_svg:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: flutter_svg
 | 
				
			||||||
 | 
					      sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2"
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "2.0.10+1"
 | 
				
			||||||
  flutter_test:
 | 
					  flutter_test:
 | 
				
			||||||
    dependency: "direct dev"
 | 
					    dependency: "direct dev"
 | 
				
			||||||
    description: flutter
 | 
					    description: flutter
 | 
				
			||||||
@@ -116,50 +172,50 @@ packages:
 | 
				
			|||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: google_maps
 | 
					      name: google_maps
 | 
				
			||||||
      sha256: "47eef3836b49bb030d5cb3afc60b8451408bf34cf753e571b645d6529eb4251a"
 | 
					      sha256: "463b38e5a92a05cde41220a11fd5eef3847031fef3e8cf295ac76ec453246907"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "7.1.0"
 | 
					    version: "8.0.0"
 | 
				
			||||||
  google_maps_flutter:
 | 
					  google_maps_flutter:
 | 
				
			||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: google_maps_flutter
 | 
					      name: google_maps_flutter
 | 
				
			||||||
      sha256: c1972cbad779bc5346c49045f26ae45550a0958b1cbca5b524dd3c8954995d28
 | 
					      sha256: acf0ec482d86b2ac55ade80597ce7f797a47971f5210ebfd030f0d58130e0a94
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.6.1"
 | 
					    version: "2.7.0"
 | 
				
			||||||
  google_maps_flutter_android:
 | 
					  google_maps_flutter_android:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: google_maps_flutter_android
 | 
					      name: google_maps_flutter_android
 | 
				
			||||||
      sha256: "0bcadb80eba39afda77dede89a6caafd3b68f2786b90491eceea4a01c3db181c"
 | 
					      sha256: "5d444f4135559488d7ea325eae710ae3284e6951b1b61729a0ac026456fe1548"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.8.0"
 | 
					    version: "2.12.1"
 | 
				
			||||||
  google_maps_flutter_ios:
 | 
					  google_maps_flutter_ios:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: google_maps_flutter_ios
 | 
					      name: google_maps_flutter_ios
 | 
				
			||||||
      sha256: e5132d17f051600d90d79d9f574b177c24231da702453a036db2490f9ced4646
 | 
					      sha256: a6e3c6ecdda6c985053f944be13a0645ebb919da2ef0f5bc579c5e1670a5b2a8
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.6.0"
 | 
					    version: "2.10.0"
 | 
				
			||||||
  google_maps_flutter_platform_interface:
 | 
					  google_maps_flutter_platform_interface:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: google_maps_flutter_platform_interface
 | 
					      name: google_maps_flutter_platform_interface
 | 
				
			||||||
      sha256: "167af879da4d004cd58771f1469b91dcc3b9b0a2c5334cc6bf71fd41d4b35403"
 | 
					      sha256: bd60ca330e3c7763b95b477054adec338a522d982af73ecc520b232474063ac5
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.6.0"
 | 
					    version: "2.8.0"
 | 
				
			||||||
  google_maps_flutter_web:
 | 
					  google_maps_flutter_web:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: google_maps_flutter_web
 | 
					      name: google_maps_flutter_web
 | 
				
			||||||
      sha256: "0c0d5c723d94b295cf86dd1c45ff91d2ac1fff7c05ddca4f01bef9fa0a014690"
 | 
					      sha256: "8d5d0f58bfc4afac0bbe3d399f2018fcea691e3ea3d35254b7aae56df5827659"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "0.5.7"
 | 
					    version: "0.5.9+1"
 | 
				
			||||||
  html:
 | 
					  html:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -172,10 +228,10 @@ packages:
 | 
				
			|||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: http
 | 
					      name: http
 | 
				
			||||||
      sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938"
 | 
					      sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "1.2.1"
 | 
					    version: "1.2.2"
 | 
				
			||||||
  http_parser:
 | 
					  http_parser:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -184,22 +240,6 @@ packages:
 | 
				
			|||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "4.0.2"
 | 
					    version: "4.0.2"
 | 
				
			||||||
  js:
 | 
					 | 
				
			||||||
    dependency: transitive
 | 
					 | 
				
			||||||
    description:
 | 
					 | 
				
			||||||
      name: js
 | 
					 | 
				
			||||||
      sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
 | 
					 | 
				
			||||||
      url: "https://pub.dev"
 | 
					 | 
				
			||||||
    source: hosted
 | 
					 | 
				
			||||||
    version: "0.6.7"
 | 
					 | 
				
			||||||
  js_wrapping:
 | 
					 | 
				
			||||||
    dependency: transitive
 | 
					 | 
				
			||||||
    description:
 | 
					 | 
				
			||||||
      name: js_wrapping
 | 
					 | 
				
			||||||
      sha256: e385980f7c76a8c1c9a560dfb623b890975841542471eade630b2871d243851c
 | 
					 | 
				
			||||||
      url: "https://pub.dev"
 | 
					 | 
				
			||||||
    source: hosted
 | 
					 | 
				
			||||||
    version: "0.7.4"
 | 
					 | 
				
			||||||
  leak_tracker:
 | 
					  leak_tracker:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -264,6 +304,38 @@ packages:
 | 
				
			|||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "1.9.0"
 | 
					    version: "1.9.0"
 | 
				
			||||||
 | 
					  path_parsing:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: path_parsing
 | 
				
			||||||
 | 
					      sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "1.0.1"
 | 
				
			||||||
 | 
					  path_provider:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: path_provider
 | 
				
			||||||
 | 
					      sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "2.1.4"
 | 
				
			||||||
 | 
					  path_provider_android:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: path_provider_android
 | 
				
			||||||
 | 
					      sha256: "490539678396d4c3c0b06efdaab75ae60675c3e0c66f72bc04c2e2c1e0e2abeb"
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "2.2.9"
 | 
				
			||||||
 | 
					  path_provider_foundation:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: path_provider_foundation
 | 
				
			||||||
 | 
					      sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "2.4.0"
 | 
				
			||||||
  path_provider_linux:
 | 
					  path_provider_linux:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -284,18 +356,26 @@ packages:
 | 
				
			|||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: path_provider_windows
 | 
					      name: path_provider_windows
 | 
				
			||||||
      sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170"
 | 
					      sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.2.1"
 | 
					    version: "2.3.0"
 | 
				
			||||||
 | 
					  petitparser:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: petitparser
 | 
				
			||||||
 | 
					      sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "6.0.2"
 | 
				
			||||||
  platform:
 | 
					  platform:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: platform
 | 
					      name: platform
 | 
				
			||||||
      sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
 | 
					      sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "3.1.4"
 | 
					    version: "3.1.5"
 | 
				
			||||||
  plugin_platform_interface:
 | 
					  plugin_platform_interface:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -304,6 +384,14 @@ packages:
 | 
				
			|||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.1.8"
 | 
					    version: "2.1.8"
 | 
				
			||||||
 | 
					  rxdart:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: rxdart
 | 
				
			||||||
 | 
					      sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962"
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "0.28.0"
 | 
				
			||||||
  sanitize_html:
 | 
					  sanitize_html:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -316,58 +404,58 @@ packages:
 | 
				
			|||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: shared_preferences
 | 
					      name: shared_preferences
 | 
				
			||||||
      sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180
 | 
					      sha256: c3f888ba2d659f3e75f4686112cc1e71f46177f74452d40d8307edc332296ead
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.2.3"
 | 
					    version: "2.3.0"
 | 
				
			||||||
  shared_preferences_android:
 | 
					  shared_preferences_android:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: shared_preferences_android
 | 
					      name: shared_preferences_android
 | 
				
			||||||
      sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2"
 | 
					      sha256: "041be4d9d2dc6079cf342bc8b761b03787e3b71192d658220a56cac9c04a0294"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.2.2"
 | 
					    version: "2.3.0"
 | 
				
			||||||
  shared_preferences_foundation:
 | 
					  shared_preferences_foundation:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: shared_preferences_foundation
 | 
					      name: shared_preferences_foundation
 | 
				
			||||||
      sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7"
 | 
					      sha256: "671e7a931f55a08aa45be2a13fe7247f2a41237897df434b30d2012388191833"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.4.0"
 | 
					    version: "2.5.0"
 | 
				
			||||||
  shared_preferences_linux:
 | 
					  shared_preferences_linux:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: shared_preferences_linux
 | 
					      name: shared_preferences_linux
 | 
				
			||||||
      sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa"
 | 
					      sha256: "2ba0510d3017f91655b7543e9ee46d48619de2a2af38e5c790423f7007c7ccc1"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.3.2"
 | 
					    version: "2.4.0"
 | 
				
			||||||
  shared_preferences_platform_interface:
 | 
					  shared_preferences_platform_interface:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: shared_preferences_platform_interface
 | 
					      name: shared_preferences_platform_interface
 | 
				
			||||||
      sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b"
 | 
					      sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.3.2"
 | 
					    version: "2.4.1"
 | 
				
			||||||
  shared_preferences_web:
 | 
					  shared_preferences_web:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: shared_preferences_web
 | 
					      name: shared_preferences_web
 | 
				
			||||||
      sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a"
 | 
					      sha256: "3a293170d4d9403c3254ee05b84e62e8a9b3c5808ebd17de6a33fe9ea6457936"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.3.0"
 | 
					    version: "2.4.0"
 | 
				
			||||||
  shared_preferences_windows:
 | 
					  shared_preferences_windows:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: shared_preferences_windows
 | 
					      name: shared_preferences_windows
 | 
				
			||||||
      sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59"
 | 
					      sha256: "398084b47b7f92110683cac45c6dc4aae853db47e470e5ddcd52cab7f7196ab2"
 | 
				
			||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.3.2"
 | 
					    version: "2.4.0"
 | 
				
			||||||
  sky_engine:
 | 
					  sky_engine:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description: flutter
 | 
					    description: flutter
 | 
				
			||||||
@@ -389,6 +477,30 @@ packages:
 | 
				
			|||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "1.10.0"
 | 
					    version: "1.10.0"
 | 
				
			||||||
 | 
					  sprintf:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: sprintf
 | 
				
			||||||
 | 
					      sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "7.0.0"
 | 
				
			||||||
 | 
					  sqflite:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: sqflite
 | 
				
			||||||
 | 
					      sha256: a43e5a27235518c03ca238e7b4732cf35eabe863a369ceba6cbefa537a66f16d
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "2.3.3+1"
 | 
				
			||||||
 | 
					  sqflite_common:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: sqflite_common
 | 
				
			||||||
 | 
					      sha256: "3da423ce7baf868be70e2c0976c28a1bb2f73644268b7ffa7d2e08eab71f16a4"
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "2.5.4"
 | 
				
			||||||
  stack_trace:
 | 
					  stack_trace:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -421,6 +533,14 @@ packages:
 | 
				
			|||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "1.2.0"
 | 
					    version: "1.2.0"
 | 
				
			||||||
 | 
					  synchronized:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: synchronized
 | 
				
			||||||
 | 
					      sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558"
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "3.1.0+1"
 | 
				
			||||||
  term_glyph:
 | 
					  term_glyph:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -437,6 +557,14 @@ packages:
 | 
				
			|||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "0.7.0"
 | 
					    version: "0.7.0"
 | 
				
			||||||
 | 
					  the_widget_marker:
 | 
				
			||||||
 | 
					    dependency: "direct main"
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: the_widget_marker
 | 
				
			||||||
 | 
					      sha256: "2476ae6b1fe29bbffa3596546871bd26f724c223ea7da74775801d9b70d64811"
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "1.0.0"
 | 
				
			||||||
  typed_data:
 | 
					  typed_data:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -445,6 +573,38 @@ packages:
 | 
				
			|||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "1.3.2"
 | 
					    version: "1.3.2"
 | 
				
			||||||
 | 
					  uuid:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: uuid
 | 
				
			||||||
 | 
					      sha256: "83d37c7ad7aaf9aa8e275490669535c8080377cfa7a7004c24dfac53afffaa90"
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "4.4.2"
 | 
				
			||||||
 | 
					  vector_graphics:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: vector_graphics
 | 
				
			||||||
 | 
					      sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3"
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "1.1.11+1"
 | 
				
			||||||
 | 
					  vector_graphics_codec:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: vector_graphics_codec
 | 
				
			||||||
 | 
					      sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "1.1.11+1"
 | 
				
			||||||
 | 
					  vector_graphics_compiler:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: vector_graphics_compiler
 | 
				
			||||||
 | 
					      sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81"
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "1.1.11+1"
 | 
				
			||||||
  vector_math:
 | 
					  vector_math:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -469,14 +629,6 @@ packages:
 | 
				
			|||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "0.5.1"
 | 
					    version: "0.5.1"
 | 
				
			||||||
  win32:
 | 
					 | 
				
			||||||
    dependency: transitive
 | 
					 | 
				
			||||||
    description:
 | 
					 | 
				
			||||||
      name: win32
 | 
					 | 
				
			||||||
      sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4
 | 
					 | 
				
			||||||
      url: "https://pub.dev"
 | 
					 | 
				
			||||||
    source: hosted
 | 
					 | 
				
			||||||
    version: "5.5.1"
 | 
					 | 
				
			||||||
  xdg_directories:
 | 
					  xdg_directories:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -485,6 +637,14 @@ packages:
 | 
				
			|||||||
      url: "https://pub.dev"
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "1.0.4"
 | 
					    version: "1.0.4"
 | 
				
			||||||
 | 
					  xml:
 | 
				
			||||||
 | 
					    dependency: transitive
 | 
				
			||||||
 | 
					    description:
 | 
				
			||||||
 | 
					      name: xml
 | 
				
			||||||
 | 
					      sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
 | 
				
			||||||
 | 
					      url: "https://pub.dev"
 | 
				
			||||||
 | 
					    source: hosted
 | 
				
			||||||
 | 
					    version: "6.5.0"
 | 
				
			||||||
sdks:
 | 
					sdks:
 | 
				
			||||||
  dart: ">=3.4.0 <4.0.0"
 | 
					  dart: ">=3.4.0 <4.0.0"
 | 
				
			||||||
  flutter: ">=3.19.0"
 | 
					  flutter: ">=3.22.0"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
name: "fast_network_navigation"
 | 
					name: "anyway"
 | 
				
			||||||
description: "An interactive city navigator."
 | 
					description: "A customizable, agile city navigator for your trips."
 | 
				
			||||||
# The following line prevents the package from being accidentally published to
 | 
					# The following line prevents the package from being accidentally published to
 | 
				
			||||||
# pub.dev using `flutter pub publish`. This is preferred for private packages.
 | 
					# 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
 | 
					publish_to: 'none' # Remove this line if you wish to publish to pub.dev
 | 
				
			||||||
@@ -36,9 +36,11 @@ dependencies:
 | 
				
			|||||||
  # Use with the CupertinoIcons class for iOS style icons.
 | 
					  # Use with the CupertinoIcons class for iOS style icons.
 | 
				
			||||||
  cupertino_icons: ^1.0.6
 | 
					  cupertino_icons: ^1.0.6
 | 
				
			||||||
  sliding_up_panel: ^2.0.0+1
 | 
					  sliding_up_panel: ^2.0.0+1
 | 
				
			||||||
  google_maps_flutter: ^2.6.1
 | 
					 | 
				
			||||||
  http: ^1.2.1
 | 
					  http: ^1.2.1
 | 
				
			||||||
  shared_preferences: ^2.2.3
 | 
					  shared_preferences: ^2.2.3
 | 
				
			||||||
 | 
					  dio: ^5.5.0+1
 | 
				
			||||||
 | 
					  google_maps_flutter: ^2.7.0
 | 
				
			||||||
 | 
					  the_widget_marker: ^1.0.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dev_dependencies:
 | 
					dev_dependencies:
 | 
				
			||||||
  flutter_test:
 | 
					  flutter_test:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,8 +8,8 @@
 | 
				
			|||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:flutter_test/flutter_test.dart';
 | 
					import 'package:flutter_test/flutter_test.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// import 'package:fast_network_navigation/main.dart';
 | 
					// import 'package:anyway/main.dart';
 | 
				
			||||||
import 'package:fast_network_navigation/layout.dart';
 | 
					import 'package:anyway/layout.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void main() {
 | 
					void main() {
 | 
				
			||||||
  testWidgets('Counter increments smoke test', (WidgetTester tester) async {
 | 
					  testWidgets('Counter increments smoke test', (WidgetTester tester) async {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,13 +24,13 @@
 | 
				
			|||||||
  <!-- iOS meta tags & icons -->
 | 
					  <!-- iOS meta tags & icons -->
 | 
				
			||||||
  <meta name="apple-mobile-web-app-capable" content="yes">
 | 
					  <meta name="apple-mobile-web-app-capable" content="yes">
 | 
				
			||||||
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
 | 
					  <meta name="apple-mobile-web-app-status-bar-style" content="black">
 | 
				
			||||||
  <meta name="apple-mobile-web-app-title" content="fast_network_navigation">
 | 
					  <meta name="apple-mobile-web-app-title" content="anyway">
 | 
				
			||||||
  <link rel="apple-touch-icon" href="icons/Icon-192.png">
 | 
					  <link rel="apple-touch-icon" href="icons/Icon-192.png">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <!-- Favicon -->
 | 
					  <!-- Favicon -->
 | 
				
			||||||
  <link rel="icon" type="image/png" href="favicon.png"/>
 | 
					  <link rel="icon" type="image/png" href="favicon.png"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <title>fast_network_navigation</title>
 | 
					  <title>anyway</title>
 | 
				
			||||||
  <link rel="manifest" href="manifest.json">
 | 
					  <link rel="manifest" href="manifest.json">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <script>
 | 
					  <script>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    "name": "fast_network_navigation",
 | 
					    "name": "anyway",
 | 
				
			||||||
    "short_name": "fast_network_navigation",
 | 
					    "short_name": "anyway",
 | 
				
			||||||
    "start_url": ".",
 | 
					    "start_url": ".",
 | 
				
			||||||
    "display": "standalone",
 | 
					    "display": "standalone",
 | 
				
			||||||
    "background_color": "#0175C2",
 | 
					    "background_color": "#0175C2",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
# Project-level configuration.
 | 
					# Project-level configuration.
 | 
				
			||||||
cmake_minimum_required(VERSION 3.14)
 | 
					cmake_minimum_required(VERSION 3.14)
 | 
				
			||||||
project(fast_network_navigation LANGUAGES CXX)
 | 
					project(anyway LANGUAGES CXX)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# The name of the executable created for the application. Change this to change
 | 
					# The name of the executable created for the application. Change this to change
 | 
				
			||||||
# the on-disk name of your application.
 | 
					# the on-disk name of your application.
 | 
				
			||||||
set(BINARY_NAME "fast_network_navigation")
 | 
					set(BINARY_NAME "anyway")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
 | 
					# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
 | 
				
			||||||
# versions of CMake.
 | 
					# versions of CMake.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -90,12 +90,12 @@ BEGIN
 | 
				
			|||||||
        BLOCK "040904e4"
 | 
					        BLOCK "040904e4"
 | 
				
			||||||
        BEGIN
 | 
					        BEGIN
 | 
				
			||||||
            VALUE "CompanyName", "com.example" "\0"
 | 
					            VALUE "CompanyName", "com.example" "\0"
 | 
				
			||||||
            VALUE "FileDescription", "fast_network_navigation" "\0"
 | 
					            VALUE "FileDescription", "anyway" "\0"
 | 
				
			||||||
            VALUE "FileVersion", VERSION_AS_STRING "\0"
 | 
					            VALUE "FileVersion", VERSION_AS_STRING "\0"
 | 
				
			||||||
            VALUE "InternalName", "fast_network_navigation" "\0"
 | 
					            VALUE "InternalName", "anyway" "\0"
 | 
				
			||||||
            VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0"
 | 
					            VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0"
 | 
				
			||||||
            VALUE "OriginalFilename", "fast_network_navigation.exe" "\0"
 | 
					            VALUE "OriginalFilename", "anyway.exe" "\0"
 | 
				
			||||||
            VALUE "ProductName", "fast_network_navigation" "\0"
 | 
					            VALUE "ProductName", "anyway" "\0"
 | 
				
			||||||
            VALUE "ProductVersion", VERSION_AS_STRING "\0"
 | 
					            VALUE "ProductVersion", VERSION_AS_STRING "\0"
 | 
				
			||||||
        END
 | 
					        END
 | 
				
			||||||
    END
 | 
					    END
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
 | 
				
			|||||||
  FlutterWindow window(project);
 | 
					  FlutterWindow window(project);
 | 
				
			||||||
  Win32Window::Point origin(10, 10);
 | 
					  Win32Window::Point origin(10, 10);
 | 
				
			||||||
  Win32Window::Size size(1280, 720);
 | 
					  Win32Window::Size size(1280, 720);
 | 
				
			||||||
  if (!window.Create(L"fast_network_navigation", origin, size)) {
 | 
					  if (!window.Create(L"anyway", origin, size)) {
 | 
				
			||||||
    return EXIT_FAILURE;
 | 
					    return EXIT_FAILURE;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  window.SetQuitOnClose(true);
 | 
					  window.SetQuitOnClose(true);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
  "$schema": "https://docs.renovatebot.com/renovate-schema.json"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user