16 Commits

Author SHA1 Message Date
bbd41a65df Merge pull request 'Neues Popup Design' (#152) from feature/129-neues-popup-design into development
Reviewed-on: #152
Reviewed-by: gelbeinhalb <spam@yannick-weigert.de>
Reviewed-by: Felix Kirchner <felix.kirchner.fk@gmail.com>
2026-01-13 22:01:05 +00:00
2cadab004d Merge cleaning
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m2s
Pull Request Pipeline / lint (pull_request) Successful in 2m7s
2026-01-13 22:58:35 +01:00
6a3e184a95 Merge branch 'development' into feature/129-neues-popup-design
# Conflicts:
#	lib/presentation/views/main_menu/settings_view/settings_view.dart
2026-01-13 22:57:19 +01:00
5350113ee1 Updated doc strings 2026-01-13 22:54:19 +01:00
db51990695 Revert "add background color option to AnimatedDialogButton"
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m5s
Pull Request Pipeline / lint (pull_request) Successful in 2m19s
This reverts commit 4019ed083f.
2026-01-13 22:17:38 +01:00
4019ed083f add background color option to AnimatedDialogButton
Some checks failed
Pull Request Pipeline / lint (pull_request) Failing after 2m47s
Pull Request Pipeline / test (pull_request) Successful in 2m38s
2026-01-13 21:53:45 +01:00
82ad2b74f8 refactor: enhance documentation and fix punctuation in localization strings
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m3s
Pull Request Pipeline / lint (pull_request) Successful in 2m9s
2026-01-13 21:16:59 +01:00
4161e1e88b add docs to custom_alert_dialog.dart
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m5s
Pull Request Pipeline / lint (pull_request) Successful in 2m10s
2026-01-13 20:50:54 +01:00
d662680a34 fix dart analysis errors
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m9s
Pull Request Pipeline / lint (pull_request) Successful in 2m16s
2026-01-13 20:46:42 +01:00
b69d2784df Merge remote-tracking branch 'origin/development' into feature/129-neues-popup-design
Some checks failed
Pull Request Pipeline / test (pull_request) Successful in 2m16s
Pull Request Pipeline / lint (pull_request) Failing after 2m38s
2026-01-13 20:45:47 +01:00
d7f4b1c227 seperate button into widget & change to agreed design 2026-01-13 20:41:03 +01:00
ab06662397 Merge branch 'development' into feature/129-neues-popup-design
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m0s
Pull Request Pipeline / lint (pull_request) Successful in 2m12s
2026-01-12 16:42:05 +00:00
1ebcfc9e57 implement animation
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m4s
Pull Request Pipeline / lint (pull_request) Successful in 2m8s
2026-01-11 17:21:05 +01:00
22ce742d43 change button alignment & remove InkWell Animation
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m8s
Pull Request Pipeline / lint (pull_request) Successful in 2m10s
2026-01-11 17:14:28 +01:00
3ceae8341b add const
All checks were successful
Pull Request Pipeline / test (pull_request) Successful in 2m30s
Pull Request Pipeline / lint (pull_request) Successful in 2m31s
2026-01-11 15:26:50 +01:00
76ce3af643 implement custom alert dialog
Some checks failed
Pull Request Pipeline / lint (pull_request) Failing after 2m34s
Pull Request Pipeline / test (pull_request) Successful in 2m33s
2026-01-11 15:26:10 +01:00
9 changed files with 120 additions and 24 deletions

View File

@@ -79,7 +79,7 @@
"stats": "Statistiken",
"successfully_added_player": "Spieler:in {playerName} erfolgreich hinzugefügt",
"there_is_no_group_matching_your_search": "Es gibt keine Gruppe, die deiner Suche entspricht",
"this_cannot_be_undone": "Dies kann nicht rückgängig gemacht werden",
"this_cannot_be_undone": "Dies kann nicht rückgängig gemacht werden.",
"today_at": "Heute um",
"undo": "Rückgängig",
"unknown_exception": "Unbekannter Fehler (siehe Konsole)",

View File

@@ -356,7 +356,7 @@
"stats": "Stats",
"successfully_added_player": "Successfully added player {playerName}",
"there_is_no_group_matching_your_search": "There is no group matching your search",
"this_cannot_be_undone": "This can't be undone",
"this_cannot_be_undone": "This can't be undone.",
"today_at": "Today at",
"undo": "Undo",
"unknown_exception": "Unknown Exception (see console)",

View File

@@ -575,7 +575,7 @@ abstract class AppLocalizations {
/// Warning message for irreversible actions
///
/// In en, this message translates to:
/// **'This can\'t be undone'**
/// **'This can\'t be undone.'**
String get this_cannot_be_undone;
/// Date format for today

View File

@@ -262,7 +262,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get this_cannot_be_undone =>
'Dies kann nicht rückgängig gemacht werden';
'Dies kann nicht rückgängig gemacht werden.';
@override
String get today_at => 'Heute um';

View File

@@ -261,7 +261,7 @@ class AppLocalizationsEn extends AppLocalizations {
'There is no group matching your search';
@override
String get this_cannot_be_undone => 'This can\'t be undone';
String get this_cannot_be_undone => 'This can\'t be undone.';
@override
String get today_at => 'Today at';

View File

@@ -7,6 +7,8 @@ import 'package:game_tracker/core/custom_theme.dart';
import 'package:game_tracker/core/enums.dart';
import 'package:game_tracker/l10n/generated/app_localizations.dart';
import 'package:game_tracker/presentation/views/main_menu/settings_view/licenses_view.dart';
import 'package:game_tracker/presentation/widgets/buttons/animated_dialog_button.dart';
import 'package:game_tracker/presentation/widgets/custom_alert_dialog.dart';
import 'package:game_tracker/presentation/widgets/tiles/settings_list_tile.dart';
import 'package:game_tracker/services/data_transfer_service.dart';
import 'package:intl/intl.dart';
@@ -114,33 +116,38 @@ class _SettingsViewState extends State<SettingsView> {
suffixWidget: const Icon(Icons.arrow_forward_ios, size: 16),
onPressed: () {
showDialog<bool>(
context: scaffoldMessengerContext,
builder: (dialogContext) => AlertDialog(
title: Text('${loc.delete_all_data}?'),
content: Text(loc.this_cannot_be_undone),
context: context,
builder: (context) => CustomAlertDialog(
title: '${loc.delete_all_data}?',
content: loc.this_cannot_be_undone,
actions: [
TextButton(
onPressed: () =>
Navigator.of(dialogContext).pop(false),
child: Text(loc.cancel),
AnimatedDialogButton(
onPressed: () => Navigator.of(context).pop(false),
child: Text(
loc.cancel,
style: const TextStyle(
color: CustomTheme.textColor,
),
),
),
TextButton(
onPressed: () =>
Navigator.of(dialogContext).pop(true),
child: Text(loc.delete),
AnimatedDialogButton(
onPressed: () => Navigator.of(context).pop(true),
child: Text(
loc.delete,
style: TextStyle(
color: CustomTheme.secondaryColor,
),
),
),
],
),
).then((confirmed) {
if (confirmed == true &&
scaffoldMessengerContext.mounted) {
DataTransferService.deleteAllData(
scaffoldMessengerContext,
);
if (confirmed == true && context.mounted) {
DataTransferService.deleteAllData(context);
showSnackbar(
context: scaffoldMessengerContext,
message: AppLocalizations.of(
scaffoldMessengerContext,
context,
).data_successfully_deleted,
);
}

View File

@@ -0,0 +1,50 @@
import 'package:flutter/material.dart';
import 'package:game_tracker/core/custom_theme.dart';
class AnimatedDialogButton extends StatefulWidget {
/// A custom animated button widget that provides a scaling and opacity effect
/// when pressed.
/// - [onPressed]: Callback function that is triggered when the button is pressed.
/// - [child]: The child widget to be displayed inside the button, typically a text or icon.
const AnimatedDialogButton({
super.key,
required this.onPressed,
required this.child,
});
/// Callback function that is triggered when the button is pressed.
final VoidCallback onPressed;
/// The child widget to be displayed inside the button, typically a text or icon.
final Widget child;
@override
State<AnimatedDialogButton> createState() => _AnimatedDialogButtonState();
}
class _AnimatedDialogButtonState extends State<AnimatedDialogButton> {
bool _isPressed = false;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTapDown: (_) => setState(() => _isPressed = true),
onTapUp: (_) => setState(() => _isPressed = false),
onTapCancel: () => setState(() => _isPressed = false),
onTap: widget.onPressed,
child: AnimatedScale(
scale: _isPressed ? 0.95 : 1.0,
duration: const Duration(milliseconds: 100),
child: AnimatedOpacity(
opacity: _isPressed ? 0.6 : 1.0,
duration: const Duration(milliseconds: 100),
child: Container(
decoration: CustomTheme.standardBoxDecoration,
padding: const EdgeInsets.symmetric(horizontal: 26, vertical: 6),
child: widget.child,
),
),
),
);
}
}

View File

@@ -0,0 +1,39 @@
import 'package:flutter/material.dart';
import 'package:game_tracker/core/custom_theme.dart';
class CustomAlertDialog extends StatelessWidget {
/// A custom alert dialog widget that provides a os unspecific AlertDialog,
/// with consistent colors, borders, and layout that match the app's custom theme.
/// - [title]: The title text displayed at the top of the dialog.
/// - [content]: The main content text displayed in the body of the dialog.
/// - [actions]: A list of action widgets (typically buttons) displayed at the bottom
/// of the dialog. These actions are horizontally spaced around the dialog's width.
const CustomAlertDialog({
super.key,
required this.title,
required this.content,
required this.actions,
});
final String title;
final String content;
final List<Widget> actions;
@override
Widget build(BuildContext context) {
return AlertDialog(
title: Text(title, style: const TextStyle(color: CustomTheme.textColor)),
content: Text(
content,
style: const TextStyle(color: CustomTheme.textColor),
),
actions: actions,
backgroundColor: CustomTheme.boxColor,
actionsAlignment: MainAxisAlignment.spaceAround,
shape: RoundedRectangleBorder(
borderRadius: CustomTheme.standardBorderRadiusAll,
side: BorderSide(color: CustomTheme.boxBorder),
),
);
}
}

View File

@@ -1,7 +1,7 @@
name: game_tracker
description: "Game Tracking App for Card Games"
publish_to: 'none'
version: 0.0.6+209
version: 0.0.7+212
environment:
sdk: ^3.8.1