21 changed files with 498 additions and 151 deletions
-
4lib/core/constants/my_constants.dart
-
2lib/core/routers/hero_dialog_route.dart
-
12lib/core/services/audio_service.dart
-
39lib/core/widgets/animations/fade_anim_controller.dart
-
27lib/core/widgets/answer_box/answer_box.dart
-
4lib/core/widgets/answer_box/answer_box_show.dart
-
47lib/core/widgets/answer_box/styles/picture_box.dart
-
13lib/core/widgets/dialog/about_us_dialog.dart
-
2lib/core/widgets/showcase/my_showcase_widget.dart
-
6lib/features/intro/presentation/bloc/intro_bloc.dart
-
2lib/features/intro/presentation/ui/intro_page.dart
-
13lib/features/language/presentation/ui/language_page.dart
-
2lib/features/question/domain/entity/question_entity.dart
-
105lib/features/question/presentation/bloc/question_bloc.dart
-
26lib/features/question/presentation/ui/screens/answer_screen.dart
-
157lib/features/question/presentation/ui/screens/question_screen.dart
-
4lib/init_bindings.dart
-
39lib/l10n/app_de.arb
-
14lib/l10n/app_localizations.dart
-
129lib/l10n/app_localizations_de.dart
-
2pubspec.yaml
@ -0,0 +1,39 @@ |
|||||
|
import 'package:flutter/material.dart'; |
||||
|
|
||||
|
class FadeAnimController extends StatefulWidget { |
||||
|
const FadeAnimController({ |
||||
|
super.key, |
||||
|
required this.child, |
||||
|
required this.controller, |
||||
|
}); |
||||
|
|
||||
|
final Widget child; |
||||
|
final AnimationController controller; |
||||
|
|
||||
|
@override |
||||
|
State<FadeAnimController> createState() => _FadeAnimControllerState(); |
||||
|
} |
||||
|
|
||||
|
class _FadeAnimControllerState extends State<FadeAnimController> |
||||
|
with SingleTickerProviderStateMixin { |
||||
|
late Animation<double> _animation; |
||||
|
|
||||
|
@override |
||||
|
void initState() { |
||||
|
super.initState(); |
||||
|
_animation = Tween<double>( |
||||
|
begin: 0, |
||||
|
end: 1, |
||||
|
).animate(CurvedAnimation(parent: widget.controller, curve: Curves.linear)); |
||||
|
} |
||||
|
|
||||
|
@override |
||||
|
Widget build(BuildContext context) { |
||||
|
return AnimatedBuilder( |
||||
|
animation: widget.controller, |
||||
|
child: widget.child, |
||||
|
builder: (context, child) => |
||||
|
FadeTransition(opacity: _animation, child: child), |
||||
|
); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,39 @@ |
|||||
|
{ |
||||
|
"@@locale": "de", |
||||
|
"about_us": "Über uns", |
||||
|
"about_us_desc": "Rive kombiniert ein interaktives Design-Tool, ein neues zustandsbasiertes Grafikformat, eine leichte plattformübergreifende Laufzeitumgebung und einen blitzschnellen Vektoren-Renderer. \nDiese durchgängige Pipeline erweckt Benutzeroberflächen durch Bewegung zum Leben. Sie bietet Designern und Entwicklern die Werkzeuge, um zu gestalten und zu bauen.", |
||||
|
"select_language": "Sprache auswählen", |
||||
|
"select": "Auswählen", |
||||
|
"please_wait": "Bitte einen Moment warten...", |
||||
|
"downloading_data": "Initiale Daten werden heruntergeladen", |
||||
|
"lost_connection": "Verbindung verloren!", |
||||
|
"retry": "Erneut versuchen", |
||||
|
"connected_to_internet": "Du musst mit dem Internet verbunden sein, um die Anfangsdaten des Spiels herunterzuladen.", |
||||
|
"start": "Start", |
||||
|
"step": "Schritt", |
||||
|
"question": "Frage", |
||||
|
"be_cureful": "Sei etwas\nvorsichtiger.", |
||||
|
"wrong_answer": "Deine Antwort\nwar nicht korrekt.", |
||||
|
"you_got_diamond": "Du hast den Diamanten erhalten", |
||||
|
"map": "Karte", |
||||
|
"next": "Weiter", |
||||
|
"you_win": "Du hast gewonnen!", |
||||
|
"skip": "Überspringen", |
||||
|
"intro_1_1": "Das Abendessen ist fertig! Komm schnell und wasch dir schön die Hände!", |
||||
|
"intro_1_2": "Mama! Unsere Hände sind gar nicht so schmutzig! Wir wischen sie einfach mit einem Taschentuch ab!", |
||||
|
"intro_2": "Die Reinheit des Glaubens...\nSie bedeutet, dass Sauberkeit ein Zeichen des Glaubens ist!", |
||||
|
"intro_3": "Diese guten Taten machen unsere Seelen stark und schön!", |
||||
|
"intro_4": "Möchtest du in den Verheißenen Garten reisen?", |
||||
|
"intro_5": "Jaaaa...\nWir sind bereit!", |
||||
|
"want_to_exit": "Möchtest du beenden?", |
||||
|
"exit_dialog_desc": "Komm zurück, Held!\nDas Abenteuer ist noch nicht vorbei.", |
||||
|
"cancel": "Abbrechen", |
||||
|
"exit": "Beenden", |
||||
|
"play": "SPIELEN", |
||||
|
"no_hadith": "Für diese Frage gibt es keine Hadith.", |
||||
|
"showcase_answer": "Tippe auf die richtige Option,\num sie auszuwählen.", |
||||
|
"showcase_notif": "Der Sprecher wird\ndir die Antwortmöglichkeiten\nvorlesen.", |
||||
|
"showcase_stepper": "Hier siehst du die\nFragen für diese\nStufe, um den\nDiamanten zu erreichen.", |
||||
|
"showcase_hadith": "Quellen und\nHadithe zu dieser\nFrage ansehen.", |
||||
|
"showcase_guide": "Dies ist eine Anleitung,\ndie dir hilft." |
||||
|
} |
||||
@ -0,0 +1,129 @@ |
|||||
|
// ignore: unused_import |
||||
|
import 'package:intl/intl.dart' as intl; |
||||
|
import 'app_localizations.dart'; |
||||
|
|
||||
|
// ignore_for_file: type=lint |
||||
|
|
||||
|
/// The translations for German (`de`). |
||||
|
class AppLocalizationsDe extends AppLocalizations { |
||||
|
AppLocalizationsDe([String locale = 'de']) : super(locale); |
||||
|
|
||||
|
@override |
||||
|
String get about_us => 'Über uns'; |
||||
|
|
||||
|
@override |
||||
|
String get about_us_desc => |
||||
|
'Rive kombiniert ein interaktives Design-Tool, ein neues zustandsbasiertes Grafikformat, eine leichte plattformübergreifende Laufzeitumgebung und einen blitzschnellen Vektoren-Renderer. \nDiese durchgängige Pipeline erweckt Benutzeroberflächen durch Bewegung zum Leben. Sie bietet Designern und Entwicklern die Werkzeuge, um zu gestalten und zu bauen.'; |
||||
|
|
||||
|
@override |
||||
|
String get select_language => 'Sprache auswählen'; |
||||
|
|
||||
|
@override |
||||
|
String get select => 'Auswählen'; |
||||
|
|
||||
|
@override |
||||
|
String get please_wait => 'Bitte einen Moment warten...'; |
||||
|
|
||||
|
@override |
||||
|
String get downloading_data => 'Initiale Daten werden heruntergeladen'; |
||||
|
|
||||
|
@override |
||||
|
String get lost_connection => 'Verbindung verloren!'; |
||||
|
|
||||
|
@override |
||||
|
String get retry => 'Erneut versuchen'; |
||||
|
|
||||
|
@override |
||||
|
String get connected_to_internet => |
||||
|
'Du musst mit dem Internet verbunden sein, um die Anfangsdaten des Spiels herunterzuladen.'; |
||||
|
|
||||
|
@override |
||||
|
String get start => 'Start'; |
||||
|
|
||||
|
@override |
||||
|
String get step => 'Schritt'; |
||||
|
|
||||
|
@override |
||||
|
String get question => 'Frage'; |
||||
|
|
||||
|
@override |
||||
|
String get be_cureful => 'Sei etwas\nvorsichtiger.'; |
||||
|
|
||||
|
@override |
||||
|
String get wrong_answer => 'Deine Antwort\nwar nicht korrekt.'; |
||||
|
|
||||
|
@override |
||||
|
String get you_got_diamond => 'Du hast den Diamanten erhalten'; |
||||
|
|
||||
|
@override |
||||
|
String get map => 'Karte'; |
||||
|
|
||||
|
@override |
||||
|
String get next => 'Weiter'; |
||||
|
|
||||
|
@override |
||||
|
String get you_win => 'Du hast gewonnen!'; |
||||
|
|
||||
|
@override |
||||
|
String get skip => 'Überspringen'; |
||||
|
|
||||
|
@override |
||||
|
String get intro_1_1 => |
||||
|
'Das Abendessen ist fertig! Komm schnell und wasch dir schön die Hände!'; |
||||
|
|
||||
|
@override |
||||
|
String get intro_1_2 => |
||||
|
'Mama! Unsere Hände sind gar nicht so schmutzig! Wir wischen sie einfach mit einem Taschentuch ab!'; |
||||
|
|
||||
|
@override |
||||
|
String get intro_2 => |
||||
|
'Die Reinheit des Glaubens...\nSie bedeutet, dass Sauberkeit ein Zeichen des Glaubens ist!'; |
||||
|
|
||||
|
@override |
||||
|
String get intro_3 => |
||||
|
'Diese guten Taten machen unsere Seelen stark und schön!'; |
||||
|
|
||||
|
@override |
||||
|
String get intro_4 => 'Möchtest du in den Verheißenen Garten reisen?'; |
||||
|
|
||||
|
@override |
||||
|
String get intro_5 => 'Jaaaa...\nWir sind bereit!'; |
||||
|
|
||||
|
@override |
||||
|
String get want_to_exit => 'Möchtest du beenden?'; |
||||
|
|
||||
|
@override |
||||
|
String get exit_dialog_desc => |
||||
|
'Komm zurück, Held!\nDas Abenteuer ist noch nicht vorbei.'; |
||||
|
|
||||
|
@override |
||||
|
String get cancel => 'Abbrechen'; |
||||
|
|
||||
|
@override |
||||
|
String get exit => 'Beenden'; |
||||
|
|
||||
|
@override |
||||
|
String get play => 'SPIELEN'; |
||||
|
|
||||
|
@override |
||||
|
String get no_hadith => 'Für diese Frage gibt es keine Hadith.'; |
||||
|
|
||||
|
@override |
||||
|
String get showcase_answer => |
||||
|
'Tippe auf die richtige Option,\num sie auszuwählen.'; |
||||
|
|
||||
|
@override |
||||
|
String get showcase_notif => |
||||
|
'Der Sprecher wird\ndir die Antwortmöglichkeiten\nvorlesen.'; |
||||
|
|
||||
|
@override |
||||
|
String get showcase_stepper => |
||||
|
'Hier siehst du die\nFragen für diese\nStufe, um den\nDiamanten zu erreichen.'; |
||||
|
|
||||
|
@override |
||||
|
String get showcase_hadith => |
||||
|
'Quellen und\nHadithe zu dieser\nFrage ansehen.'; |
||||
|
|
||||
|
@override |
||||
|
String get showcase_guide => 'Dies ist eine Anleitung,\ndie dir hilft.'; |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue