-
Maximilian Betz authoredMaximilian Betz authored
viewevents.dart 7.72 KiB
import 'dart:convert';
import 'package:flutter/material.dart';
import 'datamodel.dart';
import 'package:http/http.dart' as http;
import 'sensorconnector.dart';
class ViewEvents extends StatefulWidget {
const ViewEvents({Key? key}) : super(key: key);
@override
_ViewEvents createState() => _ViewEvents();
}
class _ViewEvents extends State<ViewEvents> {
// Get singleton to access locally stored events:
EventStoreInstance _events = EventStoreInstance();
String _sync_status = '';
//TODO: add exception handling and display exceptions to user.
@override
void initState() {
_sync_status = _events.getPendingEventCount().toString() + ' event(s) pending';
super.initState();
}
Future<bool> syncEvents() async {
//final EventStoreInstance events = EventStoreInstance();
final ConfigurationStoreInstance configuration = ConfigurationStoreInstance();
SensorConnector connection = SensorConnector();
int _synccounter = 0; //For displaying progress during event upload
String? token = await connection.getAuthToken(configuration.loginInformation.mail,
configuration.loginInformation.password);
if (token != null) {
_synccounter = _events.getPendingEventCount();
debugPrint('Number of Events: ' + _events.events.length.toString());
debugPrint('Number of Pending Events: ' + _synccounter.toString());
var index = 0;
for (var event in _events.events) {
if (event.status == 'PENDING') {
debugPrint('Idx: ' + index.toString() + ' ' +
event.toSensorJson().toString());
index++;
if (await connection.putEvent(event, token) == true){
//Event has been posted to Sensor.
_synccounter--;
debugPrint('put success, remaining events: ' + _synccounter.toString());
event.status = 'EXPORTED'; //Update event status so that it is only exported once.
setState(() {});
}else{
_sync_status = 'export failed: ' + event.urn;
}
}
}
_sync_status = 'export success';
return true;
}
return false;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("View Added Events"),
),
body: Container(
margin: const EdgeInsets.symmetric(horizontal: 5.0),