added timetable widget for android devices

This commit is contained in:
2025-02-16 18:08:04 +01:00
parent 769fbc1b6a
commit b0bbad7f97
25 changed files with 650 additions and 300 deletions

View File

@ -0,0 +1,76 @@
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/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 void update(BuildContext context) {
var data = Provider.of<TimetableProps>(context, listen: false);
var settings = Provider.of<SettingsProvider>(context, listen: false);
if(data.primaryLoading()) {
log('Could not generate widget screen because no data was found!');
return;
}
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),
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,
),
),
),
),
),
),
),
).then((value) {
HomeWidget.saveWidgetData<String>('screen', base64.encode(value));
HomeWidget.updateWidget(name: 'TimetableWidget');
log('Widget screen successfully updated! (${value.length})');
});
}
}