diff --git a/refilc/assets/svg/cover_arts/grid.svg b/refilc/assets/svg/cover_arts/grid.svg new file mode 100644 index 0000000..69e221c --- /dev/null +++ b/refilc/assets/svg/cover_arts/grid.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/refilc/assets/svg/cover_arts/line.svg b/refilc/assets/svg/cover_arts/line.svg new file mode 100644 index 0000000..7436d92 --- /dev/null +++ b/refilc/assets/svg/cover_arts/line.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/refilc/assets/svg/cover_arts/plain.svg b/refilc/assets/svg/cover_arts/plain.svg new file mode 100644 index 0000000..e381afd --- /dev/null +++ b/refilc/assets/svg/cover_arts/plain.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/refilc/assets/svg/cover_arts/vocal.svg b/refilc/assets/svg/cover_arts/vocal.svg new file mode 100644 index 0000000..50b24fe --- /dev/null +++ b/refilc/assets/svg/cover_arts/vocal.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/refilc/assets/svg/mesh_bg.svg b/refilc/assets/svg/mesh_bg.svg deleted file mode 100644 index 5301c50..0000000 --- a/refilc/assets/svg/mesh_bg.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/refilc/lib/helpers/subject.dart b/refilc/lib/helpers/subject.dart index 7aa8e9d..24607b5 100644 --- a/refilc/lib/helpers/subject.dart +++ b/refilc/lib/helpers/subject.dart @@ -292,3 +292,105 @@ class ShortSubject { return subject?.name.capital() ?? subjectName?.capital() ?? "?"; } } + +// new v5 thingie +class SubjectBooklet { + // static String resolveName({GradeSubject? subject, String? subjectName}) => + // _resolve(subject: subject, subjectName: subjectName).name; + static String resolveVariant( + {GradeSubject? subject, + String? subjectName, + required BuildContext context}) => + _resolve(subject: subject, subjectName: subjectName); + + static String _resolve({GradeSubject? subject, String? subjectName}) { + assert(!(subject == null && subjectName == null)); + + String name = (subject?.name ?? subjectName ?? "") + .toLowerCase() + .specialChars() + .trim(); + String category = + subject?.category.description.toLowerCase().specialChars() ?? ""; + + String basePath = "assets/svg/cover_arts"; + + // todo: check for categories + if (RegExp("mate(k|matika)").hasMatch(name) || category == "matematika") { + return "$basePath/grid.svg"; + } else if (RegExp("magyar nyelv|nyelvtan").hasMatch(name)) { + return "$basePath/line.svg"; + } else if (RegExp("irodalom").hasMatch(name)) { + return "$basePath/line.svg"; + } else if (RegExp("tor(i|tenelem)").hasMatch(name)) { + return "$basePath/line.svg"; + } else if (RegExp("foldrajz").hasMatch(name)) { + return "$basePath/plain.svg"; + } else if (RegExp("rajz|muvtori|muveszet|vizualis").hasMatch(name)) { + return "$basePath/plain.svg"; + } else if (RegExp("fizika").hasMatch(name)) { + return "$basePath/plain.svg"; + } else if (RegExp("^enek|zene|szolfezs|zongora|korus").hasMatch(name)) { + return "$basePath/vocal.svg"; + } else if (RegExp("^tes(i|tneveles)|sport|edzeselmelet").hasMatch(name)) { + return "$basePath/plain.svg"; + } else if (RegExp("kemia").hasMatch(name)) { + return "$basePath/plain.svg"; + } else if (RegExp("biologia").hasMatch(name)) { + return "$basePath/plain.svg"; + } else if (RegExp( + "kornyezet|termeszet ?(tudomany|ismeret)|hon( es nep)?ismeret") + .hasMatch(name)) { + return "$basePath/plain.svg"; + } else if (RegExp("(hit|erkolcs)tan|vallas|etika|bibliaismeret") + .hasMatch(name)) { + return "$basePath/line.svg"; + } else if (RegExp("penzugy").hasMatch(name)) { + return "$basePath/plain.svg"; + } else if (RegExp("informatika|szoftver|iroda|digitalis").hasMatch(name)) { + return "$basePath/grid.svg"; + } else if (RegExp("prog").hasMatch(name)) { + return "$basePath/grid.svg"; + } else if (RegExp("halozat").hasMatch(name)) { + return "$basePath/grid.svg"; + } else if (RegExp("szinhaz").hasMatch(name)) { + return "$basePath/vocal.svg"; + } else if (RegExp("film|media").hasMatch(name)) { + return "$basePath/plain.svg"; + } else if (RegExp("elektro(tech)?nika").hasMatch(name)) { + return "$basePath/grid.svg"; + } else if (RegExp("gepesz|mernok|ipar").hasMatch(name)) { + return "$basePath/grid.svg"; + } else if (RegExp("technika").hasMatch(name)) { + return "$basePath/plain.svg"; + } else if (RegExp("tanc").hasMatch(name)) { + return "$basePath/vocal.svg"; + } else if (RegExp("filozofia").hasMatch(name)) { + return "$basePath/line.svg"; + } else if (RegExp("osztaly(fonoki|kozosseg)|kozossegi|neveles") + .hasMatch(name) || + name == "ofo") { + return "$basePath/plain.svg"; + } else if (RegExp("gazdasag").hasMatch(name)) { + return "$basePath/line.svg"; + } else if (RegExp("szorgalom").hasMatch(name)) { + return "$basePath/plain.svg"; + } else if (RegExp("magatartas").hasMatch(name)) { + return "$basePath/plain.svg"; + } else if (RegExp( + "angol|nemet|francia|olasz|orosz|spanyol|latin|kinai|nyelv") + .hasMatch(name)) { + return "$basePath/line.svg"; + } else if (RegExp("linux").hasMatch(name)) { + return "$basePath/plain.svg"; + } else if (RegExp("adatbazis").hasMatch(name)) { + return "$basePath/grid.svg"; + } else if (RegExp("asztali alkalmazasok").hasMatch(name)) { + return "$basePath/grid.svg"; + } else if (RegExp("projekt").hasMatch(name)) { + return "$basePath/plain.svg"; + } + + return "$basePath/plain.svg"; + } +} diff --git a/refilc/pubspec.yaml b/refilc/pubspec.yaml index 8143bd8..fe8922e 100644 --- a/refilc/pubspec.yaml +++ b/refilc/pubspec.yaml @@ -104,6 +104,7 @@ flutter: - assets/svg/menu_icons/ - assets/other/dirtywords.xml - assets/svg/ + - assets/svg/cover_arts/ fonts: - family: FilcIcons diff --git a/refilc_mobile_ui/lib/common/hero_scrollview.dart b/refilc_mobile_ui/lib/common/hero_scrollview.dart index 15334fe..c6f6a35 100644 --- a/refilc_mobile_ui/lib/common/hero_scrollview.dart +++ b/refilc_mobile_ui/lib/common/hero_scrollview.dart @@ -1,4 +1,5 @@ import 'package:flutter_svg/svg.dart'; +import 'package:refilc/helpers/subject.dart'; import 'package:refilc/theme/colors/colors.dart'; import 'package:flutter/material.dart'; import 'package:refilc/theme/colors/utils.dart'; @@ -113,7 +114,9 @@ class HeroScrollViewState extends State { Padding( padding: const EdgeInsets.only(top: 26.0), child: SvgPicture.asset( - "assets/svg/mesh_bg.svg", + // "assets/svg/mesh_bg.svg", + SubjectBooklet.resolveVariant( + context: context, subjectName: widget.title), // ignore: deprecated_member_use color: ColorsUtils() .darken( diff --git a/refilc_mobile_ui/lib/common/widgets/exam/exam_viewable.dart b/refilc_mobile_ui/lib/common/widgets/exam/exam_viewable.dart index 513c1cc..d7a5ca0 100644 --- a/refilc_mobile_ui/lib/common/widgets/exam/exam_viewable.dart +++ b/refilc_mobile_ui/lib/common/widgets/exam/exam_viewable.dart @@ -99,7 +99,9 @@ class ExamPopup extends StatelessWidget { Stack( children: [ SvgPicture.asset( - "assets/svg/mesh_bg.svg", + // "assets/svg/mesh_bg.svg", + SubjectBooklet.resolveVariant( + context: context, subject: exam.subject), // ignore: deprecated_member_use color: ColorsUtils() .fade(context, Theme.of(context).colorScheme.secondary, diff --git a/refilc_mobile_ui/lib/common/widgets/lesson/lesson_viewable.dart b/refilc_mobile_ui/lib/common/widgets/lesson/lesson_viewable.dart index a401d27..666cdbc 100644 --- a/refilc_mobile_ui/lib/common/widgets/lesson/lesson_viewable.dart +++ b/refilc_mobile_ui/lib/common/widgets/lesson/lesson_viewable.dart @@ -310,7 +310,9 @@ class TimetableLessonPopup extends StatelessWidget { Stack( children: [ SvgPicture.asset( - "assets/svg/mesh_bg.svg", + // "assets/svg/mesh_bg.svg", + SubjectBooklet.resolveVariant( + context: context, subject: lesson.subject), // ignore: deprecated_member_use color: ColorsUtils() .fade(context, Theme.of(context).colorScheme.secondary, @@ -334,13 +336,13 @@ class TimetableLessonPopup extends StatelessWidget { .withOpacity(0.1), Theme.of(context).scaffoldBackgroundColor, ], - stops: const [0.1, 0.5, 0.7, 1.0], + stops: const [0.0, 0.3, 0.6, 0.95], begin: Alignment.topCenter, end: Alignment.bottomCenter, ), ), width: MediaQuery.of(context).size.width, - height: 175.0, + height: 200.0, ), ], ), @@ -355,16 +357,27 @@ class TimetableLessonPopup extends StatelessWidget { width: 40, height: 4, decoration: BoxDecoration( - color: ColorsUtils() - .fade( - context, Theme.of(context).colorScheme.secondary, - darkenAmount: 0.1, lightenAmount: 0.1) - .withOpacity(0.33), + color: Theme.of(context).scaffoldBackgroundColor, borderRadius: BorderRadius.circular( 2.0, ), ), + child: Container( + width: 40, + height: 4, + decoration: BoxDecoration( + color: ColorsUtils() + .fade(context, + Theme.of(context).colorScheme.secondary, + darkenAmount: 0.1, lightenAmount: 0.1) + .withOpacity(0.33), + borderRadius: BorderRadius.circular( + 2.0, + ), + ), + ), ), + const SizedBox( height: 38.0, ),