From 8371a67c1902e09f73cbf86af0dd4fb95996427c Mon Sep 17 00:00:00 2001 From: Sara <sarasdj@stud.ntnu.no> Date: Thu, 4 Apr 2024 14:49:43 +0200 Subject: [PATCH] update: state initialisation --- app/lib/consts.dart | 8 ++- app/lib/main.dart | 5 +- app/lib/pages/default_page.dart | 84 ++++--------------------- app/lib/pages/loading_page.dart | 21 ++++--- app/lib/server_requests/init_state.dart | 36 +++++++++++ 5 files changed, 69 insertions(+), 85 deletions(-) create mode 100644 app/lib/server_requests/init_state.dart diff --git a/app/lib/consts.dart b/app/lib/consts.dart index 4767d5fb..97d7ba83 100644 --- a/app/lib/consts.dart +++ b/app/lib/consts.dart @@ -1,3 +1,5 @@ +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, diff --git a/app/lib/main.dart b/app/lib/main.dart index dcc739fa..b6384264 100644 --- a/app/lib/main.dart +++ b/app/lib/main.dart @@ -1,6 +1,7 @@ -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(), ); } } diff --git a/app/lib/pages/default_page.dart b/app/lib/pages/default_page.dart index 98130863..b87b8029 100644 --- a/app/lib/pages/default_page.dart +++ b/app/lib/pages/default_page.dart @@ -1,15 +1,9 @@ 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, + ), + ], + ), ), ), ); diff --git a/app/lib/pages/loading_page.dart b/app/lib/pages/loading_page.dart index 4952c3fe..79fbee9b 100644 --- a/app/lib/pages/loading_page.dart +++ b/app/lib/pages/loading_page.dart @@ -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, ), diff --git a/app/lib/server_requests/init_state.dart b/app/lib/server_requests/init_state.dart new file mode 100644 index 00000000..b083b463 --- /dev/null +++ b/app/lib/server_requests/init_state.dart @@ -0,0 +1,36 @@ +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 -- GitLab