Compare commits
	
		
			4 Commits
		
	
	
		
			renovate/c
			...
			37cacd6fd1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 37cacd6fd1 | |||
| 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.MEMCACHE_HOST 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 | ||||||
|  |  | ||||||
| @@ -17,5 +16,5 @@ class Preferences(BaseModel) : | |||||||
|     # Shopping (diriger plutôt vers des zones / rues commerçantes) |     # Shopping (diriger plutôt vers des zones / rues commerçantes) | ||||||
|     shopping : Preference |     shopping : Preference | ||||||
|  |  | ||||||
|     max_time_minute: Optional[int] = 6*60  |     max_time_minute: Optional[int] = 6*60 | ||||||
|     detour_tolerance_minute: Optional[int] = 0 |     detour_tolerance_minute: Optional[int] = 0 | ||||||
|   | |||||||
							
								
								
									
										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,22 +20,13 @@ 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 | ||||||
|                     ) |     ) | ||||||
|  |  | ||||||
|     # Create start and finish  |     # Create start and finish  | ||||||
|     if finish_coords is None : |     if finish_coords is None : | ||||||
|   | |||||||
| @@ -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( | ||||||
|       onMapCreated: _onMapCreated, |       children: [ | ||||||
|       initialCameraPosition: _cameraPosition, |         MyMarker(globalKey), | ||||||
|       onCameraIdle: _onCameraIdle, |  | ||||||
|       // onLongPress: , |         GoogleMap( | ||||||
|       markers: markers, |               onMapCreated: _onMapCreated, | ||||||
|       cloudMapId: '41c21ac9b81dbfd8', |               initialCameraPosition: _cameraPosition, | ||||||
|  |               onCameraIdle: _onCameraIdle, | ||||||
|  |               // onLongPress: , | ||||||
|  |               markers: markers, | ||||||
|  |               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( | ||||||
|         child: Column( |         key: _formKey, | ||||||
|           mainAxisAlignment: MainAxisAlignment.center, |         child:  | ||||||
|           children: <Widget>[ |           Padding( | ||||||
|             const Text( |             padding: const EdgeInsets.all(15.0), | ||||||
|               'Create a new trip', |             child: Column( | ||||||
|  |               crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |                | ||||||
|  |               children: <Widget>[ | ||||||
|  |                 TextFormField( | ||||||
|  |                   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