import 'package:flutter/services.dart'; import 'package:get_it/get_it.dart'; import 'package:hiddingsel_app/appflow/controller/events.dart'; import 'package:hiddingsel_app/appflow/model/pois.dart'; import 'package:hiddingsel_app/appflow/model/represented_organisations.dart'; import 'package:hiddingsel_app/constants/constant.dart'; import 'package:hiddingsel_app/appflow/model/event_organisations.dart'; import 'package:hiddingsel_app/services/storage.dart'; import 'package:hiddingsel_app/todo/scheduled_notification.dart'; import '../model/companies.dart'; import '../model/topics.dart'; import '../../services/notification.dart'; import 'package:timezone/data/latest_all.dart' as tz; class InitialStartController { static Future ensureInitialized() async { await initializeAlways(); SettingsConnector.getBool(SystemStrings.keyFirstTime, true).then((firstTime) {if(firstTime) { initializeFirstTime(); SettingsConnector.setBool(SystemStrings.keyFirstTime, false); }}); } static Future initializeAlways() async { SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle( statusBarColor: UIColors.white, statusBarIconBrightness: Brightness.dark, statusBarBrightness: Brightness.light, )); //RemoteConfigConnector.initialize(); ExternalNotificationConnector.initialize(); await ScheduledNotificationConnector.initialize(); tz.initializeTimeZones(); await load(SystemStrings.assetPois, PointOfInterestModel.fromJson); await load(SystemStrings.assetCompanies, CompanyModel.fromJson); await load(SystemStrings.assetRepresentedOrganisations, RepresentedOrganisationModel.fromJson); await load(SystemStrings.assetEventOrganisations, EventOrganisationModel.fromJson); await load(SystemStrings.assetTopics, PushNotificationTopicModel.fromJson); EventController.scheduleNotificationsBySettings(); } static Future load(asset, fromJson) async { final jsonData = await AssetConnector.getJson(asset); List list = jsonData.map((json) => fromJson(json)).toList().cast(); GetIt.I.registerSingleton>(list); } static void initializeFirstTime() async { PushNotificationTopicModel.values.forEach((e) => e.subscribe(false)); CompanyModel.values.forEach((e) => e.subscribe(false)); RepresentedOrganisationModel.values.forEach((e) => e.favorize(false)); EventOrganisationModel.values.forEach((e) => e.allowEventNotification(false)); EventOrganisationModel.values.where((e) => e.id == "garbage").forEach((e) => e.allowEventNotification(true)); EventOrganisationModel.values.where((e) => e.id == "dorfgemeinschaft").forEach((e) => e.allowEventNotification(true)); EventController.scheduleNotificationsBySettings(); } }