86 lines
2.8 KiB
Dart
86 lines
2.8 KiB
Dart
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: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';
|
|
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();
|
|
|
|
data.addListener(() async {
|
|
if(completer.isCompleted) return;
|
|
if(data.primaryLoading()) return;
|
|
await _generate(data, settings);
|
|
completer.complete();
|
|
});
|
|
|
|
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);
|
|
|
|
var imageData = await screenshotController.captureFromWidget(
|
|
SizedBox(
|
|
height: 700,
|
|
width: 300,
|
|
child: Directionality(
|
|
textDirection: TextDirection.ltr,
|
|
child: MediaQuery(
|
|
data: MediaQueryData(),
|
|
child: MaterialApp(
|
|
localizationsDelegates: const [
|
|
...GlobalMaterialLocalizations.delegates,
|
|
GlobalWidgetsLocalizations.delegate,
|
|
],
|
|
supportedLocales: const [
|
|
Locale('de'),
|
|
Locale('en'),
|
|
],
|
|
locale: const Locale('de'),
|
|
darkTheme: DarkAppTheme.theme,
|
|
theme: LightAppTheme.theme,
|
|
themeMode: settings.val().appTheme,
|
|
home: ClipRRect(
|
|
borderRadius: BorderRadius.circular(20),
|
|
child: Scaffold(
|
|
body: Calendar(
|
|
controller: calendarController,
|
|
timetableProps: data,
|
|
settings: settings,
|
|
isHomeWidget: true,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
HomeWidget.saveWidgetData<String>('screen', base64.encode(imageData));
|
|
HomeWidget.updateWidget(name: 'TimetableWidget');
|
|
log('Widget screen successfully updated! (${imageData.length})');
|
|
}
|
|
}
|