claude refactorings, flutter best practices, platform dependent changes, general cleanup

This commit is contained in:
2026-05-06 11:58:50 +02:00
parent 4b1d4379a0
commit 4e1272aba9
281 changed files with 1948 additions and 1041 deletions
@@ -1,6 +1,6 @@
import 'package:dio/dio.dart';
import '../../infrastructure/dataLoader/data_loader.dart';
import '../../infrastructure/data_loader/data_loader.dart';
abstract class HolidayDataLoader<TResult> extends DataLoader<TResult> {
HolidayDataLoader() : super(Dio(BaseOptions(
@@ -1,6 +1,6 @@
import 'package:dio/dio.dart';
import '../../infrastructure/dataLoader/data_loader.dart';
import '../../infrastructure/data_loader/data_loader.dart';
abstract class MhslDataLoader<TResult> extends DataLoader<TResult> {
MhslDataLoader() : super(Dio(BaseOptions(
@@ -6,9 +6,9 @@ import 'package:dio/dio.dart';
abstract class DataLoader<TResult> {
final Dio dio;
DataLoader(this.dio) {
dio.options.connectTimeout = const Duration(seconds: 10).inMilliseconds;
dio.options.sendTimeout = const Duration(seconds: 30).inMilliseconds;
dio.options.receiveTimeout = const Duration(seconds: 30).inMilliseconds;
dio.options.connectTimeout = const Duration(seconds: 10);
dio.options.sendTimeout = const Duration(seconds: 30);
dio.options.receiveTimeout = const Duration(seconds: 30);
}
Future<TResult> run() async {
@@ -26,7 +26,7 @@ abstract class DataLoader<TResult> {
));
} catch(trace, e) {
log(trace.toString());
throw(e);
throw e;
}
}
@@ -1,8 +1,8 @@
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:jiffy/jiffy.dart';
import 'loadable_state_event.dart';
@@ -21,7 +21,7 @@ class LoadableStateBloc extends Bloc<LoadableStateEvent, LoadableStateState> {
}
});
emitConnectivity(List<ConnectivityResult> result) => add(ConnectivityChanged(LoadableStateState(connections: result)));
void emitConnectivity(List<ConnectivityResult> result) => add(ConnectivityChanged(LoadableStateState(connections: result)));
Connectivity().checkConnectivity().then(emitConnectivity);
_updateStream = Connectivity().onConnectivityChanged.listen(emitConnectivity);
@@ -1,10 +1,9 @@
import 'package:bloc/bloc.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../../../../../widget/conditional_wrapper.dart';
import '../../utilityWidgets/bloc_module.dart';
import '../../utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../utility_widgets/bloc_module.dart';
import '../../utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import '../bloc/loadable_state_bloc.dart';
import '../bloc/loadable_state_state.dart';
import '../loadable_state.dart';
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../../../../../widget/info_dialog.dart';
import '../bloc/loadable_state_bloc.dart';
@@ -3,10 +3,10 @@ import 'dart:developer';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import '../../../../../api/errors/error_mapper.dart';
import '../../loadableState/loading_error.dart';
import '../../loadable_state/loadable_state.dart';
import '../../loadable_state/loading_error.dart';
import '../../repository/repository.dart';
import 'loadable_hydrated_bloc_event.dart';
import '../../loadableState/loadable_state.dart';
import 'loadable_save_context.dart';
abstract class LoadableHydratedBloc<
@@ -90,7 +90,7 @@ abstract class LoadableHydratedBloc<
}
@override
fromJson(Map<String, dynamic> json) {
LoadableState<TState> fromJson(Map<String, dynamic> json) {
var rawData = LoadableSaveContext.unwrap(json);
return LoadableState(
isLoading: true,
@@ -1,4 +1,4 @@
import '../../loadableState/loading_error.dart';
import '../../loadable_state/loading_error.dart';
class LoadableHydratedBlocEvent<TState> {}
class Emit<TState> extends LoadableHydratedBlocEvent<TState> {
@@ -19,5 +19,5 @@ abstract class LoadableSaveContext with _$LoadableSaveContext {
{dataKey: data, metaKey: LoadableSaveContext(timestamp: lastFetch).toJson()};
static ({Map<String, dynamic> data, LoadableSaveContext meta}) unwrap(Map<String, dynamic> data) =>
(data: data[dataKey] as Map<String, dynamic>, meta: LoadableSaveContext.fromJson(data[metaKey]));
(data: data[dataKey] as Map<String, dynamic>, meta: LoadableSaveContext.fromJson(data[metaKey] as Map<String, dynamic>));
}
+10 -11
View File
@@ -1,10 +1,9 @@
import 'package:flutter/material.dart';
import 'package:persistent_bottom_nav_bar_v2/persistent_bottom_nav_bar_v2.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:badges/badges.dart' as badges;
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:persistent_bottom_nav_bar_v2/persistent_bottom_nav_bar_v2.dart';
import '../../../api/mhsl/breaker/getBreakers/getBreakersResponse.dart';
import '../../../api/mhsl/breaker/get_breakers/get_breakers_response.dart';
import '../../../routing/app_routes.dart';
import '../../../view/pages/files/files.dart';
import '../../../view/pages/grade_averages/grade_averages_view.dart';
@@ -16,9 +15,9 @@ import '../../../view/pages/talk/chat_list.dart';
import '../../../view/pages/timetable/timetable.dart';
import '../../../widget/breaker/breaker.dart';
import '../../../widget/centered_leading.dart';
import '../infrastructure/loadableState/loadable_state.dart';
import 'chatList/bloc/chat_list_bloc.dart';
import 'chatList/bloc/chat_list_state.dart';
import '../infrastructure/loadable_state/loadable_state.dart';
import 'chat_list/bloc/chat_list_bloc.dart';
import 'chat_list/bloc/chat_list_state.dart';
import 'settings/bloc/settings_cubit.dart';
class AppModule {
@@ -30,8 +29,8 @@ class AppModule {
AppModule(this.module, {required this.name, required this.icon, this.breakerArea = BreakerArea.global, required this.create});
static Map<Modules, AppModule> modules(BuildContext context, { showFiltered = false }) {
var settings = context.read<SettingsCubit>();
static Map<Modules, AppModule> modules(BuildContext context, {bool showFiltered = false}) {
final settings = context.read<SettingsCubit>();
var available = {
Modules.timetable: AppModule(
Modules.timetable,
@@ -109,7 +108,7 @@ class AppModule {
),
};
if(!showFiltered) available.removeWhere((key, value) => settings.val().modulesSettings.hiddenModules.contains(key));
if (!showFiltered) available.removeWhere((key, value) => settings.val().modulesSettings.hiddenModules.contains(key));
return { for (var element in settings.val().modulesSettings.moduleOrder.where((element) => available.containsKey(element))) element : available[element]! };
}
@@ -1,9 +1,9 @@
import 'package:flutter/foundation.dart';
import 'package:package_info_plus/package_info_plus.dart';
import '../../../../../api/mhsl/breaker/getBreakers/getBreakersResponse.dart';
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../../../api/mhsl/breaker/get_breakers/get_breakers_response.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import '../repository/breaker_repository.dart';
import 'breaker_event.dart';
import 'breaker_state.dart';
@@ -1,4 +1,4 @@
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import 'breaker_state.dart';
sealed class BreakerEvent extends LoadableHydratedBlocEvent<BreakerState> {}
@@ -1,6 +1,6 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import '../../../../../api/mhsl/breaker/getBreakers/getBreakersResponse.dart';
import '../../../../../api/mhsl/breaker/get_breakers/get_breakers_response.dart';
part 'breaker_state.freezed.dart';
part 'breaker_state.g.dart';
@@ -1,7 +1,7 @@
import 'dart:async';
import '../../../../../api/mhsl/breaker/getBreakers/getBreakersCache.dart';
import '../../../../../api/mhsl/breaker/getBreakers/getBreakersResponse.dart';
import '../../../../../api/mhsl/breaker/get_breakers/get_breakers_cache.dart';
import '../../../../../api/mhsl/breaker/get_breakers/get_breakers_response.dart';
class BreakerDataProvider {
Future<GetBreakersResponse> getBreakers() {
@@ -1,6 +1,6 @@
import '../../../infrastructure/repository/repository.dart';
import '../bloc/breaker_state.dart';
import '../dataProvider/breaker_data_provider.dart';
import '../data_provider/breaker_data_provider.dart';
class BreakerRepository extends Repository<BreakerState> {
final BreakerDataProvider _provider;
@@ -1,8 +1,8 @@
import '../../../../../api/errors/error_mapper.dart';
import '../../../../../api/marianumcloud/talk/chat/getChatResponse.dart';
import '../../../infrastructure/loadableState/loading_error.dart';
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../../../api/marianumcloud/talk/chat/get_chat_response.dart';
import '../../../infrastructure/loadable_state/loading_error.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import '../repository/chat_repository.dart';
import 'chat_event.dart';
import 'chat_state.dart';
@@ -1,4 +1,4 @@
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import 'chat_state.dart';
sealed class ChatEvent extends LoadableHydratedBlocEvent<ChatState> {}
@@ -1,6 +1,6 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import '../../../../../api/marianumcloud/talk/chat/getChatResponse.dart';
import '../../../../../api/marianumcloud/talk/chat/get_chat_response.dart';
part 'chat_state.freezed.dart';
part 'chat_state.g.dart';
@@ -1,5 +1,5 @@
import '../../../../../api/marianumcloud/talk/chat/getChatCache.dart';
import '../../../../../api/marianumcloud/talk/chat/getChatResponse.dart';
import '../../../../../api/marianumcloud/talk/chat/get_chat_cache.dart';
import '../../../../../api/marianumcloud/talk/chat/get_chat_response.dart';
class ChatDataProvider {
Future<GetChatResponse> getChat({
@@ -1,6 +1,6 @@
import '../../../infrastructure/repository/repository.dart';
import '../bloc/chat_state.dart';
import '../dataProvider/chat_data_provider.dart';
import '../data_provider/chat_data_provider.dart';
class ChatRepository extends Repository<ChatState> {
final ChatDataProvider _provider;
@@ -1,9 +1,12 @@
import 'dart:developer';
import 'package:flutter_app_badge/flutter_app_badge.dart';
import '../../../../../api/errors/error_mapper.dart';
import '../../../infrastructure/loadableState/loading_error.dart';
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../../../api/marianumcloud/talk/room/get_room_response.dart';
import '../../../infrastructure/loadable_state/loading_error.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import '../repository/chat_list_repository.dart';
import 'chat_list_event.dart';
import 'chat_list_state.dart';
@@ -72,10 +75,12 @@ class ChatListBloc extends LoadableHydratedBloc<ChatListEvent, ChatListState, Ch
await refresh();
}
void _updateAppBadge(dynamic rooms) {
void _updateAppBadge(GetRoomResponse rooms) {
try {
final unread = rooms.data.map((e) => e.unreadMessages).fold<int>(0, (a, b) => a + b as int);
final unread = rooms.data.fold<int>(0, (a, room) => a + room.unreadMessages);
FlutterAppBadge.count(unread);
} catch (_) {}
} on Object catch (e) {
log('Failed to update app badge: $e');
}
}
}
@@ -1,4 +1,4 @@
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import 'chat_list_state.dart';
sealed class ChatListEvent extends LoadableHydratedBlocEvent<ChatListState> {}
@@ -1,6 +1,6 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import '../../../../../api/marianumcloud/talk/room/getRoomResponse.dart';
import '../../../../../api/marianumcloud/talk/room/get_room_response.dart';
part 'chat_list_state.freezed.dart';
part 'chat_list_state.g.dart';
@@ -1,7 +1,7 @@
import '../../../../../api/marianumcloud/talk/room/getRoomCache.dart';
import '../../../../../api/marianumcloud/talk/room/getRoomResponse.dart';
import '../../../../../api/marianumcloud/talk/createRoom/createRoom.dart';
import '../../../../../api/marianumcloud/talk/createRoom/createRoomParams.dart';
import '../../../../../api/marianumcloud/talk/create_room/create_room.dart';
import '../../../../../api/marianumcloud/talk/create_room/create_room_params.dart';
import '../../../../../api/marianumcloud/talk/room/get_room_cache.dart';
import '../../../../../api/marianumcloud/talk/room/get_room_response.dart';
class ChatListDataProvider {
Future<GetRoomResponse> getRooms({
@@ -1,6 +1,6 @@
import '../../../infrastructure/repository/repository.dart';
import '../bloc/chat_list_state.dart';
import '../dataProvider/chat_list_data_provider.dart';
import '../data_provider/chat_list_data_provider.dart';
class ChatListRepository extends Repository<ChatListState> {
final ChatListDataProvider _provider;
@@ -1,8 +1,8 @@
import '../../../../../api/errors/error_mapper.dart';
import '../../../../../api/marianumcloud/webdav/queries/listFiles/listFilesResponse.dart';
import '../../../infrastructure/loadableState/loading_error.dart';
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../../../api/marianumcloud/webdav/queries/list_files/list_files_response.dart';
import '../../../infrastructure/loadable_state/loading_error.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import '../repository/files_repository.dart';
import 'files_event.dart';
import 'files_state.dart';
@@ -1,4 +1,4 @@
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import 'files_state.dart';
sealed class FilesEvent extends LoadableHydratedBlocEvent<FilesState> {}
@@ -1,6 +1,6 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import '../../../../../api/marianumcloud/webdav/queries/listFiles/listFilesResponse.dart';
import '../../../../../api/marianumcloud/webdav/queries/list_files/list_files_response.dart';
part 'files_state.freezed.dart';
part 'files_state.g.dart';
@@ -1,8 +1,8 @@
import 'package:nextcloud/nextcloud.dart';
import '../../../../../api/marianumcloud/webdav/queries/listFiles/listFilesCache.dart';
import '../../../../../api/marianumcloud/webdav/queries/listFiles/listFilesResponse.dart';
import '../../../../../api/marianumcloud/webdav/webdavApi.dart';
import '../../../../../api/marianumcloud/webdav/queries/list_files/list_files_cache.dart';
import '../../../../../api/marianumcloud/webdav/queries/list_files/list_files_response.dart';
import '../../../../../api/marianumcloud/webdav/webdav_api.dart';
class FilesDataProvider {
/// Lists files at [path]. Cached payload is delivered via [onCacheData] as
@@ -1,6 +1,6 @@
import '../../../infrastructure/repository/repository.dart';
import '../bloc/files_state.dart';
import '../dataProvider/files_data_provider.dart';
import '../data_provider/files_data_provider.dart';
class FilesRepository extends Repository<FilesState> {
final FilesDataProvider _provider;
@@ -1,5 +1,5 @@
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import '../repository/holidays_repository.dart';
import 'holidays_event.dart';
import 'holidays_state.dart';
@@ -22,16 +22,16 @@ class HolidaysBloc extends LoadableHydratedBloc<HolidaysEvent, HolidaysState, Ho
.toList() ?? [];
@override
fromNothing() => const HolidaysState(showPastHolidays: false, holidays: [], showDisclaimer: true);
HolidaysState fromNothing() => const HolidaysState(showPastHolidays: false, holidays: [], showDisclaimer: true);
@override
fromStorage(Map<String, dynamic> json) => HolidaysState.fromJson(json);
HolidaysState fromStorage(Map<String, dynamic> json) => HolidaysState.fromJson(json);
@override
Future<void> gatherData() async {
var holidays = await repo.getHolidays();
add(DataGathered((state) => state.copyWith(holidays: holidays)));
}
@override
repository() => HolidaysRepository();
HolidaysRepository repository() => HolidaysRepository();
@override
Map<String, dynamic>? toStorage(state) => state.toJson();
}
@@ -1,4 +1,4 @@
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import 'holidays_state.dart';
sealed class HolidaysEvent extends LoadableHydratedBlocEvent<HolidaysState> {}
@@ -1,5 +1,5 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:flutter/foundation.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'holidays_state.freezed.dart';
part 'holidays_state.g.dart';
@@ -1,7 +1,7 @@
import 'package:dio/dio.dart';
import '../../../basis/dataloader/holiday_data_loader.dart';
import '../../../infrastructure/dataLoader/data_loader.dart';
import '../../../infrastructure/data_loader/data_loader.dart';
import '../bloc/holidays_state.dart';
class HolidaysGetHolidays extends HolidayDataLoader<List<Holiday>> {
@@ -1,6 +1,6 @@
import '../../../infrastructure/repository/repository.dart';
import '../bloc/holidays_state.dart';
import '../dataProvider/holidays_get_holidays.dart';
import '../data_provider/holidays_get_holidays.dart';
class HolidaysRepository extends Repository<HolidaysState> {
Future<List<Holiday>> getHolidays() => HolidaysGetHolidays().run();
@@ -1,5 +1,5 @@
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import '../repository/marianum_dates_repository.dart';
import 'marianum_dates_event.dart';
import 'marianum_dates_state.dart';
@@ -18,16 +18,16 @@ class MarianumDatesBloc extends LoadableHydratedBloc<MarianumDatesEvent, Marianu
.toList() ?? [];
@override
fromNothing() => const MarianumDatesState(showPastEvents: false, events: []);
MarianumDatesState fromNothing() => const MarianumDatesState(showPastEvents: false, events: []);
@override
fromStorage(Map<String, dynamic> json) => MarianumDatesState.fromJson(json);
MarianumDatesState fromStorage(Map<String, dynamic> json) => MarianumDatesState.fromJson(json);
@override
Future<void> gatherData() async {
final events = await repo.getEvents();
add(DataGathered((state) => state.copyWith(events: events)));
}
@override
repository() => MarianumDatesRepository();
MarianumDatesRepository repository() => MarianumDatesRepository();
@override
Map<String, dynamic>? toStorage(state) => state.toJson();
}
@@ -1,4 +1,4 @@
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import 'marianum_dates_state.dart';
sealed class MarianumDatesEvent extends LoadableHydratedBlocEvent<MarianumDatesState> {}
@@ -1,5 +1,5 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:flutter/foundation.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'marianum_dates_state.freezed.dart';
part 'marianum_dates_state.g.dart';
@@ -7,8 +7,8 @@ class MarianumDatesGetEvents {
static const String url = 'https://public-cal.marianumlan.de/cal_public/ad4c5da8-7466-9c72-89cb-8b8d9a5cf26c';
final Dio _dio = Dio(BaseOptions(
connectTimeout: const Duration(seconds: 10).inMilliseconds,
receiveTimeout: const Duration(seconds: 30).inMilliseconds,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 30),
));
Future<List<MarianumDate>> run() async {
@@ -1,6 +1,6 @@
import '../../../infrastructure/repository/repository.dart';
import '../bloc/marianum_dates_state.dart';
import '../dataProvider/marianum_dates_get_events.dart';
import '../data_provider/marianum_dates_get_events.dart';
class MarianumDatesRepository extends Repository<MarianumDatesState> {
Future<List<MarianumDate>> getEvents() => MarianumDatesGetEvents().run();
@@ -1,5 +1,5 @@
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import '../repository/marianum_message_repository.dart';
import 'marianum_message_event.dart';
import 'marianum_message_state.dart';
@@ -1,4 +1,4 @@
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import 'marianum_message_state.dart';
sealed class MarianumMessageEvent extends LoadableHydratedBlocEvent<MarianumMessageState> {}
@@ -1,12 +1,12 @@
import 'package:dio/dio.dart';
import '../../../infrastructure/dataLoader/data_loader.dart';
import '../../../basis/dataloader/mhsl_data_loader.dart';
import '../../../infrastructure/data_loader/data_loader.dart';
import '../bloc/marianum_message_state.dart';
class MarianumMessageGetMessages extends MhslDataLoader<MarianumMessageList> {
@override
Future<Response<String>> fetch() async => dio.get('/message/messages.json');
@override
MarianumMessageList assemble(DataLoaderResult data) => MarianumMessageList.fromJson(data.json);
MarianumMessageList assemble(DataLoaderResult data) => MarianumMessageList.fromJson(data.asMap());
}
@@ -1,6 +1,6 @@
import '../../../infrastructure/repository/repository.dart';
import '../bloc/marianum_message_state.dart';
import '../dataProvider/marianum_message_get_messages.dart';
import '../data_provider/marianum_message_get_messages.dart';
class MarianumMessageRepository extends Repository<MarianumMessageState> {
Future<MarianumMessageList> getMessages() => MarianumMessageGetMessages().run();
@@ -1,10 +1,10 @@
import 'dart:async';
import 'dart:developer';
import 'package:easy_debounce/easy_debounce.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import '../../../../../storage/settings.dart';
import '../../../../../utils/debouncer.dart';
import '../../../../../view/pages/settings/data/default_settings.dart';
import '../../app_modules.dart';
@@ -27,7 +27,7 @@ class SettingsCubit extends HydratedCubit<Settings> {
_emitFreshInstance();
});
}
EasyDebounce.debounce(_debounceTag, const Duration(milliseconds: 500), _emitFreshInstance);
Debouncer.debounce(_debounceTag, const Duration(milliseconds: 500), _emitFreshInstance);
}
return state;
}
@@ -77,7 +77,7 @@ class SettingsCubit extends HydratedCubit<Settings> {
oldMap.forEach((key, value) {
if (merged.containsKey(key)) {
if (value is Map<String, dynamic> && merged[key] is Map<String, dynamic>) {
merged[key] = _mergeSettings(value, merged[key]);
merged[key] = _mergeSettings(value, merged[key] as Map<String, dynamic>);
} else {
merged[key] = value;
}
@@ -1,9 +1,9 @@
import 'package:intl/intl.dart';
import '../../../../../api/mhsl/customTimetableEvent/customTimetableEvent.dart';
import '../../../../../api/webuntis/queries/getTimetable/getTimetableResponse.dart';
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../../../api/mhsl/custom_timetable_event/custom_timetable_event.dart';
import '../../../../../api/webuntis/queries/get_timetable/get_timetable_response.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import '../repository/timetable_repository.dart';
import 'timetable_event.dart';
import 'timetable_state.dart';
@@ -1,4 +1,4 @@
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart';
import 'timetable_state.dart';
sealed class TimetableEvent extends LoadableHydratedBlocEvent<TimetableState> {}
@@ -1,11 +1,11 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import '../../../../../api/mhsl/customTimetableEvent/get/getCustomTimetableEventResponse.dart';
import '../../../../../api/webuntis/queries/getHolidays/getHolidaysResponse.dart';
import '../../../../../api/webuntis/queries/getRooms/getRoomsResponse.dart';
import '../../../../../api/webuntis/queries/getSubjects/getSubjectsResponse.dart';
import '../../../../../api/webuntis/queries/getTimegridUnits/getTimegridUnitsResponse.dart';
import '../../../../../api/webuntis/queries/getTimetable/getTimetableResponse.dart';
import '../../../../../api/mhsl/custom_timetable_event/get/get_custom_timetable_event_response.dart';
import '../../../../../api/webuntis/queries/get_holidays/get_holidays_response.dart';
import '../../../../../api/webuntis/queries/get_rooms/get_rooms_response.dart';
import '../../../../../api/webuntis/queries/get_subjects/get_subjects_response.dart';
import '../../../../../api/webuntis/queries/get_timegrid_units/get_timegrid_units_response.dart';
import '../../../../../api/webuntis/queries/get_timetable/get_timetable_response.dart';
part 'timetable_state.freezed.dart';
part 'timetable_state.g.dart';
@@ -1,25 +1,25 @@
import 'package:intl/intl.dart';
import '../../../../../api/mhsl/customTimetableEvent/add/addCustomTimetableEvent.dart';
import '../../../../../api/mhsl/customTimetableEvent/add/addCustomTimetableEventParams.dart';
import '../../../../../api/mhsl/customTimetableEvent/customTimetableEvent.dart';
import '../../../../../api/mhsl/customTimetableEvent/get/getCustomTimetableEventCache.dart';
import '../../../../../api/mhsl/customTimetableEvent/get/getCustomTimetableEventParams.dart';
import '../../../../../api/mhsl/customTimetableEvent/get/getCustomTimetableEventResponse.dart';
import '../../../../../api/mhsl/customTimetableEvent/remove/removeCustomTimetableEvent.dart';
import '../../../../../api/mhsl/customTimetableEvent/remove/removeCustomTimetableEventParams.dart';
import '../../../../../api/mhsl/customTimetableEvent/update/updateCustomTimetableEvent.dart';
import '../../../../../api/mhsl/customTimetableEvent/update/updateCustomTimetableEventParams.dart';
import '../../../../../api/webuntis/queries/getHolidays/getHolidaysCache.dart';
import '../../../../../api/webuntis/queries/getHolidays/getHolidaysResponse.dart';
import '../../../../../api/webuntis/queries/getRooms/getRoomsCache.dart';
import '../../../../../api/webuntis/queries/getRooms/getRoomsResponse.dart';
import '../../../../../api/webuntis/queries/getSubjects/getSubjectsCache.dart';
import '../../../../../api/webuntis/queries/getSubjects/getSubjectsResponse.dart';
import '../../../../../api/webuntis/queries/getTimegridUnits/getTimegridUnitsCache.dart';
import '../../../../../api/webuntis/queries/getTimegridUnits/getTimegridUnitsResponse.dart';
import '../../../../../api/webuntis/queries/getTimetable/getTimetableCache.dart';
import '../../../../../api/webuntis/queries/getTimetable/getTimetableResponse.dart';
import '../../../../../api/mhsl/custom_timetable_event/add/add_custom_timetable_event.dart';
import '../../../../../api/mhsl/custom_timetable_event/add/add_custom_timetable_event_params.dart';
import '../../../../../api/mhsl/custom_timetable_event/custom_timetable_event.dart';
import '../../../../../api/mhsl/custom_timetable_event/get/get_custom_timetable_event_cache.dart';
import '../../../../../api/mhsl/custom_timetable_event/get/get_custom_timetable_event_params.dart';
import '../../../../../api/mhsl/custom_timetable_event/get/get_custom_timetable_event_response.dart';
import '../../../../../api/mhsl/custom_timetable_event/remove/remove_custom_timetable_event.dart';
import '../../../../../api/mhsl/custom_timetable_event/remove/remove_custom_timetable_event_params.dart';
import '../../../../../api/mhsl/custom_timetable_event/update/update_custom_timetable_event.dart';
import '../../../../../api/mhsl/custom_timetable_event/update/update_custom_timetable_event_params.dart';
import '../../../../../api/webuntis/queries/get_holidays/get_holidays_cache.dart';
import '../../../../../api/webuntis/queries/get_holidays/get_holidays_response.dart';
import '../../../../../api/webuntis/queries/get_rooms/get_rooms_cache.dart';
import '../../../../../api/webuntis/queries/get_rooms/get_rooms_response.dart';
import '../../../../../api/webuntis/queries/get_subjects/get_subjects_cache.dart';
import '../../../../../api/webuntis/queries/get_subjects/get_subjects_response.dart';
import '../../../../../api/webuntis/queries/get_timegrid_units/get_timegrid_units_cache.dart';
import '../../../../../api/webuntis/queries/get_timegrid_units/get_timegrid_units_response.dart';
import '../../../../../api/webuntis/queries/get_timetable/get_timetable_cache.dart';
import '../../../../../api/webuntis/queries/get_timetable/get_timetable_response.dart';
import '../../../../../model/account_data.dart';
class TimetableDataProvider {
@@ -1,6 +1,6 @@
import '../../../infrastructure/repository/repository.dart';
import '../bloc/timetable_state.dart';
import '../dataProvider/timetable_data_provider.dart';
import '../data_provider/timetable_data_provider.dart';
class TimetableRepository extends Repository<TimetableState> {
final TimetableDataProvider _provider;