Merge remote-tracking branch 'origin/development' into feature/100-lokalisierung-hinzufügen
# Conflicts: # lib/presentation/views/main_menu/home_view.dart # lib/presentation/views/main_menu/match_view/create_match/create_match_view.dart # lib/presentation/views/main_menu/match_view/match_view.dart
This commit is contained in:
@@ -7,8 +7,8 @@ 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/widgets/app_skeleton.dart';
|
import 'package:game_tracker/presentation/widgets/app_skeleton.dart';
|
||||||
import 'package:game_tracker/presentation/widgets/buttons/quick_create_button.dart';
|
import 'package:game_tracker/presentation/widgets/buttons/quick_create_button.dart';
|
||||||
import 'package:game_tracker/presentation/widgets/tiles/game_tile.dart';
|
|
||||||
import 'package:game_tracker/presentation/widgets/tiles/info_tile.dart';
|
import 'package:game_tracker/presentation/widgets/tiles/info_tile.dart';
|
||||||
|
import 'package:game_tracker/presentation/widgets/tiles/match_summary_tile.dart';
|
||||||
import 'package:game_tracker/presentation/widgets/tiles/quick_info_tile.dart';
|
import 'package:game_tracker/presentation/widgets/tiles/quick_info_tile.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
@@ -123,7 +123,7 @@ class _HomeViewState extends State<HomeView> {
|
|||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
MatchTile(
|
MatchSummaryTile(
|
||||||
matchTitle: recentMatches[0].name,
|
matchTitle: recentMatches[0].name,
|
||||||
game: AppLocalizations.of(context)!.winner_label,
|
game: AppLocalizations.of(context)!.winner_label,
|
||||||
ruleset: AppLocalizations.of(
|
ruleset: AppLocalizations.of(
|
||||||
@@ -141,7 +141,7 @@ class _HomeViewState extends State<HomeView> {
|
|||||||
child: Divider(),
|
child: Divider(),
|
||||||
),
|
),
|
||||||
if (loadedRecentMatches.length > 1) ...[
|
if (loadedRecentMatches.length > 1) ...[
|
||||||
MatchTile(
|
MatchSummaryTile(
|
||||||
matchTitle: recentMatches[1].name,
|
matchTitle: recentMatches[1].name,
|
||||||
game: AppLocalizations.of(
|
game: AppLocalizations.of(
|
||||||
context,
|
context,
|
||||||
@@ -173,7 +173,6 @@ class _HomeViewState extends State<HomeView> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// TODO: Implement quick create functionality
|
|
||||||
InfoTile(
|
InfoTile(
|
||||||
width: constraints.maxWidth * 0.95,
|
width: constraints.maxWidth * 0.95,
|
||||||
title: AppLocalizations.of(context)!.quick_create,
|
title: AppLocalizations.of(context)!.quick_create,
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ class _CreateMatchViewState extends State<CreateMatchView> {
|
|||||||
/// Controller for the match name input field
|
/// Controller for the match name input field
|
||||||
final TextEditingController _matchNameController = TextEditingController();
|
final TextEditingController _matchNameController = TextEditingController();
|
||||||
|
|
||||||
|
/// Hint text for the match name input field
|
||||||
|
String hintText = 'Match Name';
|
||||||
|
|
||||||
/// List of all groups from the database
|
/// List of all groups from the database
|
||||||
List<Group> groupsList = [];
|
List<Group> groupsList = [];
|
||||||
|
|
||||||
@@ -132,7 +135,7 @@ class _CreateMatchViewState extends State<CreateMatchView> {
|
|||||||
margin: const EdgeInsets.symmetric(horizontal: 12, vertical: 5),
|
margin: const EdgeInsets.symmetric(horizontal: 12, vertical: 5),
|
||||||
child: TextInputField(
|
child: TextInputField(
|
||||||
controller: _matchNameController,
|
controller: _matchNameController,
|
||||||
hintText: AppLocalizations.of(context)!.match_name,
|
hintText: hintText,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
ChooseTile(
|
ChooseTile(
|
||||||
@@ -151,11 +154,13 @@ class _CreateMatchViewState extends State<CreateMatchView> {
|
|||||||
);
|
);
|
||||||
setState(() {
|
setState(() {
|
||||||
if (selectedGameIndex != -1) {
|
if (selectedGameIndex != -1) {
|
||||||
|
hintText = games[selectedGameIndex].$1;
|
||||||
selectedRuleset = games[selectedGameIndex].$3;
|
selectedRuleset = games[selectedGameIndex].$3;
|
||||||
selectedRulesetIndex = _getRulesets(
|
selectedRulesetIndex = _getRulesets(
|
||||||
context,
|
context,
|
||||||
).indexWhere((r) => r.$1 == selectedRuleset);
|
).indexWhere((r) => r.$1 == selectedRuleset);
|
||||||
} else {
|
} else {
|
||||||
|
hintText = 'Match Name';
|
||||||
selectedRuleset = null;
|
selectedRuleset = null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -230,7 +235,9 @@ class _CreateMatchViewState extends State<CreateMatchView> {
|
|||||||
onPressed: _enableCreateGameButton()
|
onPressed: _enableCreateGameButton()
|
||||||
? () async {
|
? () async {
|
||||||
Match match = Match(
|
Match match = Match(
|
||||||
name: _matchNameController.text.trim(),
|
name: _matchNameController.text.isEmpty
|
||||||
|
? hintText
|
||||||
|
: _matchNameController.text.trim(),
|
||||||
createdAt: DateTime.now(),
|
createdAt: DateTime.now(),
|
||||||
group: selectedGroup,
|
group: selectedGroup,
|
||||||
players: selectedPlayers,
|
players: selectedPlayers,
|
||||||
@@ -260,9 +267,8 @@ class _CreateMatchViewState extends State<CreateMatchView> {
|
|||||||
/// Determines whether the "Create Game" button should be enabled based on
|
/// Determines whether the "Create Game" button should be enabled based on
|
||||||
/// the current state of the input fields.
|
/// the current state of the input fields.
|
||||||
bool _enableCreateGameButton() {
|
bool _enableCreateGameButton() {
|
||||||
return _matchNameController.text.isNotEmpty &&
|
return selectedGroup != null ||
|
||||||
(selectedGroup != null ||
|
(selectedPlayers != null && selectedPlayers!.length > 1) &&
|
||||||
(selectedPlayers != null && selectedPlayers!.length > 1)) &&
|
selectedRuleset != null;
|
||||||
selectedRuleset != null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import 'package:game_tracker/presentation/views/main_menu/match_view/create_matc
|
|||||||
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/app_skeleton.dart';
|
import 'package:game_tracker/presentation/widgets/app_skeleton.dart';
|
||||||
import 'package:game_tracker/presentation/widgets/buttons/custom_width_button.dart';
|
import 'package:game_tracker/presentation/widgets/buttons/custom_width_button.dart';
|
||||||
import 'package:game_tracker/presentation/widgets/tiles/game_history_tile.dart';
|
import 'package:game_tracker/presentation/widgets/tiles/match_tile.dart';
|
||||||
import 'package:game_tracker/presentation/widgets/top_centered_message.dart';
|
import 'package:game_tracker/presentation/widgets/top_centered_message.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
@@ -31,9 +31,9 @@ class _MatchViewState extends State<MatchView> {
|
|||||||
List<Match> matches = List.filled(
|
List<Match> matches = List.filled(
|
||||||
4,
|
4,
|
||||||
Match(
|
Match(
|
||||||
name: 'Skeleton Gamename',
|
name: 'Skeleton match name',
|
||||||
group: Group(
|
group: Group(
|
||||||
name: 'Groupname',
|
name: 'Group name',
|
||||||
members: List.filled(5, Player(name: 'Player')),
|
members: List.filled(5, Player(name: 'Player')),
|
||||||
),
|
),
|
||||||
winner: Player(name: 'Player'),
|
winner: Player(name: 'Player'),
|
||||||
@@ -75,7 +75,7 @@ class _MatchViewState extends State<MatchView> {
|
|||||||
height: MediaQuery.paddingOf(context).bottom - 20,
|
height: MediaQuery.paddingOf(context).bottom - 20,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return GameHistoryTile(
|
return MatchTile(
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
|
|||||||
@@ -2,14 +2,14 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:game_tracker/core/custom_theme.dart';
|
import 'package:game_tracker/core/custom_theme.dart';
|
||||||
import 'package:skeletonizer/skeletonizer.dart';
|
import 'package:skeletonizer/skeletonizer.dart';
|
||||||
|
|
||||||
class MatchTile extends StatefulWidget {
|
class MatchSummaryTile extends StatefulWidget {
|
||||||
final String matchTitle;
|
final String matchTitle;
|
||||||
final String game;
|
final String game;
|
||||||
final String ruleset;
|
final String ruleset;
|
||||||
final String players;
|
final String players;
|
||||||
final String winner;
|
final String winner;
|
||||||
|
|
||||||
const MatchTile({
|
const MatchSummaryTile({
|
||||||
super.key,
|
super.key,
|
||||||
required this.matchTitle,
|
required this.matchTitle,
|
||||||
required this.game,
|
required this.game,
|
||||||
@@ -19,10 +19,10 @@ class MatchTile extends StatefulWidget {
|
|||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<MatchTile> createState() => _MatchTileState();
|
State<MatchSummaryTile> createState() => _MatchSummaryTileState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _MatchTileState extends State<MatchTile> {
|
class _MatchSummaryTileState extends State<MatchSummaryTile> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Column(
|
return Column(
|
||||||
@@ -5,17 +5,17 @@ import 'package:game_tracker/l10n/generated/app_localizations.dart';
|
|||||||
import 'package:game_tracker/presentation/widgets/tiles/text_icon_tile.dart';
|
import 'package:game_tracker/presentation/widgets/tiles/text_icon_tile.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
class GameHistoryTile extends StatefulWidget {
|
class MatchTile extends StatefulWidget {
|
||||||
final Match match;
|
final Match match;
|
||||||
final VoidCallback onTap;
|
final VoidCallback onTap;
|
||||||
|
|
||||||
const GameHistoryTile({super.key, required this.match, required this.onTap});
|
const MatchTile({super.key, required this.match, required this.onTap});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<GameHistoryTile> createState() => _GameHistoryTileState();
|
State<MatchTile> createState() => _MatchTileState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _GameHistoryTileState extends State<GameHistoryTile> {
|
class _MatchTileState extends State<MatchTile> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final group = widget.match.group;
|
final group = widget.match.group;
|
||||||
Reference in New Issue
Block a user