Skip to content
Snippets Groups Projects
Commit c979a99f authored by Sara Savanovic Djordjevic's avatar Sara Savanovic Djordjevic
Browse files

upate: move widgets to separate folder

parent a00eeff8
No related branches found
No related tags found
No related merge requests found
import 'package:flutter/material.dart';
import 'pages_and_widgets/default_page.dart';
import 'pages/default_page.dart';
void main() {
runApp(MyApp());
......
File moved
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
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
import 'dart:async';
import 'dart:convert';
import 'dart:io';
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';
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;
......@@ -158,31 +74,4 @@ class MapContainerWidget extends StatelessWidget {
),
);
}
}
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
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment