functional datastructure. Needs to be able to write to storage as well
This commit is contained in:
		| @@ -1,6 +1,6 @@ | ||||
| import 'package:flutter/material.dart'; | ||||
|  | ||||
| Widget Greeter (ThemeData theme, {bool full = false}) { | ||||
| Widget Greeter(ThemeData theme, {bool full = false}) { | ||||
|   String greeterText = ""; | ||||
|   try { | ||||
|     String cityName = getCityName(); | ||||
|   | ||||
| @@ -32,7 +32,9 @@ class _LandmarkCardState extends State<LandmarkCard> { | ||||
|               // force a fixed width | ||||
|               width: 160, | ||||
|               child: Image.network( | ||||
|                 widget.landmark.imageURL, | ||||
|                 widget.landmark.imageURL!, | ||||
|                 errorBuilder: (context, error, stackTrace) => Icon(Icons.question_mark_outlined), | ||||
|                 // TODO: make this a switch statement to load a placeholder if null | ||||
|                 // cover the whole container meaning the image will be cropped | ||||
|                 fit: BoxFit.cover, | ||||
|               ), | ||||
|   | ||||
| @@ -1,29 +1,34 @@ | ||||
| import 'dart:collection'; | ||||
|  | ||||
| import 'package:fast_network_navigation/modules/landmark_card.dart'; | ||||
| import 'package:fast_network_navigation/structs/landmark.dart'; | ||||
| import 'package:fast_network_navigation/utils/get_landmarks.dart'; | ||||
|  | ||||
| import 'package:fast_network_navigation/structs/trip.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| class loadLandmarksOverview extends StatefulWidget { | ||||
|   const loadLandmarksOverview({super.key}); | ||||
| class LandmarksOverview extends StatefulWidget { | ||||
|   final Future<Trip>? trip; | ||||
|   const LandmarksOverview({super.key, this.trip}); | ||||
|  | ||||
|   @override | ||||
|   State<loadLandmarksOverview> createState() => _loadLandmarksOverviewState(); | ||||
|   State<LandmarksOverview> createState() => _LandmarksOverviewState(); | ||||
| } | ||||
|  | ||||
| class _loadLandmarksOverviewState extends State<loadLandmarksOverview> { | ||||
|   final Future<List<Landmark>> _landmarks = fetchLandmarks(); | ||||
| class _LandmarksOverviewState extends State<LandmarksOverview> { | ||||
|   // final Future<List<Landmark>> _landmarks = fetchLandmarks(); | ||||
|  | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     final Future<LinkedList<Landmark>> _landmarks = getLandmarks(widget.trip); | ||||
|     return DefaultTextStyle( | ||||
|       style: Theme.of(context).textTheme.displayMedium!, | ||||
|       textAlign: TextAlign.center, | ||||
|       child: FutureBuilder<List<Landmark>>( | ||||
|       child: FutureBuilder<LinkedList<Landmark>>( | ||||
|         future: _landmarks, | ||||
|         builder: (BuildContext context, AsyncSnapshot<List<Landmark>> snapshot) { | ||||
|         builder: (BuildContext context, AsyncSnapshot<LinkedList<Landmark>> snapshot) { | ||||
|           List<Widget> children; | ||||
|           if (snapshot.hasData) { | ||||
|             children = [landmarksWithSteps(snapshot.data!)]; | ||||
| @@ -42,13 +47,10 @@ class _loadLandmarksOverviewState extends State<loadLandmarksOverview> { | ||||
|           } else { | ||||
|             children = [Center(child: CircularProgressIndicator())]; | ||||
|           } | ||||
|           return Padding( | ||||
|             padding: const EdgeInsets.all(10), | ||||
|             child: Center( | ||||
|               child: Column( | ||||
|                 mainAxisAlignment: MainAxisAlignment.center, | ||||
|                 children: children, | ||||
|               ), | ||||
|           return Center( | ||||
|             child: Column( | ||||
|               mainAxisAlignment: MainAxisAlignment.center, | ||||
|               children: children, | ||||
|             ), | ||||
|           ); | ||||
|         }, | ||||
| @@ -57,12 +59,12 @@ class _loadLandmarksOverviewState extends State<loadLandmarksOverview> { | ||||
|   } | ||||
| } | ||||
|  | ||||
| Widget landmarksWithSteps(List<Landmark> landmarks) { | ||||
| Widget landmarksWithSteps(LinkedList<Landmark> landmarks) { | ||||
|   List<Widget> children = []; | ||||
|   for (int i = 0; i < landmarks.length; i++) { | ||||
|     children.add(LandmarkCard(landmarks[i])); | ||||
|     if (i < landmarks.length - 1) { | ||||
|       Widget step = stepBetweenLandmarks(landmarks[i], landmarks[i + 1]); | ||||
|   for (Landmark landmark in landmarks) { | ||||
|     children.add(LandmarkCard(landmark)); | ||||
|     if (landmark.next != null) { | ||||
|       Widget step = stepBetweenLandmarks(landmark, landmark.next!); | ||||
|       children.add(step); | ||||
|     } | ||||
|   } | ||||
| @@ -109,4 +111,9 @@ Widget stepBetweenLandmarks(Landmark before, Landmark after) { | ||||
|       ], | ||||
|     ), | ||||
|   ); | ||||
| } | ||||
| } | ||||
|  | ||||
| Future<LinkedList<Landmark>> getLandmarks (Future<Trip>? trip) async { | ||||
|   Trip tripf = await trip!; | ||||
|   return tripf.landmarks; | ||||
| } | ||||
|   | ||||
| @@ -1,9 +1,18 @@ | ||||
| import 'dart:collection'; | ||||
|  | ||||
| import 'package:fast_network_navigation/structs/landmark.dart'; | ||||
| import 'package:fast_network_navigation/utils/get_landmarks.dart'; | ||||
| import 'package:fast_network_navigation/structs/trip.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:google_maps_flutter/google_maps_flutter.dart'; | ||||
|  | ||||
| class MapWidget extends StatefulWidget { | ||||
|  | ||||
|   final Future<Trip>? trip; | ||||
|  | ||||
|   MapWidget({ | ||||
|     this.trip | ||||
|   }); | ||||
|  | ||||
|   @override | ||||
|   State<MapWidget> createState() => _MapWidgetState(); | ||||
| } | ||||
| @@ -31,7 +40,8 @@ class _MapWidgetState extends State<MapWidget> { | ||||
|  | ||||
|   void drawLandmarks() async { | ||||
|     // (re)draws landmarks on the map | ||||
|     List<Landmark> landmarks = await fetchLandmarks(); | ||||
|     Trip? trip = await widget.trip; | ||||
|     LinkedList<Landmark> landmarks = trip!.landmarks; | ||||
|     setState(() { | ||||
|       for (Landmark landmark in landmarks) { | ||||
|         markers.add(Marker( | ||||
| @@ -55,4 +65,3 @@ class _MapWidgetState extends State<MapWidget> { | ||||
|     ); | ||||
|   } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -2,19 +2,21 @@ import 'package:flutter/material.dart'; | ||||
|  | ||||
| import 'package:fast_network_navigation/layout.dart'; | ||||
| import 'package:fast_network_navigation/structs/trip.dart'; | ||||
| import 'package:fast_network_navigation/utils/get_trips.dart'; | ||||
|  | ||||
|  | ||||
| class TripsOverview extends StatefulWidget { | ||||
|    | ||||
|   const TripsOverview({super.key}); | ||||
|   final Future<List<Trip>> trips; | ||||
|   const TripsOverview({ | ||||
|     super.key, | ||||
|     required this.trips, | ||||
|     }); | ||||
|  | ||||
|   @override | ||||
|   State<TripsOverview> createState() => _TripsOverviewState(); | ||||
| } | ||||
|  | ||||
| class _TripsOverviewState extends State<TripsOverview> { | ||||
|   final Future<List<Trip>> _trips = loadTrips(); | ||||
|   // final Future<List<Trip>> _trips = loadTrips(); | ||||
|  | ||||
|  | ||||
|   Widget listBuild (BuildContext context, AsyncSnapshot<List<Trip>> snapshot) { | ||||
| @@ -23,12 +25,12 @@ class _TripsOverviewState extends State<TripsOverview> { | ||||
|       children = List<Widget>.generate(snapshot.data!.length, (index) { | ||||
|         Trip trip = snapshot.data![index]; | ||||
|         return ListTile( | ||||
|           title: Text("Trip to ${trip.cityName} (${trip.landmarks.length} stops)"), | ||||
|           title: Text("Trip to ${trip.cityName}"), | ||||
|           leading: Icon(Icons.pin_drop), | ||||
|           onTap: () { | ||||
|             Navigator.of(context).push( | ||||
|               MaterialPageRoute( | ||||
|                 builder: (context) => BasePage(mainScreen: "map") //, trip: trip) | ||||
|                 builder: (context) => BasePage(mainScreen: "map", trip: trip) | ||||
|               ) | ||||
|             ); | ||||
|           }, | ||||
| @@ -58,7 +60,7 @@ class _TripsOverviewState extends State<TripsOverview> { | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     return FutureBuilder( | ||||
|       future: _trips, | ||||
|       future: widget.trips, | ||||
|       builder: listBuild, | ||||
|     ); | ||||
|   } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user