diff --git a/firka/assets/images/cactus_error_screen.png b/firka/assets/images/cactus_error_screen.png
new file mode 100644
index 0000000..00f5acf
Binary files /dev/null and b/firka/assets/images/cactus_error_screen.png differ
diff --git a/firka/assets/images/logos/dave_error.png b/firka/assets/images/logos/dave_error.png
new file mode 100644
index 0000000..6c9709f
Binary files /dev/null and b/firka/assets/images/logos/dave_error.png differ
diff --git a/firka/assets/swears/DirtyWords.xml b/firka/assets/swears/DirtyWords.xml
new file mode 100644
index 0000000..42aee3e
--- /dev/null
+++ b/firka/assets/swears/DirtyWords.xml
@@ -0,0 +1,369 @@
+
+
+
+
+ Aberált
+ Aberrált
+ Abortuszmaradék
+ Abszolút hülye
+ Agyalágyult
+ Agyatlan
+ Agybatetovált
+ Ágybavizelős
+ Agyfasz
+ Agyhalott
+ Agyonkúrt
+ Agyonvert
+ Agyrákos
+ AIDS-es
+ Alapvetően fasz
+ Animalsex-mániás
+ Antibarom
+ Aprófaszú
+ Arcbarakott
+ Aszaltfaszú
+ Aszott
+ Átbaszott
+ Azt a kurva de fasz
+ Balatonberényben napvilágot látott
+ Balfasz
+ Balfészek
+ Baromfifasz
+ Basz-o-matic
+ Baszhatatlan
+ Basznivaló
+ Bebaszott
+ Befosi
+ Békapicsa
+ Bélböfi
+ Beleiből kiforgatott
+ Bélszél
+ Bronz térdű
+ Brunya
+ Büdös szájú
+ Büdösszájú
+ Búvalbaszott
+ Buzeráns
+ Buzernyák
+ Buzi
+ Buzikurva
+ Cafat
+ Cafka
+ Céda
+ Cérnafaszú
+ Cottonfej
+ Csempe szobában felneveltetett
+ Cseszett
+ Csibefasz
+ Csipszar
+ Csirkefaszú
+ Csitri
+ Csöcs
+ Csöcsfej
+ Csöppszar
+ Csőszkunyhóban elrejtett
+ Csupaszfarkú
+ Cuncipunci
+ Deformáltfaszú
+ Dekorált pofájú
+ Döbbenetesen segg
+ Dobseggű
+ Dughatatlan
+ Dunyhavalagú
+ Duplafaszú
+ Ebfasz
+ Egyszerűen fasz
+ Elbaszott
+ Eleve hülye
+ Extrahülye
+ Fafogú rézfűrésszel megsebzett
+ Fantasztikusan segg
+ Fasszopó
+ Fasz
+ Fasz-emulátor
+ Faszagyú
+ Faszarc
+ Faszfej
+ Faszfészek
+ Faszkalap
+ Faszkarika
+ Faszkedvelő
+ Faszkópé
+ Faszogány
+ Faszpörgettyű
+ Faszsapka
+ Faszszagú
+ Faszszopó
+ Fasztalan
+ Fasztarisznya
+ Fasztengely
+ Fasztolvaj
+ Faszváladék
+ Faszverő
+ Félrebaszott
+ Félrefingott
+ Félreszart
+ Félribanc
+ Fing
+ Fölcsinált
+ Fölfingott
+ Fos
+ Foskemence
+ Fospisztoly
+ Fospumpa
+ Fostalicska
+ Fütyi
+ Fütyinyalogató
+ Fütykös
+ Geci
+ Gecinyelő
+ Geciszaró
+ Geciszívó
+ Genny
+ Gennyesszájú
+ Gennygóc
+ Genyac
+ Genyó
+ Gólyafos
+ Görbefaszú
+ Gyennyszopó
+ Gyíkfing
+ Hájpacni
+ Hatalmas nagy fasz
+ Hátbabaszott
+ Házikurva
+ Hererákos
+ Hígagyú
+ Hihetetlenül fasz
+ Hikomat
+ Hímnőstény
+ Hímringyó
+ Hiperstrici
+ Hitler-imádó
+ Hitlerista
+ Hivatásos balfasz
+ Hú de segg
+ Hugyagyú
+ Hugyos
+ Hugytócsa
+ Hüje
+ Hüle
+ Hülye
+ Hülyécske
+ Hülyegyerek
+ Inkubátor-szökevény
+ Integrált barom
+ Ionizált faszú
+ IQ bajnok
+ IQ fighter
+ IQ hiányos
+ Irdatlanul köcsög
+ Íveltfaszú
+ Jajj de barom
+ Jókora fasz
+ Kaka
+ Kakamatyi
+ Kaki
+ Kaksi
+ Kecskebaszó
+ Kellően fasz
+ Képlékeny faszú
+ Keresve sem található fasz
+ Kétfaszú
+ Kétszer agyonbaszott
+ Ki-bebaszott
+ Kibaszott
+ Kifingott
+ Kiherélt
+ Kikakkantott
+ Kikészült
+ Kimagaslóan fasz
+ Kimondhatatlan pöcs
+ Kis szaros
+ Kisfütyi
+ Klotyószagú
+ Ködmönbe bújtatott
+ Kojak-faszú
+ Kopárfaszú
+ Korlátolt gecizésű
+ Kotonszökevény
+ Középszar
+ Kretén
+ Kuki
+ Kula
+ Kunkorított faszú
+ Kurva
+ Kurvaanyjú
+ Kurvapecér
+ Kutyakaki
+ Kutyapina
+ Kutyaszar
+ Lankadtfaszú
+ Lebaszirgált
+ Lebaszott
+ Lecseszett
+ Leírhatatlanul segg
+ Lemenstruált
+ Leokádott
+ Lepkefing
+ Leprafészek
+ Leszart
+ Leszbikus
+ Lőcs
+ Lőcsgéza
+ Lófasz
+ Lógócsöcsű
+ Lóhugy
+ Lotyó
+ Lucskos
+ Lugnya
+ Lyukasbelű
+ Lyukasfaszú
+ Lyukát vakaró
+ Lyuktalanított
+ Mamutsegg
+ Maszturbációs görcs
+ Maszturbagép
+ Maszturbáltatott
+ Megfingatott
+ Megkettyintett
+ Megkúrt
+ Megszopatott
+ Mesterséges faszú
+ Méteres kékeres
+ Mikrotökű
+ Mocskos
+ Mojfing
+ Műfaszú
+ Muff
+ Multifasz
+ Műtöttpofájú
+ Náci
+ Nagyfejű
+ Nikotinpatkány
+ Nimfomániás
+ Nuna
+ Nunci
+ Nuncóka
+ Nyalábfasz
+ Nyelestojás
+ Nyúlszar
+ Oltári nagy fasz
+ Ondónyelő
+ Orbitálisan hülye
+ Ordenálé
+ Összebaszott
+ Ötcsillagos fasz
+ Óvszerezett
+ Pénisz
+ Peremesfaszú
+ Picsa
+ Picsafej
+ Picsameresztő
+ Picsánnyalt
+ Picsánrugott
+ Picsányi
+ Pikkelypáncélt hordó
+ Pina
+ Pisa
+ Pisaszagú
+ Pisis
+ Pöcs
+ Pöcsfej
+ Porbafingó
+ Pornóbuzi
+ Pornómániás
+ Pudvás
+ Pudváslikú
+ Puhafaszú
+ Punci
+ Puncimókus
+ Puncis
+ Punciutáló
+ Puncivirág
+ Qki
+ Qrva
+ Qtyaszar
+ Rabló
+ Rágcsáltfaszú
+ Redva
+ Rendkívül fasz
+ Repedtsarkú
+ Rétó-román
+ Rézhasú
+ Ribanc
+ Riherongy
+ Ritka fogú
+ Rivalizáló
+ Rőfös fasz
+ Rojtospicsájú
+ Rongyospinájú
+ Roppant hülye
+ Rossz kurva
+ Saját nemével kefélő
+ Segg
+ Seggarc
+ Seggdugó
+ Seggfej
+ Seggnyaló
+ Seggszőr
+ Seggtorlasz
+ Sikoltozásokba öltöztetett
+ Strici
+ Suttyó
+ Sutyerák
+ Szálkafaszú
+ Szar
+ Szaralak
+ Szárazfing
+ Szarbojler
+ Szarcsimbók
+ Szarevő
+ Szarfaszú
+ Szarházi
+ Szarjankó
+ Szarnivaló
+ Szarosvalagú
+ Szarrá vágott
+ Szarrágó
+ Szarszagú
+ Szarszájú
+ Szartragacs
+ Szarzsák
+ Szégyencsicska
+ Szifiliszes
+ Szivattyús kurva
+ Szófosó
+ Szokatlanul fasz
+ Szop-o-matic
+ Szopógép
+ Szopógörcs
+ Szopós kurva
+ Szopottfarkú
+ Szűklyukú
+ Szultán udvarát megjárt
+ Szúnyogfaszni
+ Szuperbuzi
+ Szuperkurva
+ Szűzhártya-repedéses
+ Szűzkurva
+ Szűzpicsa
+ Szűzpunci
+ Tetves
+ Tikfos
+ Tikszar
+ Tompatökű
+ Törpefaszú
+ Toszatlan
+ Toszott
+ Totálisan hülye
+ Tyű de picsa
+ Tyúkfasznyi
+ Tyúkszar
+ Vadfasz
+ Valag
+ Valagváladék
+ Végbélféreg
+ Xar
+ Zsugorított faszú
+
diff --git a/firka/lib/helpers/swear_generator.dart b/firka/lib/helpers/swear_generator.dart
new file mode 100644
index 0000000..701dcbe
--- /dev/null
+++ b/firka/lib/helpers/swear_generator.dart
@@ -0,0 +1,50 @@
+import 'dart:math';
+import 'package:flutter/services.dart' show rootBundle;
+import 'package:xml/xml.dart';
+
+List _nouns = [];
+List _adjectives = [];
+
+Future loadDirtyWords() async {
+ final xmlString = await rootBundle.loadString('assets/swears/DirtyWords.xml');
+ final document = XmlDocument.parse(xmlString);
+
+ for (final node in document.findAllElements('Word')) {
+ final type = node.getAttribute('type');
+ final text = node.text.trim();
+
+ if (type == 'f') {
+ _nouns.add(text);
+ } else if (type == 'm') {
+ _adjectives.add(text);
+ }
+ }
+}
+
+String generateSwearSentence(
+ {int words = 3, bool capitalize = true, bool exclamation = true}) {
+ if (words < 1) {
+ throw ArgumentError('Words must be at least 1');
+ }
+
+ final random = Random();
+
+ // if we only need one word, return a noun, that's the one that fits the most
+ if (words == 1) {
+ final word = _nouns[random.nextInt(_nouns.length)].toLowerCase();
+ return (capitalize ? word[0].toUpperCase() + word.substring(1) : word) +
+ (exclamation ? '!' : '');
+ }
+
+ final chosenNouns = List.generate(
+ words - 1,
+ (_) => _nouns[random.nextInt(_nouns.length)],
+ );
+
+ final adjective = _adjectives[random.nextInt(_adjectives.length)];
+
+ final swear = '${chosenNouns.join(', ')} $adjective'.toLowerCase();
+
+ return (capitalize ? swear[0].toUpperCase() + swear.substring(1) : swear) +
+ (exclamation ? '!' : '');
+}
diff --git a/firka/lib/main.dart b/firka/lib/main.dart
index 5b1514c..455ea95 100644
--- a/firka/lib/main.dart
+++ b/firka/lib/main.dart
@@ -12,6 +12,7 @@ import 'package:firka/helpers/db/widget.dart';
import 'package:firka/helpers/extensions.dart';
import 'package:firka/helpers/firka_bundle.dart';
import 'package:firka/helpers/settings.dart';
+import 'package:firka/helpers/swear_generator.dart';
import 'package:firka/l10n/app_localizations_hu.dart';
import 'package:firka/ui/model/style.dart';
import 'package:firka/ui/phone/pages/error/error_page.dart';
@@ -351,6 +352,10 @@ void main() async {
})();
}
+ logger.finest('loading dirty words');
+ await loadDirtyWords();
+ logger.finest('loaded dirty words');
+
// Run App Initialization
runApp(InitializationScreen());
}, (error, stackTrace) {
diff --git a/firka/lib/ui/phone/pages/error/error_page.dart b/firka/lib/ui/phone/pages/error/error_page.dart
index fba2a75..c693e6e 100644
--- a/firka/lib/ui/phone/pages/error/error_page.dart
+++ b/firka/lib/ui/phone/pages/error/error_page.dart
@@ -1,4 +1,8 @@
+import 'package:firka/ui/model/style.dart';
import 'package:flutter/material.dart';
+import 'package:firka/helpers/image_preloader.dart';
+import 'package:firka/helpers/firka_bundle.dart';
+import 'package:firka/helpers/swear_generator.dart';
class ErrorPage extends StatelessWidget {
final String exception;
@@ -7,6 +11,126 @@ class ErrorPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
+ return Scaffold(
+ backgroundColor: appStyle.colors.background,
+ body: Padding(
+ padding: const EdgeInsets.symmetric(vertical: 64, horizontal: 24),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Column(children: [
+ SizedBox(height: 48),
+ Container(
+ width: 50,
+ height: 50,
+ clipBehavior: Clip.antiAlias,
+ decoration: ShapeDecoration(
+ image: DecorationImage(
+ image: PreloadedImageProvider(FirkaBundle(),
+ ('assets/images/logos/dave_error.png')),
+ fit: BoxFit.cover,
+ ),
+ shape: ContinuousRectangleBorder(),
+ ),
+ ),
+ Padding(
+ padding: const EdgeInsets.symmetric(
+ vertical: 24, horizontal: 32),
+ child: Column(children: [
+ Text(
+ 'e-Kréta, te',
+ style: appStyle.fonts.H_16px
+ .copyWith(color: appStyle.colors.textSecondary),
+ textAlign: TextAlign.center,
+ ),
+ Text(
+ //'a,',
+ generateSwearSentence(),
+ style: appStyle.fonts.H_H2.copyWith(
+ color: appStyle.colors.textPrimary,
+ fontSize: 24),
+ textAlign: TextAlign.center,
+ ),
+ ])),
+ Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 32),
+ child: Text(
+ "Valami probléma történt, ez természetesen az EduDev Zrt. hibája minden esetben",
+ style: appStyle.fonts.B_14R.copyWith(
+ color: appStyle.colors.textSecondary,
+ ),
+ textAlign: TextAlign.center,
+ ),
+ ),
+ ]),
+ Column(
+ children: [
+ Stack(children: [
+ Container(
+ height: 300,
+ padding: const EdgeInsets.all(12),
+ decoration: BoxDecoration(
+ shape: BoxShape.rectangle,
+ color: appStyle.colors.card,
+ borderRadius: BorderRadius.circular(12)),
+ child: Text(exception,
+ style: appStyle.fonts.B_14R.copyWith(
+ color: appStyle.colors.textPrimary,
+ fontFamily: 'RobotoMono'))),
+ Positioned(
+ bottom: 0,
+ right: 16,
+ child: Container(
+ width: 60,
+ height: 76,
+ clipBehavior: Clip.antiAlias,
+ decoration: ShapeDecoration(
+ image: DecorationImage(
+ image: PreloadedImageProvider(FirkaBundle(),
+ ('assets/images/cactus_error_screen.png')),
+ fit: BoxFit.cover,
+ colorFilter: ColorFilter.srgbToLinearGamma()),
+ shape: ContinuousRectangleBorder(),
+ ),
+ ),
+ )
+ ]),
+ SizedBox(
+ height: 20,
+ ),
+ ElevatedButton(
+ // TODO: report bug
+ onPressed: () => Navigator.pop(context),
+ style: ElevatedButton.styleFrom(
+ foregroundColor: appStyle.colors.textPrimary,
+ backgroundColor: appStyle.colors.accent,
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(12)),
+ elevation: 1,
+ shadowColor: appStyle.colors.shadowColor,
+ minimumSize: Size.fromHeight(48)),
+ child: Text("Hiba jelentése",
+ style: appStyle.fonts.H_18px
+ .copyWith(fontWeight: FontWeight.w700))),
+ SizedBox(
+ height: 8,
+ ),
+ ElevatedButton(
+ onPressed: () => Navigator.pop(context),
+ style: ElevatedButton.styleFrom(
+ foregroundColor: appStyle.colors.textSecondary,
+ backgroundColor:
+ appStyle.colors.buttonSecondaryFill,
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(12)),
+ elevation: 1,
+ shadowColor: appStyle.colors.shadowColor,
+ minimumSize: Size.fromHeight(48)),
+ child: Text("Vissza", style: appStyle.fonts.B_16R))
+ ],
+ )
+ ])));
+
return Scaffold(
appBar: AppBar(
title: Text('Error Occurred'),
diff --git a/firka/pubspec.yaml b/firka/pubspec.yaml
index c64f3c4..96702a5 100644
--- a/firka/pubspec.yaml
+++ b/firka/pubspec.yaml
@@ -69,6 +69,7 @@ dependencies:
logging: ^1.3.0
share_plus: ^11.1.0
url_launcher: ^6.3.2
+ xml: ^6.6.1
dev_dependencies:
flutter_test:
@@ -103,6 +104,9 @@ flutter:
- assets/icons/
- assets/majesticons/
- assets/firka.i
+ - assets/swears/DirtyWords.xml
+ - assets/images/cactus_error_screen.png
+ - assets/images/logos/dave_error.png
fonts:
- family: Montserrat