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