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

update: state initialisation

parent 5e3ff611
No related branches found
No related tags found
1 merge request!10Clhp map
import 'dart:typed_data';
import 'package:app/data_classes.dart';
import 'package:latlong2/latlong.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
......@@ -9,11 +11,13 @@ const String mapEndpoint = "update_map";
const int fetchInterval = 60; // Fetch marker data every n minutes
// Map variables
String selectedLake = 'Mjøsa'; // Initialise to Mjøsa, NB should be initialised to last selected lake
String selectedLake = 'Mjøsa'; // Init to Mjøsa, NB should be initialised to last selected lake
Uint8List selectedRelation = Uint8List(0);
List<Measurement> selectedMarkerList = [];
LatLng mapCenter = LatLng(60.8000, 10.8471);
DateTime ?lastUpdate; // Last time data was fetched from server
// Font variables
// Font settings
const textColor = Colors.white;
final appTitleStyle = GoogleFonts.chakraPetch(
fontSize: 35,
......
import 'pages/default_page.dart';
import 'package:flutter/material.dart';
import 'pages/loading_page.dart';
void main() {
runApp(const MyApp());
}
......@@ -11,7 +12,7 @@ class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: DefaultPage(),
home: LoadingPage(),
);
}
}
import 'dart:async';
import 'dart:typed_data';
import 'package:fuzzy/fuzzy.dart';
import 'package:flutter/material.dart';
import '../consts.dart';
import 'loading_page.dart';
import '../widgets/main_layout.dart';
import '../data_classes.dart';
import '../utils/custom_search_delegate.dart';
import '../server_requests/fetch_markers.dart';
import '../server_requests/fetch_relation.dart';
class DefaultPage extends StatefulWidget {
const DefaultPage({Key? key}) : super(key: key);
......@@ -23,38 +17,6 @@ class _DefaultPageState extends State<DefaultPage> {
bool serverConnection = true;
bool dialogShown = false;
late Future<List<Measurement>> markerListFuture;
late Future<Uint8List> relationFuture;
@override
void initState() {
super.initState();
// Try to fetch measurement data from server
markerListFuture = fetchMeasurements().then((fetchResult) {
List<Measurement> measurements = fetchResult.measurements;
serverConnection = fetchResult.connected;
// Return the measurements
return measurements;
}).catchError((error) {
serverConnection = false;
throw Exception("Failed to fetch measurements: $error");
});
// Attempt to fetch relation from server if app establishes connection
if (serverConnection){
relationFuture = fetchRelation();
} else { // Read last saved data
relationFuture = loadSavedRelation();
}
// Schedule fetchMarkerData to run periodically based on fetchInterval
const Duration interval = Duration(minutes: fetchInterval); // NB fetchInterval value to be determined
_timer = Timer.periodic(interval, (timer) {
fetchMeasurements();
});
}
@override
void dispose() {
_timer.cancel();
......@@ -116,22 +78,6 @@ class _DefaultPageState extends State<DefaultPage> {
context: context,
delegate: CustomSearchDelegate((String result) {
setState(() {
markerListFuture = fetchMeasurements().then((fetchResult) {
List<Measurement> measurements = fetchResult.measurements;
serverConnection = fetchResult.connected;
return measurements;
}).catchError((error) {
serverConnection = false;
throw Exception("Failed to fetch measurements: $error");
});
if (serverConnection){
relationFuture = fetchRelation();
} else { // Read last saved data
relationFuture = loadSavedRelation();
}
selectedLake = result;
});
}),
......@@ -140,25 +86,17 @@ class _DefaultPageState extends State<DefaultPage> {
),
],
),
body: FutureBuilder(
future: Future.wait([markerListFuture, relationFuture]),
builder: (BuildContext context, AsyncSnapshot<List<dynamic>> snapshot) {
List<Measurement> markerList = snapshot.data![0] as List<Measurement>;
Uint8List relation = snapshot.data![1] as Uint8List;
return Container( // Return container with list view and background color
color: const Color(0xff151515),
child: ListView(
children: [
MapContainerWidget(
markerList: markerList,
relation: relation,
serverConnection: serverConnection,
),
],
),
);
}
body: Container( // Return container with list view and background color
color: const Color(0xff151515),
child: ListView(
children: [
MapContainerWidget(
markerList: selectedMarkerList,
relation: selectedRelation,
serverConnection: serverConnection,
),
],
),
),
),
);
......
......@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'default_page.dart';
import '../server_requests/init_state.dart';
class LoadingPage extends StatefulWidget {
const LoadingPage({super.key});
......@@ -19,13 +20,17 @@ class _LoadingPageState extends State<LoadingPage>
// Remove app bar
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
// Hold loading page for 5 seconds before navigating to the default page
Future.delayed(const Duration(seconds: 5), () {
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (_) => const DefaultPage(),
)
);
});
// Call initialiseState() asynchronously and wait for it to complete
_navigateToDefaultPage();
}
Future<void> _navigateToDefaultPage() async {
await initialiseState();
// Navigate to the default page once state is initialised
Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (_) => const DefaultPage(),
));
}
@override
......@@ -52,7 +57,7 @@ class _LoadingPageState extends State<LoadingPage>
child: Column(
children: [
Image.asset(
'assets/icons/frozen.png', // Loading screen icon
'assets/icons/frozen.png',
// Icon from: https://www.flaticon.com/free-icons/cold-water"
color: Colors.grey,
),
......
import 'dart:async';
import 'dart:typed_data';
import 'package:app/consts.dart';
import '../data_classes.dart';
import '../server_requests/fetch_markers.dart';
import '../server_requests/fetch_relation.dart';
Future<void> initialiseState() async{
bool serverConnection = true;
late Future<List<Measurement>> markerListFuture;
late Future<Uint8List> relationFuture;
// Try to fetch measurement data from server
markerListFuture = fetchMeasurements().then((fetchResult) {
List<Measurement> measurements = fetchResult.measurements;
serverConnection = fetchResult.connected;
// Return the measurements
return measurements;
}).catchError((error) {
serverConnection = false;
throw Exception("Failed to fetch measurements: $error");
});
// Attempt to fetch relation from server if app establishes connection
if (serverConnection) {
relationFuture = fetchRelation();
} else { // Read last saved data
relationFuture = loadSavedRelation();
}
selectedRelation = await relationFuture;
selectedMarkerList = await markerListFuture;
}
\ 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