implemented scheduled updates for widgets

This commit is contained in:
2025-03-11 15:50:02 +01:00
parent b0bbad7f97
commit 6bbc75fa94
9 changed files with 197 additions and 19 deletions

View File

@ -1,13 +1,14 @@
import 'dart:async';
import 'dart:convert';
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:home_widget/home_widget.dart';
import 'package:provider/provider.dart';
import 'package:screenshot/screenshot.dart';
import 'package:syncfusion_flutter_calendar/calendar.dart';
import '../../model/accountData.dart';
import '../../model/timetable/timetableProps.dart';
import '../../storage/base/settingsProvider.dart';
import '../../theming/darkAppTheme.dart';
@ -15,23 +16,31 @@ import '../../theming/lightAppTheme.dart';
import '../../view/pages/timetable/calendar.dart';
class TimetableHomeWidget {
static Future<void> update(BuildContext context) async {
await AccountData().waitForPopulation();
var data = TimetableProps();
var settings = SettingsProvider();
settings.waitForPopulation();
var completer = Completer();
static void update(BuildContext context) {
var data = Provider.of<TimetableProps>(context, listen: false);
var settings = Provider.of<SettingsProvider>(context, listen: false);
data.addListener(() async {
if(completer.isCompleted) return;
if(data.primaryLoading()) return;
await _generate(data, settings);
completer.complete();
});
if(data.primaryLoading()) {
log('Could not generate widget screen because no data was found!');
return;
}
data.run();
await completer.future;
}
static Future<void> _generate(TimetableProps data, SettingsProvider settings) async {
log('Generating widget screen...');
var screenshotController = ScreenshotController();
var calendarController = CalendarController();
calendarController.displayDate = DateTime.now().copyWith(hour: 07, minute: 00);
screenshotController.captureFromWidget(
delay: Duration(milliseconds: 100),
var imageData = await screenshotController.captureFromWidget(
SizedBox(
height: 700,
width: 300,
@ -55,7 +64,7 @@ class TimetableHomeWidget {
home: ClipRRect(
borderRadius: BorderRadius.circular(20),
child: Scaffold(
body: Calendar(
body: Calendar(
controller: calendarController,
timetableProps: data,
settings: settings,
@ -67,10 +76,10 @@ class TimetableHomeWidget {
),
),
),
).then((value) {
HomeWidget.saveWidgetData<String>('screen', base64.encode(value));
HomeWidget.updateWidget(name: 'TimetableWidget');
log('Widget screen successfully updated! (${value.length})');
});
);
HomeWidget.saveWidgetData<String>('screen', base64.encode(imageData));
HomeWidget.updateWidget(name: 'TimetableWidget');
log('Widget screen successfully updated! (${imageData.length})');
}
}