From c979a99f9691e27e4db131b0b367db385d4baa33 Mon Sep 17 00:00:00 2001
From: Sara <sarasdj@stud.ntnu.no>
Date: Fri, 9 Feb 2024 15:18:29 +0100
Subject: [PATCH] upate: move widgets to separate folder

---
 app/lib/api_handler/fetch_markers.dart        |   0
 app/lib/main.dart                             |   2 +-
 .../{pages_and_widgets => pages}/consts.dart  |   0
 app/lib/pages/default_page.dart               |  89 +++++++++
 .../marker_data.dart                          |   0
 app/lib/pages/widgets/details_widget.dart     |  29 +++
 app/lib/pages/widgets/map_widget.dart         |  77 +++++++
 app/lib/pages_and_widgets/default_page.dart   | 188 ------------------
 8 files changed, 196 insertions(+), 189 deletions(-)
 delete mode 100644 app/lib/api_handler/fetch_markers.dart
 rename app/lib/{pages_and_widgets => pages}/consts.dart (100%)
 create mode 100644 app/lib/pages/default_page.dart
 rename app/lib/{pages_and_widgets => pages}/marker_data.dart (100%)
 create mode 100644 app/lib/pages/widgets/details_widget.dart
 create mode 100644 app/lib/pages/widgets/map_widget.dart
 delete mode 100644 app/lib/pages_and_widgets/default_page.dart

