diff --git a/lib/album_fetch.dart b/lib/album_fetch.dart index 658c896..d26ceab 100644 --- a/lib/album_fetch.dart +++ b/lib/album_fetch.dart @@ -1,53 +1,57 @@ - import 'dart:convert'; import 'dart:async'; import 'package:http/http.dart' as http; -Future fetchArrivals() async { +Future> fetchArrivals() async { final response = await http - .get(Uri.parse(DB_URL)); + .get(Uri.parse('http://141.144.238.26:48502/arrivals/all')); if (response.statusCode == 200) { // If the server did return a 200 OK response, // then parse the JSON. - return FetchAlbum.fromJson(jsonDecode(response.body) as Map); + List data = jsonDecode(response.body); + List posts = List.from(data.map((dynamic postJson) { + return Arrival.fromJson(postJson); + })); } else { // If the server did not return a 200 OK response, // then throw an exception. - throw Exception('Failed to load album'); + throw Exception('Failed to load Arrival'); } + + throw Exception("API Unavailable"); } -class FetchAlbum { +class Arrival { final String timeOfDay; final int weekDay; - final String tramLine; + final int tramLine; final bool direction; - const FetchAlbum({ + const Arrival({ required this.timeOfDay, required this.weekDay, required this.tramLine, required this.direction, }); - factory FetchAlbum.fromJson(Map json) { + factory Arrival.fromJson(Map json) { return switch (json) { { 'time_of_day': String jsonTime, 'week_day': int jsonDay, - 'tram_line': String jsonTramLine, + 'tram_line': int jsonTramLine, 'direction': bool jsonDirec, } => - FetchAlbum( + Arrival( // Class : json declaration timeOfDay: jsonTime, weekDay: jsonDay, tramLine: jsonTramLine, direction: jsonDirec, ), - _ => throw const FormatException('Failed to load album.'), + _ => throw const FormatException('Failed to load Arrival.'), }; } } diff --git a/lib/fetcher.dart b/lib/fetcher.dart index 9238d39..638b017 100644 --- a/lib/fetcher.dart +++ b/lib/fetcher.dart @@ -2,19 +2,19 @@ import 'package:flutter/material.dart'; import 'package:witl/album_fetch.dart'; class FetchAPI extends StatefulWidget { - const FetchAPI({super.key}); + const FetchAPI({Key? key}) : super(key: key); @override State createState() => _FetchAPIState(); } class _FetchAPIState extends State { - late Future fetchedAlbum; + late Future> fetchedArrivals; @override void initState() { super.initState(); - fetchedAlbum = fetchArrivals(); + fetchedArrivals = fetchArrivals(); } @override @@ -25,32 +25,37 @@ class _FetchAPIState extends State { ), body: ListView( children: [ - FutureBuilder ( - future: fetchedAlbum, + FutureBuilder>( + future: fetchedArrivals, builder: (context, snapshot) { - if (snapshot.hasData) { - return Text(snapshot.data!.timeOfDay); + if (snapshot.connectionState == ConnectionState.waiting) { + return const CircularProgressIndicator(); } else if (snapshot.hasError) { - return Text('${snapshot.error}'); + return Text('Failed to fetch data.\nError: ${snapshot.error}'); + } else { + return ListView.builder( + itemCount: snapshot.data!.length, + itemBuilder: (context, index) { + return ListTile( + title: Text(snapshot.data![index].timeOfDay), + ); + }, + ); } - - return const CircularProgressIndicator(); }, ), InkWell( onTap: () { Navigator.pushNamedAndRemoveUntil( - context, - '/', - (route) => false - ); + context, '/', (route) => false); }, child: Container( - padding: const EdgeInsets.all(20.0), - child: const Text("Homescreen")), + padding: const EdgeInsets.all(20.0), + child: const Text("Homescreen"), + ), ), ], ), ); } -} \ No newline at end of file +}