From f1f3c5f6103d786e485147b71a558fc674aff487 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Wed, 12 Apr 2023 00:10:59 +0200 Subject: [PATCH] Update UI --- lib/src/app.dart | 4 +- .../screens/event/components/fight_list.dart | 7 ++ .../event/components/loaded_event.dart | 82 ++++++++++++------- .../screens/event/components/team_list.dart | 48 ++++++----- 4 files changed, 92 insertions(+), 49 deletions(-) diff --git a/lib/src/app.dart b/lib/src/app.dart index 079bd8f..06fd964 100644 --- a/lib/src/app.dart +++ b/lib/src/app.dart @@ -82,12 +82,12 @@ class DevServerStarterApp extends StatelessWidget { title: 'Steamwar Multitool', theme: ThemeData( useMaterial3: true, - colorSchemeSeed: const Color(0xFFFFFF55), + colorSchemeSeed: Colors.blue, ), darkTheme: ThemeData( brightness: Brightness.dark, useMaterial3: true, - colorSchemeSeed: const Color(0xFFFFFF55), + colorSchemeSeed: Colors.amber, ), debugShowCheckedModeBanner: false, ); diff --git a/lib/src/screens/event/components/fight_list.dart b/lib/src/screens/event/components/fight_list.dart index 97d2db2..eeb2e49 100644 --- a/lib/src/screens/event/components/fight_list.dart +++ b/lib/src/screens/event/components/fight_list.dart @@ -90,6 +90,13 @@ class EventFightList extends HookConsumerWidget { }, label: const Text("Generate Fight"), icon: const Icon(Icons.shuffle)), + const Spacer(), + Tooltip( + message: "Fights", + child: CircleAvatar( + child: Text(fights.value.length.toString()), + ), + ), ], ), Row( diff --git a/lib/src/screens/event/components/loaded_event.dart b/lib/src/screens/event/components/loaded_event.dart index e76359f..5cc1350 100644 --- a/lib/src/screens/event/components/loaded_event.dart +++ b/lib/src/screens/event/components/loaded_event.dart @@ -62,6 +62,20 @@ class LoadedEventScreen extends HookConsumerWidget { value.firstWhere((element) => element.db == event.schemType))); }); + final fightCount = useMemoized(() { + Map fightCount = {}; + for (var team in eventData.teams) { + fightCount[team.id] = 0; + } + + for (var fight in eventData.fights) { + fightCount[fight.blueTeam.id] = + (fightCount[fight.blueTeam.id] ?? 0) + 1; + fightCount[fight.redTeam.id] = (fightCount[fight.redTeam.id] ?? 0) + 1; + } + return fightCount; + }, [eventData.fights, eventData.teams]); + final changed = useState(false); return Scaffold( appBar: AppBar( @@ -183,36 +197,48 @@ class LoadedEventScreen extends HookConsumerWidget { }, ), const SizedBox(height: 8), - Row( + Wrap( + alignment: WrapAlignment.spaceBetween, children: [ - const Text("Deadline: "), - DateTimeEditor((p0) { - deadlineState.value = p0; - changed.value = true; - }, deadlineState.value, true), + Column( + children: [ + const Tooltip( + message: "Deadline", + child: Icon(Icons.block), + ), + DateTimeEditor((p0) { + deadlineState.value = p0; + changed.value = true; + }, deadlineState.value, true), + ], + ), + Column( + children: [ + const Tooltip( + message: "Start", + child: Icon(Icons.swipe_right_alt), + ), + DateTimeEditor((p0) { + startDateState.value = p0; + changed.value = true; + }, startDateState.value, true), + ], + ), + Column( + children: [ + const Tooltip( + message: "End", + child: Icon(Icons.swipe_left_alt), + ), + DateTimeEditor((p0) { + endDateState.value = p0; + changed.value = true; + }, endDateState.value, true), + ], + ), ], ), - const SizedBox(height: 8), - Row( - children: [ - const Text("Start: "), - DateTimeEditor((p0) { - startDateState.value = p0; - changed.value = true; - }, startDateState.value, true), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - const Text("End: "), - DateTimeEditor((p0) { - endDateState.value = p0; - changed.value = true; - }, endDateState.value, true), - ], - ), - const SizedBox(height: 8), + const SizedBox(height: 16), Row( children: [ SizedBox( @@ -316,7 +342,7 @@ class LoadedEventScreen extends HookConsumerWidget { ), ], ), - TeamList(eventData.teams), + TeamList(eventData.teams, fightCount), EventFightList( eventData: eventData, ), diff --git a/lib/src/screens/event/components/team_list.dart b/lib/src/screens/event/components/team_list.dart index 3e46a38..88f4e6f 100644 --- a/lib/src/screens/event/components/team_list.dart +++ b/lib/src/screens/event/components/team_list.dart @@ -23,34 +23,44 @@ import 'package:steamwar_multitool/src/types/types.dart'; class TeamList extends HookConsumerWidget { final List teams; + final Map fightCount; const TeamList( - this.teams, { + this.teams, + this.fightCount, { Key? key, }) : super(key: key); @override Widget build(BuildContext context, WidgetRef ref) { - return ListView.builder( - itemBuilder: (context, index) { - final team = teams[index]; - return ListTile( - title: Text(team.name), + return ListView( + children: [ + ListTile( + title: const Text("Teams"), leading: CircleAvatar( - backgroundColor: team.color, - child: Text( - team.kuerzel, - style: TextStyle( - color: team.color.computeLuminance() > 0.4 - ? Colors.black - : Colors.white, - fontSize: 12, - ), - ), + child: Text(teams.length.toString()), ), - ); - }, - itemCount: teams.length, + ), + const Divider(), + for (final team in teams) + ListTile( + title: Text(team.name), + leading: CircleAvatar( + backgroundColor: team.color, + child: Text( + team.kuerzel, + style: TextStyle( + color: team.color.computeLuminance() > 0.4 + ? Colors.black + : Colors.white, + fontSize: 12, + ), + ), + ), + subtitle: Text( + "Fights: ${fightCount[team.id] ?? 0}", + )), + ], ); } }