diff --git a/app/lib/api_handler/fetch_markers.dart b/app/lib/api_handler/fetch_markers.dart
deleted file mode 100644
index e69de29b..00000000
diff --git a/app/lib/main.dart b/app/lib/main.dart
index 69778736..10b3118b 100644
--- a/app/lib/main.dart
+++ b/app/lib/main.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import 'pages_and_widgets/default_page.dart';
+import 'pages/default_page.dart';
 
 void main() {
   runApp(MyApp());
diff --git a/app/lib/pages_and_widgets/consts.dart b/app/lib/pages/consts.dart
similarity index 100%
rename from app/lib/pages_and_widgets/consts.dart
rename to app/lib/pages/consts.dart
diff --git a/app/lib/pages/default_page.dart b/app/lib/pages/default_page.dart
new file mode 100644
index 00000000..22779099
--- /dev/null
+++ b/app/lib/pages/default_page.dart
@@ -0,0 +1,89 @@
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+import 'package:flutter/material.dart';
+import 'widgets/map_widget.dart';
+import 'widgets/details_widget.dart';
+import 'marker_data.dart';
+import 'consts.dart';
+
+class DefaultPage extends StatefulWidget {
+  const DefaultPage({super.key});
+
+  @override
+  _DefaultPageState createState() => _DefaultPageState();
+}
+
+class _DefaultPageState extends State<DefaultPage> {
+  late Timer _timer;
+
+  List<MarkerTemplate> markerList = [];
+
+  // fetchMarkerTemplate requests data from the update_map endpoint
+  Future<void> fetchMarkerTemplate() async {
+    try {
+      // Custom HTTP client
+      HttpClient client = HttpClient()
+        ..badCertificateCallback = // NB: temporary disable SSL certificate validation
+            (X509Certificate cert, String host, int port) => true;
+
+      // Request makers from API and wait for response
+      var request =  await client.getUrl(Uri.parse(serverURI+mapEndpoint));
+      var response = await request.close();
+
+      // Attempt to parse json if request is ok
+      if (response.statusCode == 200) {
+        var responseBody = await response.transform(utf8.decoder).join();
+        setState(() {
+          // Parse JSON string from response body
+          List<dynamic> jsonData = json.decode(responseBody);
+
+          // Convert response from type List<dynamic> to List<MarkerTemplate>
+          markerList = jsonData.map((data) => MarkerTemplate.fromJson(data)).toList();
+        });
+      } else {
+        print('Request failed with status: ${response.statusCode}');
+      }
+    } catch (e) {
+      print('Failed to connect to the server: $e');
+    }
+  }
+
+  // State initializer
+  @override
+  void initState() {
+    super.initState();
+    // Call fetchMarkerTemplate when the widget is first created
+    fetchMarkerTemplate();
+
+    // Schedule fetchMarkerTemplate to run periodically based on fetchInterval const
+    const Duration fiveMinutes = Duration(minutes: fetchInterval);
+    _timer = Timer.periodic(fiveMinutes, (timer) {
+      fetchMarkerTemplate();
+    });
+  }
+
+  // Fetch timer
+  @override
+  void dispose() {
+    // Cancel timer on widget termination
+    _timer.cancel();
+    super.dispose();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      appBar: AppBar(
+        title: Text('My Page'),
+      ),
+      body: ListView(
+        children: [
+          MapContainerWidget(markerList: markerList),
+          const SizedBox(height: 30), // Padding between widgets
+          const DetailedInfoContainerWidget(),
+        ],
+      ),
+    );
+  }
+}
\ No newline at end of file
diff --git a/app/lib/pages_and_widgets/marker_data.dart b/app/lib/pages/marker_data.dart
similarity index 100%
rename from app/lib/pages_and_widgets/marker_data.dart
rename to app/lib/pages/marker_data.dart
diff --git a/app/lib/pages/widgets/details_widget.dart b/app/lib/pages/widgets/details_widget.dart
new file mode 100644
index 00000000..d42c4d6f
--- /dev/null
+++ b/app/lib/pages/widgets/details_widget.dart
@@ -0,0 +1,29 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+
+class DetailedInfoContainerWidget extends StatelessWidget {
+  const DetailedInfoContainerWidget({super.key});
+
+  @override
+  Widget build(BuildContext context) {
+    double screenWidth = MediaQuery.of(context).size.width;
+    double boxWidth = 0.9;
+    double boxHeight = 1.5;
+
+    return Container(
+      width: screenWidth * boxWidth,
+      height: screenWidth * boxHeight,
+      color: Colors.blue,
+      child: const Align(
+        alignment: Alignment.topLeft,
+        child: Padding(
+          padding: EdgeInsets.only(top: 10, left: 10), // Edge padding, text
+          child: Text(
+            'Placeholder text',
+            style: TextStyle(fontSize: 20, color: Colors.black),
+          ),
+        ),
+      ),
+    );
+  }
+}
\ No newline at end of file
diff --git a/app/lib/pages/widgets/map_widget.dart b/app/lib/pages/widgets/map_widget.dart
new file mode 100644
index 00000000..cf40ce9e
--- /dev/null
+++ b/app/lib/pages/widgets/map_widget.dart
@@ -0,0 +1,77 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import '../marker_data.dart';
+import 'package:flutter_map/flutter_map.dart';
+import 'package:latlong2/latlong.dart';
+
+class MapContainerWidget extends StatelessWidget {
+  final List<MarkerTemplate> markerList;
+
+  const MapContainerWidget({super.key, required this.markerList});
+
+  @override
+  Widget build(BuildContext context) {
+    double screenWidth = MediaQuery
+        .of(context)
+        .size
+        .width;
+    double boxWidth = 0.9;
+    double boxHeight = 1.5;
+
+    return Container(
+      width: screenWidth * boxWidth,
+      height: screenWidth * boxHeight,
+      color: Colors.blue,
+      child: FlutterMap(
+        options: MapOptions(
+          center: LatLng(60.7666, 10.8471),
+          zoom: 9.0,
+        ),
+        children: [
+          TileLayer(
+            urlTemplate: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
+            subdomains: const ['a', 'b', 'c'],
+          ),
+          MarkerLayer(
+            markers: markerList.map((MarkerTemplate markerTemplate) {
+              return Marker(
+                width: markerTemplate.size,
+                height: markerTemplate.size,
+                point: markerTemplate.location,
+                builder: (ctx) =>
+                    GestureDetector(
+                      onTap: () {
+                        // NB: temporary print
+                        print('Icon tapped');
+                        // NB: trigger function to add contents to the next box
+                      },
+                      child: Image.asset(
+                        'assets/icons/circle-red.png',
+                        // Path to your custom icon asset
+                        color: markerTemplate.color,
+                        width: markerTemplate.size,
+                        height: markerTemplate.size,
+                      ),
+                    ),
+              );
+            }).toList(),
+          ),
+          /*PolygonLayer(
+                        polygons: [
+                          Polygon(
+                            points: [
+                              LatLng(60.7600, 10.8000),
+                              LatLng(60.7600, 11.0000),
+                              LatLng(60.7000, 11.0000),
+                              LatLng(60.7000, 10.8000),
+                            ],
+                            color: Colors.blue,
+                            isFilled: true,
+                          ),
+                        ],
+                      ),*/
+        ],
+      ),
+    );
+  }
+}
\ No newline at end of file
diff --git a/app/lib/pages_and_widgets/default_page.dart b/app/lib/pages_and_widgets/default_page.dart
deleted file mode 100644
index 15471ac0..00000000
--- a/app/lib/pages_and_widgets/default_page.dart
+++ /dev/null
@@ -1,188 +0,0 @@
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
-import 'package:flutter/material.dart';
-import 'package:flutter_map/flutter_map.dart';
-import 'package:latlong2/latlong.dart';
-import 'marker_data.dart';
-import 'consts.dart';
-
-class DefaultPage extends StatefulWidget {
-  const DefaultPage({super.key});
-
-  @override
-  _DefaultPageState createState() => _DefaultPageState();
-}
-
-class _DefaultPageState extends State<DefaultPage> {
-  late Timer _timer;
-
-  List<MarkerTemplate> markerList = [];
-
-  // fetchMarkerTemplate requests data from the update_map endpoint
-  Future<void> fetchMarkerTemplate() async {
-    try {
-      // Custom HTTP client
-      HttpClient client = HttpClient()
-        ..badCertificateCallback = // NB: temporary disable SSL certificate validation
-            (X509Certificate cert, String host, int port) => true;
-
-      // Request makers from API and wait for response
-      var request =  await client.getUrl(Uri.parse(serverURI+mapEndpoint));
-      var response = await request.close();
-
-      // Attempt to parse json if request is ok
-      if (response.statusCode == 200) {
-        var responseBody = await response.transform(utf8.decoder).join();
-        setState(() {
-          // Parse JSON string from response body
-          List<dynamic> jsonData = json.decode(responseBody);
-
-          // Convert response from type List<dynamic> to List<MarkerTemplate>
-          markerList = jsonData.map((data) => MarkerTemplate.fromJson(data)).toList();
-        });
-      } else {
-        print('Request failed with status: ${response.statusCode}');
-      }
-    } catch (e) {
-      print('Failed to connect to the server: $e');
-    }
-  }
-
-  // State initializer
-  @override
-  void initState() {
-    super.initState();
-    // Call fetchMarkerTemplate when the widget is first created
-    fetchMarkerTemplate();
-
-    // Schedule fetchMarkerTemplate to run periodically based on fetchInterval const
-    const Duration fiveMinutes = Duration(minutes: fetchInterval);
-    _timer = Timer.periodic(fiveMinutes, (timer) {
-      fetchMarkerTemplate();
-    });
-  }
-
-  // Fetch timer
-  @override
-  void dispose() {
-    // Cancel timer on widget termination
-    _timer.cancel();
-    super.dispose();
-  }
-
-  @override
-  Widget build(BuildContext context) {
-    return Scaffold(
-      appBar: AppBar(
-        title: Text('My Page'),
-      ),
-      body: ListView(
-        children: [
-          MapContainerWidget(markerList: markerList),
-          const SizedBox(height: 30), // Padding between widgets
-          DetailedInfoContainerWidget(),
-        ],
-      ),
-    );
-  }
-}
-
-class MapContainerWidget extends StatelessWidget {
-  final List<MarkerTemplate> markerList;
-
-  const MapContainerWidget({super.key, required this.markerList});
-
-  @override
-  Widget build(BuildContext context) {
-    double screenWidth = MediaQuery
-        .of(context)
-        .size
-        .width;
-    double boxWidth = 0.9;
-    double boxHeight = 1.5;
-
-    return Container(
-      width: screenWidth * boxWidth,
-      height: screenWidth * boxHeight,
-      color: Colors.blue,
-      child: FlutterMap(
-        options: MapOptions(
-          center: LatLng(60.7666, 10.8471),
-          zoom: 9.0,
-        ),
-        children: [
-          TileLayer(
-            urlTemplate: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
-            subdomains: const ['a', 'b', 'c'],
-          ),
-          MarkerLayer(
-            markers: markerList.map((MarkerTemplate markerTemplate) {
-              return Marker(
-                width: markerTemplate.size,
-                height: markerTemplate.size,
-                point: markerTemplate.location,
-                builder: (ctx) =>
-                    GestureDetector(
-                      onTap: () {
-                        // NB: temporary print
-                        print('Icon tapped');
-                        // NB: trigger function to add contents to the next box
-                      },
-                      child: Image.asset(
-                        'assets/icons/circle-red.png',
-                        // Path to your custom icon asset
-                        color: markerTemplate.color,
-                        width: markerTemplate.size,
-                        height: markerTemplate.size,
-                      ),
-                    ),
-              );
-            }).toList(),
-          ),
-          /*PolygonLayer(
-                        polygons: [
-                          Polygon(
-                            points: [
-                              LatLng(60.7600, 10.8000),
-                              LatLng(60.7600, 11.0000),
-                              LatLng(60.7000, 11.0000),
-                              LatLng(60.7000, 10.8000),
-                            ],
-                            color: Colors.blue,
-                            isFilled: true,
-                          ),
-                        ],
-                      ),*/
-        ],
-      ),
-    );
-  }
-}
-
-class DetailedInfoContainerWidget extends StatelessWidget {
-  const DetailedInfoContainerWidget({super.key});
-
-    @override
-    Widget build(BuildContext context) {
-    double screenWidth = MediaQuery.of(context).size.width;
-    double boxWidth = 0.9;
-    double boxHeight = 1.5;
-
-    return Container(
-      width: screenWidth * boxWidth,
-      height: screenWidth * boxHeight,
-      color: Colors.blue,
-        child: const Align(
-        alignment: Alignment.topLeft,
-        child: Padding(
-            padding: EdgeInsets.only(top: 10, left: 10), // Edge padding, text
-            child: Text(
-            'Placeholder text',
-            style: TextStyle(fontSize: 20, color: Colors.black),
-            ),
-          ),
-        ),
-      );
-    }
-  }
\ No newline at end of file
-- 
GitLab