Added match editing

This commit is contained in:
2026-01-18 00:46:50 +01:00
parent a56e738064
commit 48d99a0386
2 changed files with 30 additions and 3 deletions

View File

@@ -20,11 +20,14 @@ import 'package:provider/provider.dart';
class CreateMatchView extends StatefulWidget { class CreateMatchView extends StatefulWidget {
/// A view that allows creating a new match /// A view that allows creating a new match
/// [onWinnerChanged]: Optional callback invoked when the winner is changed /// [onWinnerChanged]: Optional callback invoked when the winner is changed
const CreateMatchView({super.key, this.onWinnerChanged}); const CreateMatchView({super.key, this.onWinnerChanged, this.match});
/// Optional callback invoked when the winner is changed /// Optional callback invoked when the winner is changed
final VoidCallback? onWinnerChanged; final VoidCallback? onWinnerChanged;
/// An optional match to prefill the fields
final Match? match;
@override @override
State<CreateMatchView> createState() => _CreateMatchViewState(); State<CreateMatchView> createState() => _CreateMatchViewState();
} }
@@ -83,6 +86,19 @@ class _CreateMatchViewState extends State<CreateMatchView> {
filteredPlayerList = List.from(playerList); filteredPlayerList = List.from(playerList);
}); });
}); });
if (widget.match != null) {
final match = widget.match!;
_matchNameController.text = match.name;
selectedGroup = match.group;
selectedGroupId = match.group?.id ?? '';
selectedPlayers = match.players ?? [];
if (selectedGroup != null) {
filteredPlayerList = playerList
.where((p) => !selectedGroup!.members.any((m) => m.id == p.id))
.toList();
}
}
} }
@override @override

View File

@@ -5,6 +5,7 @@ import 'package:game_tracker/data/db/database.dart';
import 'package:game_tracker/data/dto/match.dart'; import 'package:game_tracker/data/dto/match.dart';
import 'package:game_tracker/data/dto/player.dart'; import 'package:game_tracker/data/dto/player.dart';
import 'package:game_tracker/l10n/generated/app_localizations.dart'; import 'package:game_tracker/l10n/generated/app_localizations.dart';
import 'package:game_tracker/presentation/views/main_menu/match_view/create_match/create_match_view.dart';
import 'package:game_tracker/presentation/views/main_menu/match_view/match_result_view.dart'; import 'package:game_tracker/presentation/views/main_menu/match_view/match_result_view.dart';
import 'package:game_tracker/presentation/widgets/buttons/animated_dialog_button.dart'; import 'package:game_tracker/presentation/widgets/buttons/animated_dialog_button.dart';
import 'package:game_tracker/presentation/widgets/buttons/main_menu_button.dart'; import 'package:game_tracker/presentation/widgets/buttons/main_menu_button.dart';
@@ -218,7 +219,17 @@ class _MatchProfileViewState extends State<MatchProfileView> {
bottom: MediaQuery.paddingOf(context).bottom, bottom: MediaQuery.paddingOf(context).bottom,
child: Row( child: Row(
children: [ children: [
MainMenuButton(icon: Icons.edit, onPressed: () {}), MainMenuButton(
icon: Icons.edit,
onPressed: () => Navigator.push(
context,
adaptivePageRoute(
fullscreenDialog: true,
builder: (context) =>
CreateMatchView(match: widget.match),
),
),
),
const SizedBox(width: 15), const SizedBox(width: 15),
MainMenuButton( MainMenuButton(
text: loc.enter_results, text: loc.enter_results,