From 4e39606812804d5309e5835a2c189e3399d1d70c Mon Sep 17 00:00:00 2001 From: Supermjork Date: Mon, 25 Dec 2023 17:10:30 +0200 Subject: [PATCH 1/5] PLUGINS PLEASE --- pubspec.lock | 8 ++++---- pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 4de467f..8e26fe5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -66,10 +66,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7 url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "3.0.1" flutter_test: dependency: "direct dev" description: flutter @@ -79,10 +79,10 @@ packages: dependency: transitive description: name: lints - sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "3.0.0" matcher: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index b2e2b97..3a6fd83 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -45,7 +45,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^2.0.0 + flutter_lints: ^3.0.1 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From 0cfd9592f3ea869c5dfff246a51b29a3cb97c2e0 Mon Sep 17 00:00:00 2001 From: Supermjork Date: Mon, 25 Dec 2023 18:04:25 +0200 Subject: [PATCH 2/5] Choosing Line, Colour --- lib/input_data.dart | 90 +++++++++++++++++++++++++++++++++++---------- pubspec.lock | 8 ++++ pubspec.yaml | 1 + 3 files changed, 80 insertions(+), 19 deletions(-) diff --git a/lib/input_data.dart b/lib/input_data.dart index 3e092f7..cd0fa68 100644 --- a/lib/input_data.dart +++ b/lib/input_data.dart @@ -2,9 +2,17 @@ import 'package:flutter/material.dart'; import 'package:witl/fetcher.dart'; import 'package:witl/home_screen.dart'; -class InputData extends StatelessWidget { +class InputData extends StatefulWidget { const InputData({super.key}); + @override + _InputDataState createState() => _InputDataState(); +} + +class _InputDataState extends State { + late String selectedColor = 'Blue'; // Default color + late String selectedLine = '1'; // Default line + @override Widget build(BuildContext context) { return Scaffold( @@ -12,32 +20,76 @@ class InputData extends StatelessWidget { title: const Text("Data Input"), ), body: Column( - mainAxisAlignment: MainAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, children: [ - InkWell( - onTap:() { - Navigator.push( - context, - MaterialPageRoute(builder: (context) => const HomeScreen()) - ); - }, - child: Container( - padding: const EdgeInsets.all(20.0), - child: const Text("To Homescreen") - ), + const Text("Choose Tram Line and Colour"), + const SizedBox(height: 15), + const Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text("Line:"), + SizedBox(width: 35), + Text("Colour:"), + SizedBox(width: 25), + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + DropdownButton( + value: selectedLine, + items: ['1', '2'].map((String value) { + return DropdownMenuItem( + value: value, + child: Text(value), + ); + }).toList(), + onChanged: (String? newLine) { + setState(() { + selectedLine = newLine ?? '1'; // Set a default value if newLine is null + }); + }, + ), + const SizedBox(width: 30), + DropdownButton( + value: selectedColor, + items: ['Blue', 'Yellow'].map((String value) { + return DropdownMenuItem( + value: value, + child: Text(value), + ); + }).toList(), + onChanged: (String? newCol) { + setState(() { + selectedColor = newCol ?? 'Blue'; // Set a default value if newCol is null + }); + }, + ), + ], ), const SizedBox(height: 20), InkWell( - onTap:() { + onTap: () { Navigator.push( context, - MaterialPageRoute(builder: (context) => const FetchAPI()) - ); + MaterialPageRoute(builder: (context) => const HomeScreen()), + ); }, child: Container( - padding: const EdgeInsets.all(20.0), - child: const Text("To Fetch Data") - ), + padding: const EdgeInsets.all(20.0), + child: const Text("To Homescreen")), + ), + const SizedBox(height: 20), + InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => const FetchAPI()), + ); + }, + child: Container( + padding: const EdgeInsets.all(20.0), + child: const Text("To Fetch Data")), ), ], ), diff --git a/pubspec.lock b/pubspec.lock index 8e26fe5..538754a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -75,6 +75,14 @@ packages: description: flutter source: sdk version: "0.0.0" + intl: + dependency: "direct main" + description: + name: intl + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + url: "https://pub.dev" + source: hosted + version: "0.19.0" lints: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 3a6fd83..dccd6c1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -35,6 +35,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 + intl: ^0.19.0 dev_dependencies: flutter_test: From f586eb826c497d0691d93a4e608c44d8bed77f6b Mon Sep 17 00:00:00 2001 From: Supermjork Date: Mon, 25 Dec 2023 18:25:01 +0200 Subject: [PATCH 3/5] Submit Button, Navigation Changes --- lib/input_data.dart | 57 ++++++++++++++++++++++++++++++++++----------- lib/main.dart | 19 ++++++++++++++- 2 files changed, 62 insertions(+), 14 deletions(-) diff --git a/lib/input_data.dart b/lib/input_data.dart index cd0fa68..685b861 100644 --- a/lib/input_data.dart +++ b/lib/input_data.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:witl/fetcher.dart'; -import 'package:witl/home_screen.dart'; +import 'package:intl/intl.dart'; class InputData extends StatefulWidget { const InputData({super.key}); @@ -13,6 +12,9 @@ class _InputDataState extends State { late String selectedColor = 'Blue'; // Default color late String selectedLine = '1'; // Default line + DateTime now = DateTime.now(); + String formattedDate = DateFormat('kk:mm:ss \n EEE d MMM').format(DateTime.now()); + @override Widget build(BuildContext context) { return Scaffold( @@ -23,7 +25,9 @@ class _InputDataState extends State { mainAxisAlignment: MainAxisAlignment.center, children: [ const Text("Choose Tram Line and Colour"), + const SizedBox(height: 15), + const Row( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -33,6 +37,7 @@ class _InputDataState extends State { SizedBox(width: 25), ], ), + Row( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -67,29 +72,55 @@ class _InputDataState extends State { ), ], ), - const SizedBox(height: 20), + + const SizedBox(height: 30), + InkWell( onTap: () { - Navigator.push( - context, - MaterialPageRoute(builder: (context) => const HomeScreen()), - ); + // Grab Data from Dropdowns + selectedColor; + selectedLine; + + // Grab Time + formattedDate; + + // Send + //lingy plez }, child: Container( - padding: const EdgeInsets.all(20.0), - child: const Text("To Homescreen")), + padding: const EdgeInsets.all(20.0), + child: const Text("Submit Arrival"), + ), ), - const SizedBox(height: 20), + + const SizedBox(height: 50), + InkWell( onTap: () { - Navigator.push( + Navigator.pushNamedAndRemoveUntil( context, - MaterialPageRoute(builder: (context) => const FetchAPI()), + '/', + (route) => false ); }, child: Container( padding: const EdgeInsets.all(20.0), - child: const Text("To Fetch Data")), + child: const Text("Homescreen")), + ), + + const SizedBox(height: 10), + + InkWell( + onTap: () { + Navigator.pushNamedAndRemoveUntil( + context, + '/fetch', + (route) => false + ); + }, + child: Container( + padding: const EdgeInsets.all(20.0), + child: const Text("Fetch Data")), ), ], ), diff --git a/lib/main.dart b/lib/main.dart index 7479727..e87baf2 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:witl/fetcher.dart'; import 'package:witl/home_screen.dart'; +import 'package:witl/input_data.dart'; void main() => runApp(const MyApp()); @@ -13,7 +15,22 @@ class MyApp extends StatelessWidget { theme: ThemeData( primarySwatch: Colors.blue, ), - home: const HomeScreen(), + + // Navigashun with Routes + // Base "Home" Route + initialRoute: '/', + + // Possible Routes + routes: { + // Homescreen + '/': (context) => const HomeScreen(), + + // Fetching API Data + '/fetch': (context) => const FetchAPI(), + + // User Input + '/input': (context) => const InputData(), + }, ); } } From 1eabbaa00e871d07e2c78d512b11673db2472be0 Mon Sep 17 00:00:00 2001 From: Supermjork Date: Mon, 25 Dec 2023 18:38:49 +0200 Subject: [PATCH 4/5] Popup notifying of submitted data --- lib/input_data.dart | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/lib/input_data.dart b/lib/input_data.dart index 685b861..b5e1a99 100644 --- a/lib/input_data.dart +++ b/lib/input_data.dart @@ -86,6 +86,9 @@ class _InputDataState extends State { // Send //lingy plez + + //prompting of submission + showAlertDialog(context, selectedLine, selectedColor, formattedDate); }, child: Container( padding: const EdgeInsets.all(20.0), @@ -126,4 +129,32 @@ class _InputDataState extends State { ), ); } +} + +showAlertDialog(BuildContext context, String chosenLine, String chosenColour, String submissionDate) { + + // set up the button + Widget okButton = TextButton( + child: const Text("Pogchamp"), + onPressed: () { + Navigator.of(context).pop(); + }, + ); + + // set up the AlertDialog + AlertDialog alert = AlertDialog( + title: const Text("Submitted (Cached?) Info"), + content: Text("Tram Colour: $chosenColour\nChosen Line: $chosenLine\nSubmitted On:\n$submissionDate"), + actions: [ + okButton, + ], + ); + + // show the dialog + showDialog( + context: context, + builder: (BuildContext context) { + return alert; + }, + ); } \ No newline at end of file From f7a6dbf8aca685c4692a281595c095ffb1e83bd8 Mon Sep 17 00:00:00 2001 From: Supermjork Date: Tue, 26 Dec 2023 17:36:46 +0200 Subject: [PATCH 5/5] Quantified Payload Items (Sending not implemented yet) --- lib/albut.dart | 45 +++++++++++++++++++++++++++++++++++ lib/input_data.dart | 58 ++++++++++++++++++++++++++++++++++++++++----- pubspec.lock | 24 +++++++++++++++++++ pubspec.yaml | 1 + 4 files changed, 122 insertions(+), 6 deletions(-) create mode 100644 lib/albut.dart diff --git a/lib/albut.dart b/lib/albut.dart new file mode 100644 index 0000000..f5f1d04 --- /dev/null +++ b/lib/albut.dart @@ -0,0 +1,45 @@ +import 'dart:convert'; +import 'package:http/http.dart' as http; + +Future createAlbum(String title) async { + final response = await http.post( + Uri.parse('https://jsonplaceholder.typicode.com/albums'), + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + body: jsonEncode({ + 'title': title, + }), + ); + + if (response.statusCode == 201) { + // If the server did return a 201 CREATED response, + // then parse the JSON. + return Album.fromJson(jsonDecode(response.body) as Map); + } else { + // If the server did not return a 201 CREATED response, + // then throw an exception. + throw Exception('Failed to create album.'); + } +} + +class Album { + final int id; + final String title; + + const Album({required this.id, required this.title}); + + factory Album.fromJson(Map json) { + return switch (json) { + { + 'id': int id, + 'title': String title, + } => + Album( + id: id, + title: title, + ), + _ => throw const FormatException('Failed to load album.'), + }; + } +} \ No newline at end of file diff --git a/lib/input_data.dart b/lib/input_data.dart index b5e1a99..539adb6 100644 --- a/lib/input_data.dart +++ b/lib/input_data.dart @@ -11,9 +11,13 @@ class InputData extends StatefulWidget { class _InputDataState extends State { late String selectedColor = 'Blue'; // Default color late String selectedLine = '1'; // Default line + late String selectedDirection = 'Raml'; // Default Station Direction + // Date and Time Info, FULLY DateTime now = DateTime.now(); - String formattedDate = DateFormat('kk:mm:ss \n EEE d MMM').format(DateTime.now()); + + // What will be displayed to the user + String userFormattedString = DateFormat('kk:mm EEE dd MMM').format(DateTime.now()); @override Widget build(BuildContext context) { @@ -72,23 +76,65 @@ class _InputDataState extends State { ), ], ), + + const SizedBox(height: 30), + + const Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text("Direction:"), + SizedBox(width: 20), + ], + ), + + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + DropdownButton( + value: selectedDirection, + items: ['Raml', 'Victoria'].map((String value) { + return DropdownMenuItem( + value: value, + child: Text(value), + ); + }).toList(), + onChanged: (String? newEnd) { + setState(() { + selectedDirection = newEnd ?? 'Victoria'; // Set a default value if newLine is null + }); + }, + ), + ], + ), const SizedBox(height: 30), InkWell( onTap: () { // Grab Data from Dropdowns - selectedColor; + selectedColor; // selectedLine; + + // Conforming by db standard of boolean + bool payloadDirection; + + if (selectedDirection == 'Raml') { + payloadDirection = true; + } else { + payloadDirection = false; + } // Grab Time - formattedDate; + now.weekday; // Day (1 -> 7) !! Starts Monday !! + now.hour; // Hour (0 -> 23) + now.minute; // Minute (0 -> 59) + now.second; // Second (0 -> 59) // Send //lingy plez //prompting of submission - showAlertDialog(context, selectedLine, selectedColor, formattedDate); + showAlertDialog(context, selectedLine, selectedColor, selectedDirection, userFormattedString); }, child: Container( padding: const EdgeInsets.all(20.0), @@ -131,7 +177,7 @@ class _InputDataState extends State { } } -showAlertDialog(BuildContext context, String chosenLine, String chosenColour, String submissionDate) { +showAlertDialog(BuildContext context, String chosenLine, String chosenColour, String chosenDir, String submissionDate) { // set up the button Widget okButton = TextButton( @@ -144,7 +190,7 @@ showAlertDialog(BuildContext context, String chosenLine, String chosenColour, St // set up the AlertDialog AlertDialog alert = AlertDialog( title: const Text("Submitted (Cached?) Info"), - content: Text("Tram Colour: $chosenColour\nChosen Line: $chosenLine\nSubmitted On:\n$submissionDate"), + content: Text("Tram Colour: $chosenColour\n\nChosen Line: $chosenLine\n\nDirection: $chosenDir\n\nSubmitted On: $submissionDate"), actions: [ okButton, ], diff --git a/pubspec.lock b/pubspec.lock index 538754a..33a66a3 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -75,6 +75,22 @@ packages: description: flutter source: sdk version: "0.0.0" + http: + dependency: "direct main" + description: + name: http + sha256: d4872660c46d929f6b8a9ef4e7a7eff7e49bbf0c4ec3f385ee32df5119175139 + url: "https://pub.dev" + source: hosted + version: "1.1.2" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" intl: dependency: "direct main" description: @@ -176,6 +192,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" vector_math: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index dccd6c1..ef6d96f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -36,6 +36,7 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 intl: ^0.19.0 + http: ^1.1.2 dev_dependencies: flutter_test: