diff --git a/assets/data/nollning_26/homescreen/background.png b/assets/data/nollning_26/homescreen/background.png new file mode 100644 index 00000000..9a95aa2e Binary files /dev/null and b/assets/data/nollning_26/homescreen/background.png differ diff --git a/assets/data/nollning_26/homescreen/button.png b/assets/data/nollning_26/homescreen/button.png new file mode 100644 index 00000000..c4fc3dd6 Binary files /dev/null and b/assets/data/nollning_26/homescreen/button.png differ diff --git a/assets/data/nollning_26/uppdrag/clouds.png b/assets/data/nollning_26/uppdrag/clouds.png new file mode 100644 index 00000000..6ac81f0d Binary files /dev/null and b/assets/data/nollning_26/uppdrag/clouds.png differ diff --git a/assets/data/nollning_26/uppdrag/done_check.png b/assets/data/nollning_26/uppdrag/done_check.png new file mode 100644 index 00000000..d07e4ce8 Binary files /dev/null and b/assets/data/nollning_26/uppdrag/done_check.png differ diff --git a/assets/data/nollning_26/uppdrag/done_pixelart_placeholder.png b/assets/data/nollning_26/uppdrag/done_pixelart_placeholder.png new file mode 100644 index 00000000..08e294eb Binary files /dev/null and b/assets/data/nollning_26/uppdrag/done_pixelart_placeholder.png differ diff --git a/assets/data/nollning_26/uppdrag/ej_vald.png b/assets/data/nollning_26/uppdrag/ej_vald.png new file mode 100644 index 00000000..19caad1d Binary files /dev/null and b/assets/data/nollning_26/uppdrag/ej_vald.png differ diff --git a/assets/data/nollning_26/uppdrag/knapp_blue.png b/assets/data/nollning_26/uppdrag/knapp_blue.png new file mode 100644 index 00000000..0b75f311 Binary files /dev/null and b/assets/data/nollning_26/uppdrag/knapp_blue.png differ diff --git a/assets/data/nollning_26/uppdrag/knapp_done.png b/assets/data/nollning_26/uppdrag/knapp_done.png new file mode 100644 index 00000000..79f78c31 Binary files /dev/null and b/assets/data/nollning_26/uppdrag/knapp_done.png differ diff --git a/assets/data/nollning_26/uppdrag/knapp_locked.png b/assets/data/nollning_26/uppdrag/knapp_locked.png new file mode 100644 index 00000000..c6b74881 Binary files /dev/null and b/assets/data/nollning_26/uppdrag/knapp_locked.png differ diff --git a/assets/data/nollning_26/uppdrag/knapp_orange.png b/assets/data/nollning_26/uppdrag/knapp_orange.png new file mode 100644 index 00000000..e1308a2e Binary files /dev/null and b/assets/data/nollning_26/uppdrag/knapp_orange.png differ diff --git a/assets/data/nollning_26/uppdrag/knapp_purple.png b/assets/data/nollning_26/uppdrag/knapp_purple.png new file mode 100644 index 00000000..c1788d82 Binary files /dev/null and b/assets/data/nollning_26/uppdrag/knapp_purple.png differ diff --git a/assets/data/nollning_26/uppdrag/knapp_red.png b/assets/data/nollning_26/uppdrag/knapp_red.png new file mode 100644 index 00000000..a5267692 Binary files /dev/null and b/assets/data/nollning_26/uppdrag/knapp_red.png differ diff --git a/assets/data/nollning_26/uppdrag/knapp_yellow.png b/assets/data/nollning_26/uppdrag/knapp_yellow.png new file mode 100644 index 00000000..a0e0831e Binary files /dev/null and b/assets/data/nollning_26/uppdrag/knapp_yellow.png differ diff --git a/assets/data/nollning_26/uppdrag/pixelart_barbiedans.png b/assets/data/nollning_26/uppdrag/pixelart_barbiedans.png new file mode 100644 index 00000000..68dc6abd Binary files /dev/null and b/assets/data/nollning_26/uppdrag/pixelart_barbiedans.png differ diff --git a/assets/data/nollning_26/uppdrag/pixelart_fadder.png b/assets/data/nollning_26/uppdrag/pixelart_fadder.png new file mode 100644 index 00000000..479b2a91 Binary files /dev/null and b/assets/data/nollning_26/uppdrag/pixelart_fadder.png differ diff --git a/assets/data/nollning_26/uppdrag/pixelart_kreativ.png b/assets/data/nollning_26/uppdrag/pixelart_kreativ.png new file mode 100644 index 00000000..79e02960 Binary files /dev/null and b/assets/data/nollning_26/uppdrag/pixelart_kreativ.png differ diff --git a/assets/data/nollning_26/uppdrag/pixelart_placeholder.png b/assets/data/nollning_26/uppdrag/pixelart_placeholder.png new file mode 100644 index 00000000..6a7d6c1f Binary files /dev/null and b/assets/data/nollning_26/uppdrag/pixelart_placeholder.png differ diff --git a/assets/data/nollning_26/uppdrag/pixelart_resa.png b/assets/data/nollning_26/uppdrag/pixelart_resa.png new file mode 100644 index 00000000..7a49d079 Binary files /dev/null and b/assets/data/nollning_26/uppdrag/pixelart_resa.png differ diff --git a/assets/data/nollning_26/uppdrag/pixelart_spel.png b/assets/data/nollning_26/uppdrag/pixelart_spel.png new file mode 100644 index 00000000..cc8ec6e1 Binary files /dev/null and b/assets/data/nollning_26/uppdrag/pixelart_spel.png differ diff --git "a/assets/data/nollning_26/uppdrag/pixelart_t\303\244vling.png" "b/assets/data/nollning_26/uppdrag/pixelart_t\303\244vling.png" new file mode 100644 index 00000000..49aff093 Binary files /dev/null and "b/assets/data/nollning_26/uppdrag/pixelart_t\303\244vling.png" differ diff --git "a/assets/data/nollning_26/uppdrag/pixelart_\303\244lg.png" "b/assets/data/nollning_26/uppdrag/pixelart_\303\244lg.png" new file mode 100644 index 00000000..27f58509 Binary files /dev/null and "b/assets/data/nollning_26/uppdrag/pixelart_\303\244lg.png" differ diff --git a/assets/data/nollning_26/uppdrag/pokekort_exkl.png b/assets/data/nollning_26/uppdrag/pokekort_exkl.png new file mode 100644 index 00000000..b11cf465 Binary files /dev/null and b/assets/data/nollning_26/uppdrag/pokekort_exkl.png differ diff --git a/assets/data/nollning_26/uppdrag/rubrik1.png b/assets/data/nollning_26/uppdrag/rubrik1.png new file mode 100644 index 00000000..105c2ff1 Binary files /dev/null and b/assets/data/nollning_26/uppdrag/rubrik1.png differ diff --git a/assets/data/nollning_26/uppdrag/rubrik2.png b/assets/data/nollning_26/uppdrag/rubrik2.png new file mode 100644 index 00000000..b33ec396 Binary files /dev/null and b/assets/data/nollning_26/uppdrag/rubrik2.png differ diff --git a/assets/data/nollning_26/uppdrag/vald.png b/assets/data/nollning_26/uppdrag/vald.png new file mode 100644 index 00000000..44e15e55 Binary files /dev/null and b/assets/data/nollning_26/uppdrag/vald.png differ diff --git a/assets/fonts/LoRes12OT-Regular.ttf b/assets/fonts/LoRes12OT-Regular.ttf new file mode 100644 index 00000000..bcc2b372 Binary files /dev/null and b/assets/fonts/LoRes12OT-Regular.ttf differ diff --git a/assets/fonts/PressStart2P-Regular.ttf b/assets/fonts/PressStart2P-Regular.ttf new file mode 100644 index 00000000..2442affb Binary files /dev/null and b/assets/fonts/PressStart2P-Regular.ttf differ diff --git a/assets/fonts/VT323-Regular.ttf b/assets/fonts/VT323-Regular.ttf new file mode 100644 index 00000000..6aec5993 Binary files /dev/null and b/assets/fonts/VT323-Regular.ttf differ diff --git a/assets/fonts/consolas.ttf b/assets/fonts/consolas.ttf new file mode 100755 index 00000000..cd4980c1 Binary files /dev/null and b/assets/fonts/consolas.ttf differ diff --git a/lib/main.dart b/lib/main.dart index cdd47683..ba2dd65c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,17 +4,14 @@ import 'package:fsek_mobile/app.dart'; import 'package:bloc/bloc.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:fsek_mobile/screens/home/nollningHome26.dart'; import 'package:fsek_mobile/screens/moose_game/moose_game.dart'; import 'package:fsek_mobile/screens/news/news.dart'; import 'package:fsek_mobile/screens/calendar/calendar.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide/manners.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide/people.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide-24/wordlist.dart'; import 'package:fsek_mobile/screens/other/other.dart'; import 'package:fsek_mobile/models/destination.dart'; import 'package:fsek_mobile/screens/nollning/adventure_missions.dart'; import 'package:fsek_mobile/screens/nollning/emergency_contacts.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide/nolleguide.dart'; import 'package:fsek_mobile/screens/songbook/songbook.dart'; import 'package:fsek_mobile/screens/home/home.dart'; import 'package:fsek_mobile/services/navigation.service.dart'; @@ -42,8 +39,8 @@ void main() async { Destination(0, Icons.feed_outlined, NewsPage()), Destination(1, Icons.calendar_today, Calendar()), // During introduction, modify NollningHomePage() and comment the normal HomePage() - // Destination(2, Icons.home, NollningHomePage()), - Destination(2, Icons.home, HomePage()), + Destination(2, Icons.home, NollningHomePage()), + // Destination(2, Icons.home, HomePage()), Destination(3, CustomIcons.moose, MooseGamePage()), Destination(4, Icons.list, OtherContent()), ]; @@ -53,11 +50,7 @@ void main() async { '/adventure_missions': (context) => AdventureMissionsPage(), '/emergency_contacts': (context) => EmergencyContactsPage(), '/song_book': (context) => SongbookPage(), - '/homepage': (context) => HomePage(), - '/nolleguide': (context) => GuidePage(), - '/manners': (context) => MannersPage(), - '/people': (context) => PeoplePage(), - '/wordlist': (context) => WordListOldPage(), + '/homepage': (context) => HomePage() }; // This captures errors reported by the Flutter framework. FlutterError.onError = (FlutterErrorDetails details) { diff --git a/lib/screens/calendar/calendar.dart b/lib/screens/calendar/calendar.dart index 13689a1b..78ac6f2c 100644 --- a/lib/screens/calendar/calendar.dart +++ b/lib/screens/calendar/calendar.dart @@ -46,19 +46,28 @@ class _CalendarState extends State { })); } - Widget checkAlcoholEventType(String alcType){ + Widget checkAlcoholEventType(String alcType, {bool isIcon = false}){ final String alcServed = "assets/data/nollning_25/calendar/alkfullImg.png"; final String noAlc = "assets/data/nollning_25/calendar/alkfriImg.png"; final String byob = "assets/data/nollning_25/calendar/byobImg.png"; + final String alcServedIcon = "assets/data/nollning_25/calendar/alkfullIcon.png"; + final String noAlcIcon = "assets/data/nollning_25/calendar/alkfriIcon.png"; + final String byobIcon = "assets/data/nollning_25/calendar/byobIcon.png"; switch (alcType) { case "Alcohol-Served": + if (isIcon) return Image.asset(alcServedIcon, fit: BoxFit.fill); + return Image.asset(alcServed, fit: BoxFit.fill); case "Alcohol": + if (isIcon) return Image.asset(byobIcon, fit: BoxFit.fill); + return Image.asset(byob, fit: BoxFit.fill); default: + if (isIcon) return Image.asset(noAlcIcon, fit: BoxFit.fill); + return Image.asset(noAlc, fit: BoxFit.fill); } } @@ -284,6 +293,37 @@ class _CalendarState extends State { eventLoader: (day) { return _getEventsForDay(day); }, + calendarBuilders: CalendarBuilders( + markerBuilder: (context, day, events) { + if (events.isEmpty) return null; + + final defaultMarkerAnon = (Color color) => Container( + width: 8, + height: 8, + margin: const EdgeInsets.all(1), + decoration: BoxDecoration( + color: color, + shape: BoxShape.circle, + ), + ); + + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: events.map((event) { + if (!event.isNollningEvent) { + return defaultMarkerAnon(Theme.of(context).colorScheme.inverseSurface); + } + + return Container( + width: 13, + height: 13, + margin: EdgeInsets.all(1), + child: checkAlcoholEventType(event.alcoholEventType, isIcon: true), + ); + }).toList(), + ); + }, + ), ), Container( alignment: Alignment.centerLeft, diff --git a/lib/screens/home/nollningHome26.dart b/lib/screens/home/nollningHome26.dart new file mode 100644 index 00000000..958c583f --- /dev/null +++ b/lib/screens/home/nollningHome26.dart @@ -0,0 +1,134 @@ +import 'package:flutter/material.dart'; +import 'package:fsek_mobile/l10n/app_localizations.dart'; +import 'package:fsek_mobile/screens/nollning/emergency_contacts.dart'; +import 'package:fsek_mobile/screens/nollning/map_page.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_26/nolleguide_home.dart'; +import 'package:fsek_mobile/screens/nollning/questscreen_26/quest_home.dart'; +import 'package:fsek_mobile/screens/nollning/schedule.dart'; +import 'package:fsek_mobile/screens/songbook/songbook.dart'; + +class NollningHomePage extends StatefulWidget { + static const routeName = '/homepage'; + + @override + _NollningHomePageState createState() => _NollningHomePageState(); +} + +class _NollningHomePageState extends State { + @override + void initState() { + super.initState(); + } + + Widget build(BuildContext context) { + var t = AppLocalizations.of(context)!; + + double screenWidth = MediaQuery.of(context).size.width; + double screenHeight = MediaQuery.of(context).size.height; + + const int buttonSize = 5; // The higher the number the smaller the button + const double buttonSpace = 30; // The space between the buttons + const double bottomMargin = 30; // The margin from the navbar + + const String backgroundImage = "assets/data/nollning_26/homescreen/background.png"; + const String buttonImage = "assets/data/nollning_26/homescreen/button.png"; + + return Container( + child: Stack(children: [ + Positioned.fill(child: Image.asset(backgroundImage, fit: BoxFit.fill)), + Align(alignment: Alignment.topCenter, child: Text("En nollning på ny nivå!", style: TextStyle(color: Colors.white),),), + Align(alignment: Alignment.bottomCenter, child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Padding(padding: EdgeInsets.only(bottom: bottomMargin), + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Container( + width: screenWidth / buttonSize, + child: InkWell( + onTap: () => (Navigator.push(context, MaterialPageRoute(builder: (context) => NolleGuideHomePage()))), + child: generateButton(buttonImage, "Nolle-\nguiden"), + ), + ), + SizedBox( + height: buttonSpace, + ), + Container( + width: screenWidth / buttonSize, + child: InkWell( + onTap: () => (Navigator.push(context, MaterialPageRoute(builder: (context) => ScheduleScreenPage()))), + child: generateButton(buttonImage, "Schema"), + ), + ) + ], + ), + ), + Padding(padding: EdgeInsets.only(bottom: bottomMargin), + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Container( + width: screenWidth / buttonSize, + child: InkWell( + onTap: () => (Navigator.push(context, MaterialPageRoute(builder: (context) => EmergencyContactsPage()))), + child: generateButton(buttonImage, "Kontakt"), + ), + ), + SizedBox( + height: buttonSpace, + ), + Container( + width: screenWidth / buttonSize, + child: InkWell( + onTap: () => (Navigator.push(context, MaterialPageRoute(builder: (context) => QuestHomeScreen()))), + child: generateButton(buttonImage, "Side\nQuest"), + ), + ) + ], + ), + ), + Padding(padding: EdgeInsets.only(bottom: bottomMargin), + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Container( + width: screenWidth / buttonSize, + child: InkWell( + onTap: () => (Navigator.push(context, MaterialPageRoute(builder: (context) => SongbookPage()))), + child: generateButton(buttonImage, "Sångbok"), + ), + ), + SizedBox( + height: buttonSpace, + ), + Container( + width: screenWidth / buttonSize, + child: InkWell( + onTap: () => (Navigator.push(context, MaterialPageRoute(builder: (context) => MapView()))), + child: generateButton(buttonImage, "Karta"), + ), + ) + ], + ), + ), + ], + ),) + ],), + ); + } + + Widget generateButton(String imagePath, String text) { + return Stack( + alignment: Alignment.center, + children: [ + Image.asset(imagePath), + Text( + text, + style: TextStyle(color: Colors.black), + ) + ], + ); + } +} \ No newline at end of file diff --git a/lib/screens/nollning/adventure_missions_new.dart b/lib/screens/nollning/adventure_missions_new.dart index d76d6997..cd2c07d7 100644 --- a/lib/screens/nollning/adventure_missions_new.dart +++ b/lib/screens/nollning/adventure_missions_new.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:fsek_mobile/screens/nollning/adventure_missions_tab_new.dart'; import 'package:fsek_mobile/screens/nollning/highscore_tab_new.dart'; -import 'package:fsek_mobile/screens/nollning/questscreen/quests.dart'; +import 'package:fsek_mobile/screens/nollning/questscreen_24/quests.dart'; import 'package:fsek_mobile/l10n/app_localizations.dart'; class AdventureMissionsPageNew extends StatefulWidget { diff --git a/lib/screens/nollning/nolleguide/manners.dart b/lib/screens/nollning/nolleguide_23/manners.dart similarity index 100% rename from lib/screens/nollning/nolleguide/manners.dart rename to lib/screens/nollning/nolleguide_23/manners.dart diff --git a/lib/screens/nollning/nolleguide/nolleguide.dart b/lib/screens/nollning/nolleguide_23/nolleguide.dart similarity index 100% rename from lib/screens/nollning/nolleguide/nolleguide.dart rename to lib/screens/nollning/nolleguide_23/nolleguide.dart diff --git a/lib/screens/nollning/nolleguide/people.dart b/lib/screens/nollning/nolleguide_23/people.dart similarity index 100% rename from lib/screens/nollning/nolleguide/people.dart rename to lib/screens/nollning/nolleguide_23/people.dart diff --git a/lib/screens/nollning/nolleguide-24/kladguide.dart b/lib/screens/nollning/nolleguide_24/kladguide.dart similarity index 100% rename from lib/screens/nollning/nolleguide-24/kladguide.dart rename to lib/screens/nollning/nolleguide_24/kladguide.dart diff --git a/lib/screens/nollning/nolleguide-24/nolleguidescreen.dart b/lib/screens/nollning/nolleguide_24/nolleguidescreen.dart similarity index 96% rename from lib/screens/nollning/nolleguide-24/nolleguidescreen.dart rename to lib/screens/nollning/nolleguide_24/nolleguidescreen.dart index 5654e08e..6599535d 100644 --- a/lib/screens/nollning/nolleguide-24/nolleguidescreen.dart +++ b/lib/screens/nollning/nolleguide_24/nolleguidescreen.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide-24/kladguide.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide-24/stodfunktioner.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide-24/wordlist.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide-24/orgscreen/org_screen.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide-24/studentvett.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_24/kladguide.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_24/stodfunktioner.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_24/wordlist.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_24/orgscreen/org_screen.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_24/studentvett.dart'; import 'package:fsek_mobile/l10n/app_localizations.dart'; import 'package:fsek_mobile/services/preload_asset.service.dart'; diff --git a/lib/screens/nollning/nolleguide-24/orgscreen/committee_page.dart b/lib/screens/nollning/nolleguide_24/orgscreen/committee_page.dart similarity index 100% rename from lib/screens/nollning/nolleguide-24/orgscreen/committee_page.dart rename to lib/screens/nollning/nolleguide_24/orgscreen/committee_page.dart diff --git a/lib/screens/nollning/nolleguide-24/orgscreen/guilds.dart b/lib/screens/nollning/nolleguide_24/orgscreen/guilds.dart similarity index 100% rename from lib/screens/nollning/nolleguide-24/orgscreen/guilds.dart rename to lib/screens/nollning/nolleguide_24/orgscreen/guilds.dart diff --git a/lib/screens/nollning/nolleguide-24/orgscreen/nations.dart b/lib/screens/nollning/nolleguide_24/orgscreen/nations.dart similarity index 100% rename from lib/screens/nollning/nolleguide-24/orgscreen/nations.dart rename to lib/screens/nollning/nolleguide_24/orgscreen/nations.dart diff --git a/lib/screens/nollning/nolleguide-24/orgscreen/org_screen.dart b/lib/screens/nollning/nolleguide_24/orgscreen/org_screen.dart similarity index 96% rename from lib/screens/nollning/nolleguide-24/orgscreen/org_screen.dart rename to lib/screens/nollning/nolleguide_24/orgscreen/org_screen.dart index 3ab1c257..7bb5c690 100644 --- a/lib/screens/nollning/nolleguide-24/orgscreen/org_screen.dart +++ b/lib/screens/nollning/nolleguide_24/orgscreen/org_screen.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide-24/orgscreen/nations.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide-24/orgscreen/committee_page.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide-24/orgscreen/spex.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide-24/orgscreen/others.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_24/orgscreen/nations.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_24/orgscreen/committee_page.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_24/orgscreen/spex.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_24/orgscreen/others.dart'; import 'package:fsek_mobile/services/preload_asset.service.dart'; import 'package:url_launcher/url_launcher.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide-24/orgscreen/guilds.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_24/orgscreen/guilds.dart'; import 'package:fsek_mobile/l10n/app_localizations.dart'; class OrganizationScreenPage extends StatefulWidget { diff --git a/lib/screens/nollning/nolleguide-24/orgscreen/others.dart b/lib/screens/nollning/nolleguide_24/orgscreen/others.dart similarity index 100% rename from lib/screens/nollning/nolleguide-24/orgscreen/others.dart rename to lib/screens/nollning/nolleguide_24/orgscreen/others.dart diff --git a/lib/screens/nollning/nolleguide-24/orgscreen/spex.dart b/lib/screens/nollning/nolleguide_24/orgscreen/spex.dart similarity index 100% rename from lib/screens/nollning/nolleguide-24/orgscreen/spex.dart rename to lib/screens/nollning/nolleguide_24/orgscreen/spex.dart diff --git a/lib/screens/nollning/nolleguide-24/stodfunktioner.dart b/lib/screens/nollning/nolleguide_24/stodfunktioner.dart similarity index 100% rename from lib/screens/nollning/nolleguide-24/stodfunktioner.dart rename to lib/screens/nollning/nolleguide_24/stodfunktioner.dart diff --git a/lib/screens/nollning/nolleguide-24/studentvett.dart b/lib/screens/nollning/nolleguide_24/studentvett.dart similarity index 100% rename from lib/screens/nollning/nolleguide-24/studentvett.dart rename to lib/screens/nollning/nolleguide_24/studentvett.dart diff --git a/lib/screens/nollning/nolleguide-24/wordlist.dart b/lib/screens/nollning/nolleguide_24/wordlist.dart similarity index 100% rename from lib/screens/nollning/nolleguide-24/wordlist.dart rename to lib/screens/nollning/nolleguide_24/wordlist.dart diff --git a/lib/screens/nollning/nolleguide25/fsek.dart b/lib/screens/nollning/nolleguide_25/fsek.dart similarity index 100% rename from lib/screens/nollning/nolleguide25/fsek.dart rename to lib/screens/nollning/nolleguide_25/fsek.dart diff --git a/lib/screens/nollning/nolleguide25/karen.dart b/lib/screens/nollning/nolleguide_25/karen.dart similarity index 100% rename from lib/screens/nollning/nolleguide25/karen.dart rename to lib/screens/nollning/nolleguide_25/karen.dart diff --git a/lib/screens/nollning/nolleguide25/kladguide.dart b/lib/screens/nollning/nolleguide_25/kladguide.dart similarity index 100% rename from lib/screens/nollning/nolleguide25/kladguide.dart rename to lib/screens/nollning/nolleguide_25/kladguide.dart diff --git a/lib/screens/nollning/nolleguide25/lund.dart b/lib/screens/nollning/nolleguide_25/lund.dart similarity index 100% rename from lib/screens/nollning/nolleguide25/lund.dart rename to lib/screens/nollning/nolleguide_25/lund.dart diff --git a/lib/screens/nollning/nolleguide25/nolleguide_home.dart b/lib/screens/nollning/nolleguide_25/nolleguide_home.dart similarity index 97% rename from lib/screens/nollning/nolleguide25/nolleguide_home.dart rename to lib/screens/nollning/nolleguide_25/nolleguide_home.dart index 14d0f394..e1e97d2a 100644 --- a/lib/screens/nollning/nolleguide25/nolleguide_home.dart +++ b/lib/screens/nollning/nolleguide_25/nolleguide_home.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:fsek_mobile/l10n/app_localizations.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide25/kladguide.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide25/stod.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide25/studentlivet_home.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide25/vettoetikett.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide25/wordlist.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_25/kladguide.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_25/stod.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_25/studentlivet_home.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_25/vettoetikett.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_25/wordlist.dart'; class NolleGuideHomePage extends StatefulWidget { @override diff --git a/lib/screens/nollning/nolleguide25/stod.dart b/lib/screens/nollning/nolleguide_25/stod.dart similarity index 100% rename from lib/screens/nollning/nolleguide25/stod.dart rename to lib/screens/nollning/nolleguide_25/stod.dart diff --git a/lib/screens/nollning/nolleguide25/studentlivet_home.dart b/lib/screens/nollning/nolleguide_25/studentlivet_home.dart similarity index 97% rename from lib/screens/nollning/nolleguide25/studentlivet_home.dart rename to lib/screens/nollning/nolleguide_25/studentlivet_home.dart index 7136a4aa..dfc53411 100644 --- a/lib/screens/nollning/nolleguide25/studentlivet_home.dart +++ b/lib/screens/nollning/nolleguide_25/studentlivet_home.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:fsek_mobile/l10n/app_localizations.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide25/fsek.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide25/karen.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide25/lund.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_25/fsek.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_25/karen.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_25/lund.dart'; class StudentlivetHome extends StatefulWidget { @override diff --git a/lib/screens/nollning/nolleguide25/vettoetikett.dart b/lib/screens/nollning/nolleguide_25/vettoetikett.dart similarity index 100% rename from lib/screens/nollning/nolleguide25/vettoetikett.dart rename to lib/screens/nollning/nolleguide_25/vettoetikett.dart diff --git a/lib/screens/nollning/nolleguide25/wordlist.dart b/lib/screens/nollning/nolleguide_25/wordlist.dart similarity index 100% rename from lib/screens/nollning/nolleguide25/wordlist.dart rename to lib/screens/nollning/nolleguide_25/wordlist.dart diff --git a/lib/screens/nollning/nolleguide_26/nolleguide_home.dart b/lib/screens/nollning/nolleguide_26/nolleguide_home.dart new file mode 100644 index 00000000..cc3dde1a --- /dev/null +++ b/lib/screens/nollning/nolleguide_26/nolleguide_home.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; +import 'package:fsek_mobile/l10n/app_localizations.dart'; + +class NolleGuideHomePage extends StatefulWidget { + @override + _NolleGuideHomeState createState() => _NolleGuideHomeState(); +} + +class _NolleGuideHomeState extends State { + void initState() { + super.initState(); + } + + Widget build(BuildContext context) { + var t = AppLocalizations.of(context)!; + + double screenWidth = MediaQuery.of(context).size.width; + double screenHeight = MediaQuery.of(context).size.height; + + return Scaffold( + extendBodyBehindAppBar: true, + appBar: AppBar( + backgroundColor: Colors.transparent, + elevation: 0.0, + scrolledUnderElevation: 0.0, + ), + body: InteractiveViewer( + panEnabled: true, + child: Container( + height: screenHeight, + width: screenWidth, + child: Align(alignment: Alignment.center, child: Text("Nolleguiden!")), + ), + ), + ); + } +} diff --git a/lib/screens/nollning/questscreen/finishedMissions.dart b/lib/screens/nollning/questscreen_24/finishedMissions.dart similarity index 100% rename from lib/screens/nollning/questscreen/finishedMissions.dart rename to lib/screens/nollning/questscreen_24/finishedMissions.dart diff --git a/lib/screens/nollning/questscreen/goodbyePaperPage.dart b/lib/screens/nollning/questscreen_24/goodbyePaperPage.dart similarity index 100% rename from lib/screens/nollning/questscreen/goodbyePaperPage.dart rename to lib/screens/nollning/questscreen_24/goodbyePaperPage.dart diff --git a/lib/screens/nollning/questscreen/paperWidget.dart b/lib/screens/nollning/questscreen_24/paperWidget.dart similarity index 97% rename from lib/screens/nollning/questscreen/paperWidget.dart rename to lib/screens/nollning/questscreen_24/paperWidget.dart index 267267d4..7333912a 100644 --- a/lib/screens/nollning/questscreen/paperWidget.dart +++ b/lib/screens/nollning/questscreen_24/paperWidget.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import "package:fsek_mobile/l10n/app_localizations.dart"; -import "package:fsek_mobile/screens/nollning/questscreen/goodbyePaperPage.dart"; +import "package:fsek_mobile/screens/nollning/questscreen_24/goodbyePaperPage.dart"; //behöver vecka, synas eller inte, klarade,total diff --git a/lib/screens/nollning/questscreen/quests.dart b/lib/screens/nollning/questscreen_24/quests.dart similarity index 97% rename from lib/screens/nollning/questscreen/quests.dart rename to lib/screens/nollning/questscreen_24/quests.dart index 855da15b..2869cac1 100644 --- a/lib/screens/nollning/questscreen/quests.dart +++ b/lib/screens/nollning/questscreen_24/quests.dart @@ -4,8 +4,8 @@ import 'package:fsek_mobile/services/nollning.service.dart'; import 'package:fsek_mobile/services/service_locator.dart'; import 'package:fsek_mobile/util/nollning/week_tracker.dart'; import 'package:fsek_mobile/models/nollning/adventure_mission_week.dart'; -import 'package:fsek_mobile/screens/nollning/questscreen/paperWidget.dart'; -import 'package:fsek_mobile/screens/nollning/questscreen/finishedMissions.dart'; +import 'package:fsek_mobile/screens/nollning/questscreen_24/paperWidget.dart'; +import 'package:fsek_mobile/screens/nollning/questscreen_24/finishedMissions.dart'; class QuestPage extends StatefulWidget { @override diff --git a/lib/screens/nollning/new_questscreen/highscore.dart b/lib/screens/nollning/questscreen_25/highscore.dart similarity index 100% rename from lib/screens/nollning/new_questscreen/highscore.dart rename to lib/screens/nollning/questscreen_25/highscore.dart diff --git a/lib/screens/nollning/new_questscreen/quest_home.dart b/lib/screens/nollning/questscreen_25/quest_home.dart similarity index 97% rename from lib/screens/nollning/new_questscreen/quest_home.dart rename to lib/screens/nollning/questscreen_25/quest_home.dart index e300f701..da1c034b 100644 --- a/lib/screens/nollning/new_questscreen/quest_home.dart +++ b/lib/screens/nollning/questscreen_25/quest_home.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:fsek_mobile/screens/nollning/new_questscreen/highscore.dart'; -import 'package:fsek_mobile/screens/nollning/new_questscreen/quests.dart'; +import 'package:fsek_mobile/screens/nollning/questscreen_25/highscore.dart'; +import 'package:fsek_mobile/screens/nollning/questscreen_25/quests.dart'; import 'package:fsek_mobile/l10n/app_localizations.dart'; class QuestHomeScreen extends StatefulWidget { diff --git a/lib/screens/nollning/new_questscreen/quests.dart b/lib/screens/nollning/questscreen_25/quests.dart similarity index 100% rename from lib/screens/nollning/new_questscreen/quests.dart rename to lib/screens/nollning/questscreen_25/quests.dart diff --git a/lib/screens/nollning/questscreen_26/highscore.dart b/lib/screens/nollning/questscreen_26/highscore.dart new file mode 100644 index 00000000..654b10a9 --- /dev/null +++ b/lib/screens/nollning/questscreen_26/highscore.dart @@ -0,0 +1,221 @@ +import 'package:flutter/material.dart'; +import 'package:fsek_mobile/api_client/lib/api_client.dart'; +import 'package:fsek_mobile/services/api.service.dart'; +import 'package:fsek_mobile/l10n/app_localizations.dart'; + +class HighscoreScreen extends StatefulWidget { + final double availableWidth; + final double availableHeight; + + HighscoreScreen({ + required this.availableHeight, + required this.availableWidth, + }); + + @override + _HighscoreScreenState createState() => _HighscoreScreenState(); +} + +class _HighscoreScreenState extends State { + Map groupPointsMap = {}; + NollningRead? nollning; + + String avklarad = "assets/data/nollning_25/uppdrag/bricka-avklarad.png"; + String bedomning = "assets/data/nollning_25/uppdrag/bricka-bedomning.png"; + String misslyckad = "assets/data/nollning_25/uppdrag/bricka-misslyckad.png"; + String start = "assets/data/nollning_25/uppdrag/bricka-start.png"; + String rubrik = "assets/data/nollning_25/uppdrag/rubrik.png"; + + @override + void initState() { + super.initState(); + _loadInitData(); + } + + @override + void dispose() { + super.dispose(); + } + + void _loadInitData() async { + final nollningResponse = await ApiService.apiClient + .getNollningApi() + .nollningGetNollningByYear(year: DateTime.now().year); + final nollningData = nollningResponse.data; + + if (nollningData != null) { + List mentorGroups = nollningData.nollningGroups + .where((group) => group.group.groupType.name == "mentor") + .toList(); + for (final nollningGroup in mentorGroups) { + final groupMissions = await ApiService.apiClient + .getNollningApi() + .nollningGetGroupMissionsFromNollningGroup( + nollningGroupId: nollningGroup.id, + ); + + int totalPoints = 0; + if (groupMissions.data != null && groupMissions.data!.isNotEmpty) { + for (final gm in groupMissions.data!.toList()) { + if (gm.isAccepted == "Accepted") { + totalPoints += gm.points; + } + } + } + groupPointsMap[nollningGroup] = totalPoints; + } + } + + setState(() { + this.nollning = nollningData; + }); + } + + List _createHighscoreCards(BuildContext context) { + var t = AppLocalizations.of(context)!; + List highscoreCards = []; + + Map sortedMap = Map.fromEntries( + groupPointsMap.entries.toList() + ..sort((a, b) => b.value.compareTo(a.value)), + ); + + int pos = 1; + + sortedMap.forEach((key, value) { + highscoreCards.add(highscoreCard(key, value, pos, context)); + pos++; + }); + + return highscoreCards; + } + + Widget highscoreCard( + NollningGroupRead group, + int points, + int position, + BuildContext context, + ) { + var t = AppLocalizations.of(context)!; + return Center( + child: Container( + height: widget.availableHeight / 15, + width: widget.availableWidth - 40, + child: Card( + shadowColor: Colors.transparent, + color: Colors.transparent, + child: Stack( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Center( + child: Text( + position.toString(), + style: TextStyle( + color: _getPositionColor(position), + fontFamily: "LoRes12OT", + fontWeight: FontWeight.w800, + fontSize: widget.availableWidth / 15, + ), + ), + ), + Container( + width: widget.availableWidth / 3, + height: widget.availableHeight / 10, + child: Center( + child: Text( + textAlign: TextAlign.center, + group.group.name.length <= 40 + ? group.group.name + : group.group.name.substring(0, 20) + "...", + style: TextStyle( + fontFamily: "LoRes12OT", + fontWeight: FontWeight.w600, + fontSize: group.group.name.length <= 10 + ? widget.availableWidth / 15 + : (group.group.name.length <= 20 + ? widget.availableWidth / 15 + : widget.availableWidth / 30), + color: _getPositionColor(position), + ), + ), + ), + ), + Center( + child: Text( + _pointsToString(points), + style: TextStyle( + fontFamily: "LoRes12OT", + fontWeight: FontWeight.normal, + fontSize: widget.availableWidth / 15, + color: _getPositionColor(position), + ), + ), + ), + ], + ), + ], + ), + ), + ), + ); + } + + @override + Widget build(BuildContext context) { + var t = AppLocalizations.of(context)!; + + if (this.nollning == null) { + return Center(child: CircularProgressIndicator()); + } + + return Container( + height: widget.availableHeight, + width: widget.availableWidth, + child: Stack( + children: [ + SingleChildScrollView( + child: Column( + children: [ + Padding( + padding: EdgeInsets.only(top: widget.availableHeight * 0.01), + child: Text( + "HIGH SCORES", + style: TextStyle( + fontFamily: "LoRes12OT", + fontSize: widget.availableWidth / 10, + color: Colors.white, // justera efter din bakgrund + ), + ), + ), + ..._createHighscoreCards(context), + ], + ), + ), + ], + ), + ); + } + + Color _getPositionColor(int pos) { + switch (pos % 4) { + case 0: + return Colors.indigo; + case 1: + return Colors.yellow; + case 2: + return Colors.pink; + default: + return Colors.cyan; + } + } + + String _pointsToString(int points) { + String pointString = points.toString(); + while (pointString.length < 6) { + pointString = "0" + pointString; + } + return pointString; + } +} diff --git a/lib/screens/nollning/questscreen_26/quest_home.dart b/lib/screens/nollning/questscreen_26/quest_home.dart new file mode 100644 index 00000000..cc1b9b4e --- /dev/null +++ b/lib/screens/nollning/questscreen_26/quest_home.dart @@ -0,0 +1,119 @@ +import 'package:flutter/material.dart'; +import 'package:fsek_mobile/screens/nollning/questscreen_26/highscore.dart'; +import 'package:fsek_mobile/screens/nollning/questscreen_26/quests.dart'; + +class QuestHomeScreen extends StatefulWidget { + @override + _QuestHomeScreenState createState() => _QuestHomeScreenState(); +} + +class _QuestHomeScreenState extends State { + String rubrik = "assets/data/nollning_26/uppdrag/rubrik1.png"; + Color backgroundColor = Color(0xFF00487B); + TabController? _controller; + + void _handleTabChange() { + setState(() { + rubrik = _controller!.index == 0 + ? "assets/data/nollning_26/uppdrag/rubrik1.png" + : "assets/data/nollning_26/uppdrag/rubrik2.png"; + backgroundColor = _controller!.index == 0 + ? Color(0xFF00487B) + : Colors.black; + }); + } + + @override + void dispose() { + _controller?.removeListener(_handleTabChange); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + double screenWidth = MediaQuery.of(context).size.width; + double screenHeight = MediaQuery.of(context).size.height; + + return DefaultTabController( + length: 2, + child: Builder( + builder: (context) { + final controller = DefaultTabController.of(context); + if (_controller != controller) { + _controller?.removeListener(_handleTabChange); + _controller = controller; + _controller?.addListener(_handleTabChange); + } + return Scaffold( + body: Container( + height: screenHeight, + width: screenWidth, + child: Stack( + children: [ + Positioned.fill(child: ColoredBox(color: backgroundColor)), + Column( + children: [ + Container( + width: screenWidth, + height: screenHeight / 8, + child: Stack( + children: [ + Positioned.fill( + child: Padding( + padding: EdgeInsets.only( + top: screenHeight * 0.03, + bottom: screenHeight * 0.01, + ), + child: Image.asset(rubrik, fit: BoxFit.fill), + ), + ), + Positioned.fill( + child: Row( + children: [ + Expanded( + child: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => _controller?.animateTo(0), + ), + ), + Expanded( + child: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => _controller?.animateTo(1), + ), + ), + ], + ), + ), + ], + ), + ), + Container( + width: screenWidth, + height: screenHeight - (screenHeight / 8), + child: TabBarView( + children: [ + QuestScreen( + availableHeight: + screenHeight - (screenHeight / 8), + availableWidth: screenWidth, + ), + HighscoreScreen( + availableHeight: + screenHeight - (screenHeight / 8), + availableWidth: screenWidth, + ), + ], + ), + ), + ], + ), + ], + ), + ), + ); + }, + ), + ); + } +} diff --git a/lib/screens/nollning/questscreen_26/quests.dart b/lib/screens/nollning/questscreen_26/quests.dart new file mode 100644 index 00000000..7399860d --- /dev/null +++ b/lib/screens/nollning/questscreen_26/quests.dart @@ -0,0 +1,1260 @@ +import 'package:flutter/material.dart'; +import 'package:fsek_mobile/api_client/lib/api_client.dart'; +import 'package:fsek_mobile/services/api.service.dart'; +import 'package:fsek_mobile/l10n/app_localizations.dart'; + +class QuestScreen extends StatefulWidget { + final double availableWidth; + final double availableHeight; + + QuestScreen({required this.availableHeight, required this.availableWidth}); + + @override + _QuestScreenState createState() => _QuestScreenState(); +} + +class _QuestScreenState extends State + with SingleTickerProviderStateMixin { + Map> missionsMap = {}; + Map> groupMissionsMap = {}; + AdminUserRead? user; + NollningRead? nollning; + NollningGroupRead? nollningGroup; + dynamic selectedMission; + late TabController _tabController; + + String bakgrund = "assets/data/nollning_25/uppdrag/bakgrund.png"; + String avklarad = "assets/data/nollning_25/uppdrag/bricka-avklarad.png"; + String bedomning = "assets/data/nollning_25/uppdrag/bricka-bedomning.png"; + String misslyckad = "assets/data/nollning_25/uppdrag/bricka-misslyckad.png"; + String rubrik = "assets/data/nollning_25/uppdrag/rubrik.png"; + String ej_vald = "assets/data/nollning_26/uppdrag/ej_vald.png"; + String vald = "assets/data/nollning_26/uppdrag/vald.png"; + String done_check = "assets/data/nollning_26/uppdrag/done_check.png"; + String done_pixelart_placeholder = + "assets/data/nollning_26/uppdrag/done_pixelart_placeholder.png"; + String blue = "assets/data/nollning_26/uppdrag/knapp_blue.png"; + String orange = "assets/data/nollning_26/uppdrag/knapp_orange.png"; + String purple = "assets/data/nollning_26/uppdrag/knapp_purple.png"; + String red = "assets/data/nollning_26/uppdrag/knapp_red.png"; + String yellow = "assets/data/nollning_26/uppdrag/knapp_yellow.png"; + String pixelart_placeholder = + "assets/data/nollning_26/uppdrag/pixelart_placeholder.png"; + String pixelart_barbiedans = + "assets/data/nollning_26/uppdrag/pixelart_barbiedans.png"; + String pixelart_fadder = + "assets/data/nollning_26/uppdrag/pixelart_fadder.png"; + String pixelart_kreativ = + "assets/data/nollning_26/uppdrag/pixelart_kreativ.png"; + String pixelart_resa = "assets/data/nollning_26/uppdrag/pixelart_resa.png"; + String pixelart_spel = "assets/data/nollning_26/uppdrag/pixelart_spel.png"; + String pixelart_tavling = + "assets/data/nollning_26/uppdrag/pixelart_tävling.png"; + String pixelart_alg = "assets/data/nollning_26/uppdrag/pixelart_älg.png"; + String poke_kort = "assets/data/nollning_26/uppdrag/pokekort_exkl.png"; + String clouds = "assets/data/nollning_26/uppdrag/clouds.png"; + + /*int _checkNollningWeek() { + if (DateTime.now().toLocal().isAfter(DateTime(2026, 9, 20, 23, 59, 59))) { + return 5; + } else if (DateTime.now().toLocal().isAfter( + DateTime(2026, 9, 13, 23, 59, 59), + )) { + return 4; + } else if (DateTime.now().toLocal().isAfter( + DateTime(2026, 9, 6, 23, 59, 59), + )) { + return 3; + } else if (DateTime.now().toLocal().isAfter( + DateTime(2026, 8, 30, 23, 59, 59), + )) { + return 2; + } else if (DateTime.now().toLocal().isAfter( + DateTime(2026, 8, 23, 23, 59, 59), + )) { + return 1; + } else { + return 0; + } + }*/ + int _checkNollningWeek() { + return 4; + } + + @override + void initState() { + super.initState(); + + this._tabController = TabController( + length: 3, + initialIndex: 2, + vsync: this, + ); //_checkNollningWeek() + + _loadInitData(); + } + + @override + void dispose() { + _tabController.dispose(); + super.dispose(); + } + + void refresh() { + setState(() { + this.missionsMap = {}; + this.groupMissionsMap = {}; + this.user = null; + this.nollning = null; + this.nollningGroup = null; + this.selectedMission = null; + }); + _loadInitData(); + } + + Future _loadInitData() async { + final user = await ApiService.apiClient.getUsersApi().usersGetMe(); + final userData = user.data; + final nollning = await ApiService.apiClient + .getNollningApi() + .nollningGetNollningByYear(year: DateTime.now().year); + final nollningData = nollning.data; + List? missionList; + NollningGroupRead? nollningGroupData; + List? groupMissionList; + + if (nollningData != null && userData != null) { + final missions = await ApiService.apiClient + .getNollningApi() + .nollningGetAllAdventureMissionsInNollning( + nollningId: nollningData.id, + ); + if (missions.data != null) { + missionList = missions.data!.toList(); + } + nollningGroupData = await findUserNollningGroup( + nollningData, + userData.id, + ); + if (nollningGroupData != null) { + final groupmissions = await ApiService.apiClient + .getNollningApi() + .nollningGetGroupMissionsFromNollningGroup( + nollningGroupId: nollningGroupData.id, + ); + groupmissions.data != null + ? groupMissionList = groupmissions.data?.toList() + : (); + } + + setState(() { + this.user = userData; + this.nollning = nollningData; + this.nollningGroup = nollningGroupData; + missionList != null + ? missionList.forEach((mission) { + this.missionsMap + .putIfAbsent(mission.nollningWeek, () => []) + .add(mission); + }) + : (); + groupMissionList != null + ? groupMissionList.forEach((groupmission) { + this.groupMissionsMap + .putIfAbsent( + groupmission.adventureMission.nollningWeek, + () => [], + ) + .add(groupmission); + }) + : (); + }); + } + } + + NollningGroupRead? findUserNollningGroup(NollningRead nollning, int userId) { + try { + final nollningGroup = nollning.nollningGroups.firstWhere( + (nollningGroup) => (nollningGroup.group.groupUsers.any( + (groupUser) => groupUser.user.id == userId, + )), + ); + return nollningGroup; + } catch (e) { + return null; + } + } + + // bool isSameDay(DateTime a, DateTime b) { + // print((a.year == b.year) && (a.month == b.month) && (a.day == b.day)); + // return ((a.year == b.year) && (a.month == b.month) && (a.day == b.day)); + // } + + @override + Widget build(BuildContext context) { + var t = AppLocalizations.of(context)!; + + double screenWidth = MediaQuery.of(context).size.width; + double screenHeight = MediaQuery.of(context).size.height; + + if (user == null || nollning == null) { + return Scaffold( + body: Container( + height: widget.availableHeight, + width: widget.availableWidth, + child: Stack(children: [Center(child: CircularProgressIndicator())]), + ), + ); + } + + if (_tabController.length != 0) + return Scaffold( + backgroundColor: Colors.transparent, + body: Column( + children: [ + Container( + width: widget.availableWidth, + height: widget.availableHeight / 20, + child: Row( + children: List.generate(3, (index) { + final labels = ["Missed", "Completed", "Current"]; + return Expanded( + child: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () { + if (selectedMission == null) { + _tabController.animateTo(index); + } + }, + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: widget.availableWidth / 30, + ), + child: AnimatedBuilder( + animation: _tabController, + builder: (context, _) { + final isSelected = _tabController.index == index; + return Stack( + children: [ + Positioned.fill( + child: Image.asset( + isSelected ? vald : ej_vald, + fit: BoxFit.fill, + ), + ), + Center( + child: Text( + labels[index], + style: TextStyle( + color: isSelected + ? Colors.orange + : Colors.blue, + fontFamily: "Consolas", + ), + ), + ), + ], + ); + }, + ), + ), + ), + ); + }), + ), + ), + Expanded( + child: TabBarView( + controller: _tabController, + children: [ + _questTab(false, context), // Ej avklarade + _questTab(true, context), // Avklarade + _questTab(null, context), // Alla + ], + ), + ), + ], + ), + ); + return Container( + height: widget.availableHeight, + width: widget.availableWidth, + ); + } + + String _pointsFromMission(GroupMissionRead mission, BuildContext context) { + var t = AppLocalizations.of(context)!; + String finalString; + + switch (mission.isAccepted) { + case "Accepted": + finalString = + "${mission.points} / ${mission.adventureMission.maxPoints} ${t.introductionPoints2}"; + + case "Failed": + finalString = + "${0} / ${mission.adventureMission.maxPoints} ${t.introductionPoints2}"; + + case "Review": + finalString = + mission.adventureMission.minPoints == + mission.adventureMission.maxPoints + ? mission.adventureMission.maxPoints.toString() + : "${mission.adventureMission.minPoints} - ${mission.adventureMission.maxPoints} ${t.introductionPoints2}"; + + default: + finalString = ""; + } + + return finalString; + } + + // Not used right now, do we want them to be able to cancel attempts here... I dont think so (You would need manage permission anyway so...) + Future _removeMissionAttempt( + int adventureMissionId, + BuildContext context, + ) async { + var t = AppLocalizations.of(context)!; + + try { + final gmDelete = GroupMissionDelete( + (b) => b..adventureMissionId = adventureMissionId, + ); + final response = await ApiService.apiClient + .getNollningApi() + .nollningDeleteGroupMission( + nollningGroupId: nollningGroup!.id, + groupMissionDelete: gmDelete, + ); + + if (mounted) { + showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text(t.localeName == "sv" ? "Lyckat!" : "Success!"), + content: Text( + t.localeName == "sv" + ? "Uppdragsförsök borttaget!" + : "Mission attempt removed", + ), + actions: [ + TextButton( + onPressed: () => setState(() { + Navigator.of(context).pop(); + refresh(); + }), + child: Text("OK"), + ), + ], + ), + ); + } + } catch (e) { + if (mounted) { + showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text(t.localeName == "sv" ? "Misslyckat!" : "Failure!"), + content: Text( + t.localeName == "sv" + ? "Misslyckad borttagning av försök" + : "Registration removal failed", + ), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(), + child: Text("OK"), + ), + ], + ), + ); + } + } + } + + Future _sendMissionAttempt( + AdventureMissionRead adventureMission, + BuildContext context, + ) async { + var t = AppLocalizations.of(context)!; + + if (adventureMission.nollningWeek != (_checkNollningWeek() - 1)) { + showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text(t.localeName == "sv" ? "Misslyckat!" : "Failure!"), + content: Text( + t.localeName == "sv" + ? "Misslyckad registrering!\nUppdragsregistrering för denna veckan har stängt!" + : "Falied to register mission!\nMission registration for this week has closed!", + ), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(), + child: Text("OK"), + ), + ], + ), + ); + return; + } + try { + final gm = GroupMissionCreate((b) { + b..adventureMissionId = adventureMission.id; + b..isAccepted = null; + b..points = null; + }); + final response = await ApiService.apiClient + .getNollningApi() + .nollningAddGroupMission( + groupMissionCreate: gm, + nollningGroupId: nollningGroup!.id, + ); + + if (mounted) { + showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text(t.localeName == "sv" ? "Lyckat!" : "Success!"), + content: Text( + t.localeName == "sv" + ? "Uppdragsförsök registerat!" + : "Mission attempt registered", + ), + actions: [ + TextButton( + onPressed: () => setState(() { + Navigator.of(context).pop(); + refresh(); + }), + child: Text("OK"), + ), + ], + ), + ); + } + } catch (e) { + if (mounted) { + showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text(t.localeName == "sv" ? "Misslyckat!" : "Failure!"), + content: Text( + t.localeName == "sv" + ? "Misslyckad registrering" + : "Registration failed", + ), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(), + child: Text("OK"), + ), + ], + ), + ); + } + } + } + + Widget _missionDetails(dynamic mission, BuildContext context) { + var t = AppLocalizations.of(context)!; + + if (mission is AdventureMissionRead) { + return Container( + height: widget.availableHeight, + width: widget.availableWidth, + child: Stack( + children: [ + Positioned.fill(child: Image.asset(poke_kort, fit: BoxFit.fill)), + Padding( + padding: EdgeInsets.only(left: 30, right: 30), + child: Column( + children: [ + SizedBox(height: 40), + Center( + child: Text( + t.localeName == "sv" ? mission.titleSv : mission.titleEn, + style: TextStyle( + fontFamily: "MinionPro", + fontWeight: FontWeight.w600, + fontSize: widget.availableWidth / 10, + color: Colors.black, // Color(0xFFFCBD1D) + ), + ), + ), + Text( + t.localeName == "sv" + ? mission.descriptionSv + : mission.descriptionEn, + style: TextStyle( + fontFamily: "MinionPro", + fontWeight: FontWeight.normal, + fontSize: widget.availableWidth / 25, + ), + ), + Center( + child: Text( + mission.minPoints == mission.maxPoints + ? mission.maxPoints.toString() + : "${mission.minPoints} - ${mission.maxPoints} ${t.introductionPoints2}", + style: TextStyle( + fontFamily: "MinionPro", + fontWeight: FontWeight.w600, + fontSize: widget.availableWidth / 22, + ), + ), + ), + SizedBox(height: 20), + Center( + child: Container( + height: widget.availableHeight / 15, + width: widget.availableWidth, + child: InkWell( + splashColor: + Colors.transparent, // Remove splash transparency + highlightColor: + Colors.transparent, // Remove highlight transparency + borderRadius: BorderRadius.circular(12), + onTap: () { + final parentContext = context; + showDialog( + context: parentContext, + builder: (dialogContext) => AlertDialog( + content: Text( + t.localeName == "sv" + ? "Registera uppdragsförsök?" + : "Register mission attempt?", + ), + actions: [ + TextButton( + onPressed: () async { + Navigator.of(dialogContext).pop(); + await _sendMissionAttempt( + mission, + parentContext, + ); + }, + child: Text(t.eventYes), + ), + TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: Text(t.eventNo), + ), + ], + ), + ); + }, + child: Stack( + children: [ + Center( + child: ClipRRect( + borderRadius: BorderRadius.circular(20), + child: Image.asset( + rubrik, + fit: BoxFit.fitWidth, + ), + ), + ), + Center( + child: Text( + t.localeName == "sv" + ? "Registrera försök" + : "Register attempt", + style: TextStyle( + fontFamily: "MinionPro", + fontWeight: FontWeight.w600, + fontSize: widget.availableWidth / 20, + color: Colors + .black, // Optional: change to fit your theme + ), + ), + ), + ], + ), + ), + ), + ), + SizedBox(height: 50), + Center( + child: Container( + height: widget.availableHeight / 30, + width: widget.availableWidth / 3, + child: InkWell( + splashColor: + Colors.transparent, // Remove splash transparency + highlightColor: + Colors.transparent, // Remove highlight transparency + borderRadius: BorderRadius.circular(12), + onTap: () => setState(() { + this.selectedMission = null; + }), + child: Stack( + children: [ + Center( + child: ClipRRect( + borderRadius: BorderRadius.circular(15), + child: Image.asset( + rubrik, + fit: BoxFit.fitHeight, + ), + ), + ), + Center( + child: Text( + textAlign: TextAlign.center, + t.localeName == "sv" ? "Tillbaka" : "Back", + style: TextStyle( + fontFamily: "MinionPro", + fontWeight: FontWeight.w600, + fontSize: widget.availableWidth / 20, + color: Colors + .black, // Optional: change to fit your theme + ), + ), + ), + ], + ), + ), + ), + ), + ], + ), + ), + ], + ), + ); + } + + if (mission is GroupMissionRead) { + return Container( + height: widget.availableHeight, + width: widget.availableWidth, + child: Stack( + children: [ + Positioned.fill(child: Image.asset(bakgrund, fit: BoxFit.fill)), + Padding( + padding: EdgeInsets.only(left: 30, right: 30), + child: Column( + children: [ + SizedBox(height: 40), + Center( + child: Text( + t.localeName == "sv" + ? mission.adventureMission.titleSv + : mission.adventureMission.titleEn, + style: TextStyle( + fontFamily: "MinionPro", + fontWeight: FontWeight.w600, + fontSize: widget.availableWidth / 10, + color: Colors.black, // Color(0xFFFCBD1D) + ), + ), + ), + Text( + t.localeName == "sv" + ? mission.adventureMission.descriptionSv + : mission.adventureMission.descriptionEn, + style: TextStyle( + fontFamily: "MinionPro", + fontWeight: FontWeight.normal, + fontSize: widget.availableWidth / 25, + ), + ), + Center( + child: Text( + _pointsFromMission(mission, context), + style: TextStyle( + fontFamily: "MinionPro", + fontWeight: FontWeight.w600, + fontSize: widget.availableWidth / 22, + ), + ), + ), + SizedBox(height: 5), + Center(child: _missionReview(context, mission)), + SizedBox(height: 50), + Center( + child: Container( + height: widget.availableHeight / 30, + width: widget.availableWidth / 3, + child: InkWell( + splashColor: + Colors.transparent, // Remove splash transparency + highlightColor: + Colors.transparent, // Remove highlight transparency + borderRadius: BorderRadius.circular(12), + onTap: () => setState(() { + this.selectedMission = null; + }), + child: Stack( + children: [ + Center( + child: ClipRRect( + borderRadius: BorderRadius.circular(15), + child: Image.asset( + rubrik, + fit: BoxFit.fitHeight, + ), + ), + ), + Center( + child: Text( + textAlign: TextAlign.center, + t.localeName == "sv" ? "Tillbaka" : "Back", + style: TextStyle( + fontFamily: "MinionPro", + fontWeight: FontWeight.w600, + fontSize: widget.availableWidth / 20, + color: Colors + .black, // Optional: change to fit your theme + ), + ), + ), + ], + ), + ), + ), + ), + ], + ), + ), + ], + ), + ); + } + + return SizedBox(); + } + + Widget _questTab(bool? completedQuestsTab, BuildContext context) { + // completedQuestsTab: true = "Completed", false = "Missed", None = "Current" + if (selectedMission != null) { + return _missionDetails(selectedMission, context); + } + + return Container( + height: widget.availableHeight, + width: widget.availableWidth, + child: Stack( + children: [ + SingleChildScrollView( + child: Column( + children: [ + SizedBox(height: 10), + ...generateTabMissionCards( + missionsMap, + groupMissionsMap, + completedQuestsTab, + context, + ), + if (completedQuestsTab == null) ...[Image.asset(clouds)], + ], + ), + ), + ], + ), + ); + } + + Widget createMissionCard(dynamic element, BuildContext context) { + var t = AppLocalizations.of(context)!; + + if (element is AdventureMissionRead) { + Container container = Container( + height: widget.availableHeight / 6, + width: widget.availableWidth - 40, + child: Card( + shadowColor: Colors.transparent, + color: Colors.transparent, + surfaceTintColor: null, + child: InkWell( + onTap: () => (setState(() { + this.selectedMission = element; + })), + child: Stack( + children: [ + Positioned.fill( + child: Image.asset(_buttonArt(element), fit: BoxFit.fill), + ), + Positioned( + left: widget.availableHeight / 6 * 0.08, + top: widget.availableHeight / 6 * 0.1, + child: SizedBox( + width: widget.availableHeight / 6 * 0.73, + height: widget.availableHeight / 6 * 0.73, + child: Stack( + children: [ + Image.asset(pixelart_placeholder, fit: BoxFit.contain), + Positioned.fill( + child: Center( + child: Image.asset( + _pixelArt(element), + fit: BoxFit.contain, + ), + ), + ), + ], + ), + ), + ), + Positioned.fill( + child: Padding( + padding: EdgeInsets.only( + left: + widget.availableHeight / 6 * 0.1 + // left margin + widget.availableHeight / 6 * 0.7 + // image width + 20, + ), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + t.localeName == "sv" + ? element.titleSv + : element.titleEn, + style: TextStyle( + fontFamily: "LoRes12OT", + fontWeight: FontWeight.w600, + fontSize: widget.availableWidth / 20, + color: Colors.white, + ), + ), + ), + ), + ), + ], + ), + ), + ), + ); + + return Center(child: container); + } else if (element is GroupMissionRead) { + switch (element.isAccepted) { + case "Accepted": + { + Container container = Container( + height: widget.availableHeight / 6, + width: widget.availableWidth - 40, + child: Card( + shadowColor: Colors.transparent, + color: Colors.transparent, + surfaceTintColor: null, + child: InkWell( + onTap: () => (setState(() { + this.selectedMission = element; + })), + child: Stack( + children: [ + Positioned.fill( + child: Image.asset( + _buttonArt(element), + fit: BoxFit.fill, + ), + ), + Positioned( + left: widget.availableHeight / 6 * 0.08, + top: widget.availableHeight / 6 * 0.1, + child: SizedBox( + width: widget.availableHeight / 6 * 0.73, + height: widget.availableHeight / 6 * 0.73, + child: Stack( + children: [ + Positioned.fill( + child: Center( + child: Image.asset( + _pixelArt(element), + fit: BoxFit.contain, + ), + ), + ), + Image.asset( + done_pixelart_placeholder, + fit: BoxFit.contain, + ), + Image.asset(done_check, fit: BoxFit.contain), + ], + ), + ), + ), + Positioned.fill( + child: Padding( + padding: EdgeInsets.only( + left: + widget.availableHeight / + 6 * + 0.1 + // left margin + widget.availableHeight / + 6 * + 0.7 + // image width + 20, + ), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + t.localeName == "sv" + ? element.adventureMission.titleSv + : element.adventureMission.titleEn, + style: TextStyle( + fontFamily: "LoRes12OT", + fontWeight: FontWeight.w600, + fontSize: widget.availableWidth / 20, + color: Colors.white, + ), + ), + ), + ), + ), + ], + ), + ), + ), + ); + + return Center(child: container); + } + + case "Failed": + { + Container container = Container( + height: widget.availableHeight / 6, + width: widget.availableWidth - 40, + child: Card( + shadowColor: Colors.transparent, + color: Colors.transparent, + surfaceTintColor: null, + child: InkWell( + onTap: () => (setState(() { + this.selectedMission = element; + })), + child: Stack( + children: [ + Positioned.fill( + child: Image.asset( + _buttonArt(element), + fit: BoxFit.fill, + ), + ), + Positioned( + left: widget.availableHeight / 6 * 0.08, + top: widget.availableHeight / 6 * 0.1, + child: SizedBox( + width: widget.availableHeight / 6 * 0.73, + height: widget.availableHeight / 6 * 0.73, + child: Stack( + children: [ + Positioned.fill( + child: Center( + child: Image.asset( + _pixelArt(element), + fit: BoxFit.contain, + ), + ), + ), + Image.asset( + done_pixelart_placeholder, + fit: BoxFit.contain, + ), + ], + ), + ), + ), + Positioned.fill( + child: Padding( + padding: EdgeInsets.only( + left: + widget.availableHeight / + 6 * + 0.1 + // left margin + widget.availableHeight / + 6 * + 0.7 + // image width + 20, + ), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + t.localeName == "sv" + ? element.adventureMission.titleSv + : element.adventureMission.titleEn, + style: TextStyle( + fontFamily: "LoRes12OT", + fontWeight: FontWeight.w600, + fontSize: widget.availableWidth / 20, + color: Colors.white, + ), + ), + ), + ), + ), + ], + ), + ), + ), + ); + + return Center(child: container); + } + + case "Review": + { + Container container = Container( + height: widget.availableHeight / 6, + width: widget.availableWidth - 40, + child: Card( + shadowColor: Colors.transparent, + color: Colors.transparent, + surfaceTintColor: null, + child: InkWell( + onTap: () => (setState(() { + this.selectedMission = element; + })), + child: Stack( + children: [ + Positioned.fill( + child: Image.asset( + _buttonArt(element), + fit: BoxFit.fill, + ), + ), + Positioned( + left: widget.availableHeight / 6 * 0.08, + top: widget.availableHeight / 6 * 0.1, + child: SizedBox( + width: widget.availableHeight / 6 * 0.73, + height: widget.availableHeight / 6 * 0.73, + child: Stack( + children: [ + Image.asset( + pixelart_placeholder, + fit: BoxFit.contain, + ), + Positioned.fill( + child: Center( + child: Image.asset( + _pixelArt(element), + fit: BoxFit.contain, + ), + ), + ), + Image.asset( + done_pixelart_placeholder, + fit: BoxFit.contain, + ), + ], + ), + ), + ), + Positioned.fill( + child: Padding( + padding: EdgeInsets.only( + left: + widget.availableHeight / + 6 * + 0.1 + // left margin + widget.availableHeight / + 6 * + 0.7 + // image width + 20, + ), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + t.localeName == "sv" + ? element.adventureMission.titleSv + : element.adventureMission.titleEn, + style: TextStyle( + fontFamily: "LoRes12OT", + fontWeight: FontWeight.w600, + fontSize: widget.availableWidth / 20, + color: Colors.white, + ), + ), + ), + ), + ), + ], + ), + ), + ), + ); + return Center(child: container); + } + } + } + return SizedBox(); + } + + Text _missionReview(BuildContext context, GroupMissionRead gm) { + var t = AppLocalizations.of(context)!; + switch (gm.isAccepted) { + case "Accepted": + return Text( + t.localeName == "sv" ? "Uppdrag accepterat" : "Mission success", + style: TextStyle(color: Colors.green), + ); + + case "Failed": + return Text( + t.localeName == "sv" ? "Uppdrag misslyckat" : "Mission failed", + style: TextStyle(color: Colors.red), + ); + + default: + return Text( + t.localeName == "sv" + ? "Uppdrag under granskning" + : "Mission under review", + style: TextStyle(color: Color(0xFFcfac23)), + ); + } + } + + List generateTabMissionCards( + Map> missionsMap, + Map> groupMissionsMap, + bool? completedQuestsTab, // true=completed, false=missed, None=current + BuildContext context, + ) { + final week = _checkNollningWeek(); + final allMissions = []; + final groupMissions = []; + + if (completedQuestsTab == null) { + allMissions.addAll(missionsMap[week] ?? []); + groupMissions.addAll(groupMissionsMap[week] ?? []); + } else { + for (int w = 0; w <= week; w += 1) { + allMissions.addAll(missionsMap[w] ?? []); + groupMissions.addAll(groupMissionsMap[w] ?? []); + } + } + + final missionList = []; + allMissions.forEach((mission) { + if (groupMissions.any( + (groupMission) => groupMission.adventureMission.id == mission.id, + )) { + missionList.add( + groupMissions.firstWhere( + (groupMission) => (mission.id == groupMission.adventureMission.id), + ), + ); + } else { + missionList.add(mission); + } + }); + + var filteredMissionList = missionList; + if (completedQuestsTab == true) { + filteredMissionList = missionList.where((m) => _isCompleted(m)).toList(); + } else if (completedQuestsTab == false) { + filteredMissionList = missionList.where((m) => _isFailed(m)).toList(); + } + + List list = []; + filteredMissionList.forEach( + (element) => (list.add(createMissionCard(element, context))), + ); + + return list; + } + + bool _isCompleted(dynamic mission) { + if (mission is GroupMissionRead) { + return mission.isAccepted == "Accepted" || mission.isAccepted == "Review"; + } + return false; + } + + bool _isFailed(dynamic mission) { + if (mission is GroupMissionRead) { + return mission.isAccepted == "Failed"; + } + return false; + } + + String _pixelArt(dynamic mission) { + //test tills categories mergeas + return pixelart_alg; + } + + String _buttonArt(dynamic mission) { + return blue; + } + + /*String _pixelArt(dynamic mission) { + String category = ""; + String pixelArt; + if (mission is AdventureMissionRead) { + category = mission.missionCategory; + } else if (mission is GroupMissionRead) { + category = mission.adventureMission.missionCategory; + } + switch (category) { + case "Barbiedans": + pixelArt = pixelart_barbiedans; + break; + case "Fadder": + pixelArt = pixelart_fadder; + break; + case "Kreativ": + pixelArt = pixelart_kreativ; + break; + case "Resa": + pixelArt = pixelart_resa; + break; + case "Spel": + pixelArt = pixelart_spel; + break; + case "Tävling": + pixelArt = pixelart_tavling; + break; + case "Älg": + pixelArt = pixelart_alg; + break; + default: + pixelArt = pixelart_placeholder; + break; + } + return pixelArt; + }*/ + + /*String _buttonArt(dynamic mission) { + String category = ""; + String pixelArt; + if (mission is AdventureMissionRead) { + category = mission.missionCategory; + } else if (mission is GroupMissionRead) { + category = mission.adventureMission.missionCategory; + } + switch (category) { + case "Barbiedans": + pixelArt = purple; + break; + case "Fadder": + pixelArt = red; + break; + case "Kreativ": + pixelArt = blue; + break; + case "Resa": + pixelArt = orange; + break; + case "Spel": + pixelArt = purple; + break; + case "Tävling": + pixelArt = yellow; + break; + case "Älg": + pixelArt = orange; + break; + default: + pixelArt = orange; + break; + } + return pixelArt; + }*/ +} diff --git a/lib/screens/other/other.dart b/lib/screens/other/other.dart index 7a820271..cf7784d2 100644 --- a/lib/screens/other/other.dart +++ b/lib/screens/other/other.dart @@ -4,7 +4,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:fsek_mobile/screens/contact/contact.dart'; import 'package:fsek_mobile/screens/gallery/gallery.dart'; import 'package:fsek_mobile/screens/nollning/emergency_contacts.dart'; -import 'package:fsek_mobile/screens/nollning/nolleguide25/nolleguide_home.dart'; +import 'package:fsek_mobile/screens/nollning/nolleguide_26/nolleguide_home.dart'; import 'package:fsek_mobile/screens/other/aboutGuild.dart'; import 'package:fsek_mobile/screens/settings/language_settings.dart'; import 'package:fsek_mobile/screens/settings/settings.dart'; diff --git a/lib/util/nollning/week_tracker.dart b/lib/util/nollning/week_tracker.dart index 05242308..40924cd1 100644 --- a/lib/util/nollning/week_tracker.dart +++ b/lib/util/nollning/week_tracker.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; class WeekTracker { + /* Not used anymore but will be left in because otherwise stuff breaks */ static const List weekColors = [ Color(0xFFf77e14), // v0 Color(0xFFf77e14), // v1 @@ -10,13 +11,14 @@ class WeekTracker { Color(0xFFf77e14), // for other times and purposes ]; + /* This is used though */ static int determineWeek({bool differentPreIntroduction = false}) { DateTime now = DateTime.now(); - DateTime v0 = DateTime(2024, 8, 26, 0, 0); - DateTime v1 = DateTime(2024, 9, 2, 0, 0); - DateTime v2 = DateTime(2024, 9, 9, 0, 0); - DateTime v3 = DateTime(2024, 9, 16, 0, 0); - DateTime v4 = DateTime(2024, 9, 23, 0, 0); + DateTime v0 = DateTime(2026, 8, 24, 0, 0); + DateTime v1 = DateTime(2026, 8, 31, 0, 0); + DateTime v2 = DateTime(2026, 9, 7, 0, 0); + DateTime v3 = DateTime(2026, 9, 14, 0, 0); + DateTime v4 = DateTime(2026, 9, 21, 0, 0); List weeks = [v0, v1, v2, v3, v4]; @@ -33,10 +35,10 @@ class WeekTracker { } } - // If it for some reason doesnt find one I guess default to week 0 for no spoilers? - // or 5 for generic stuff, like coloring in with orange + // If it for some reason doesn't find one I guess default to week 0 for no spoilers? + // or 4 for generic stuff, like coloring in with orange if (differentPreIntroduction) - return 5; + return 4; else return 0; } diff --git a/pubspec.yaml b/pubspec.yaml index 0714d43b..a8adfce6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -125,6 +125,8 @@ flutter: - assets/data/nollning_25/ - assets/data/nollning_25/schema/ - assets/data/nollning_25/homescreen/ + - assets/data/nollning_26/homescreen/ + - assets/data/nollning_26/uppdrag/ fonts: - family: Brandon Grotesque @@ -145,6 +147,12 @@ flutter: weight: 500 - asset: assets/fonts/MinionPro-Bold.otf weight: 900 + - family: LoRes12OT + fonts: + - asset: assets/fonts/LoRes12OT-Regular.ttf + - family: Consolas + fonts: + - asset: assets/fonts/consolas.ttf # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware.