1
0

Fixes for Fixes for Fixes for Fixes for the final Fixes

Dieser Commit ist enthalten in:
Chaoscaot 2022-12-30 19:17:59 +01:00
Ursprung 5f9b51581e
Commit 744c79408f
5 geänderte Dateien mit 104 neuen und 45 gelöschten Zeilen

Datei anzeigen

@ -3,6 +3,7 @@ import 'dart:ui';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
import 'package:steamwar_multitool/src/provider/types.dart';
import 'http.dart'; import 'http.dart';
@ -69,8 +70,15 @@ class EventRepository {
await _client.delete("/fights/$id"); await _client.delete("/fights/$id");
} }
Future<void> createFight(int eventId, DateTime start, String mode, String map, Future<void> createFight(
Team blue, Team red) { int eventId,
DateTime start,
String mode,
String map,
Team blue,
Team red,
int referee,
) {
return _client.post("/fights", data: { return _client.post("/fights", data: {
"event": eventId, "event": eventId,
"spielmodus": mode, "spielmodus": mode,
@ -78,6 +86,7 @@ class EventRepository {
"start": start.millisecondsSinceEpoch, "start": start.millisecondsSinceEpoch,
"blueTeam": blue.id, "blueTeam": blue.id,
"redTeam": red.id, "redTeam": red.id,
"kampfleiter": referee,
}); });
} }
@ -86,13 +95,15 @@ class EventRepository {
return (res.data as List).map((e) => EventFight.fromJson(e)).toList(); return (res.data as List).map((e) => EventFight.fromJson(e)).toList();
} }
Future<void> updateFight( Future<void> updateFight(int id, DateTime start, String mode, String map,
int id, DateTime start, String mode, String map, int referee) { int referee, Team blue, Team red) {
return _client.put("/fights/$id", data: { return _client.put("/fights/$id", data: {
"spielmodus": mode, "spielmodus": mode,
"map": map, "map": map,
"start": start.millisecondsSinceEpoch, "start": start.millisecondsSinceEpoch,
"kampfleiter": referee, "kampfleiter": referee,
"blueTeam": blue.id,
"redTeam": red.id,
}); });
} }
} }
@ -104,11 +115,11 @@ class EventFight {
final DateTime start; final DateTime start;
final Team redTeam; final Team redTeam;
final Team blueTeam; final Team blueTeam;
final int fightLeaderId; final User kampfleiter;
final int score; final int score;
EventFight(this.id, this.gameMode, this.map, this.start, this.redTeam, EventFight(this.id, this.gameMode, this.map, this.start, this.redTeam,
this.blueTeam, this.fightLeaderId, this.score); this.blueTeam, this.kampfleiter, this.score);
Team get winner { Team get winner {
switch (score) { switch (score) {
@ -131,7 +142,7 @@ class EventFight {
DateTime.fromMillisecondsSinceEpoch(json["start"]), DateTime.fromMillisecondsSinceEpoch(json["start"]),
Team.fromJson(json["redTeam"]), Team.fromJson(json["redTeam"]),
Team.fromJson(json["blueTeam"]), Team.fromJson(json["blueTeam"]),
json["kampfleiter"], User.fromJson(json["kampfleiter"]),
json["ergebnis"]); json["ergebnis"]);
} }
} }

Datei anzeigen

@ -21,8 +21,3 @@ final httpClient = FutureProvider<Dio>(
contentType: "application/json", contentType: "application/json",
)), )),
); );
final test = FutureProvider((ref) async {
final client = await ref.watch(httpClient.future);
await client.get("/data");
});

Datei anzeigen

@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:steamwar_multitool/src/provider/user.dart';
import '../provider/events.dart'; import '../provider/events.dart';
import '../provider/types.dart'; import '../provider/types.dart';
@ -182,6 +183,7 @@ class _EventScreen extends HookConsumerWidget {
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: ListView( child: ListView(
children: [ children: [
const SizedBox(height: 8),
TextField( TextField(
controller: nameController, controller: nameController,
decoration: const InputDecoration( decoration: const InputDecoration(
@ -343,11 +345,12 @@ class _EventFightList extends HookConsumerWidget {
fights.value = await repo.listFights(event.id); fights.value = await repo.listFights(event.id);
} }
return ListView( return Column(
shrinkWrap: true,
children: [ children: [
const SizedBox(height: 8), const SizedBox(height: 8),
FloatingActionButton.extended( SizedBox(
width: double.infinity,
child: FloatingActionButton.extended(
onPressed: () { onPressed: () {
showDialog( showDialog(
context: context, context: context,
@ -362,6 +365,7 @@ class _EventFightList extends HookConsumerWidget {
label: const Text("Add Fight"), label: const Text("Add Fight"),
icon: const Icon(Icons.add), icon: const Icon(Icons.add),
), ),
),
const SizedBox(height: 8), const SizedBox(height: 8),
for (final fight in fights.value) for (final fight in fights.value)
ListTile( ListTile(
@ -385,10 +389,14 @@ class _EventFightList extends HookConsumerWidget {
context: context, context: context,
builder: (context) { builder: (context) {
return EditEventFightDialog( return EditEventFightDialog(
fight: fight, fightsRefresher: () => update()); fight: fight,
fightsRefresher: () => update(),
event: eventData,
);
}); });
}, },
tileColor: fight.score != 0 ? fight.winner.color : null, tileColor:
fight.score != 0 ? fight.winner.color.withOpacity(0.5) : null,
) )
], ],
); );
@ -396,27 +404,41 @@ class _EventFightList extends HookConsumerWidget {
} }
class EditEventFightDialog extends HookConsumerWidget { class EditEventFightDialog extends HookConsumerWidget {
const EditEventFightDialog({ const EditEventFightDialog(
Key? key, {Key? key,
required this.fight, required this.fight,
required this.fightsRefresher, required this.fightsRefresher,
}) : super(key: key); required this.event})
: super(key: key);
final EventFight fight; final EventFight fight;
final EventExtended event;
final void Function() fightsRefresher; final void Function() fightsRefresher;
@override @override
Widget build(BuildContext context, WidgetRef ref) { Widget build(BuildContext context, WidgetRef ref) {
final blueTeam = useState(fight.blueTeam);
final redTeam = useState(fight.redTeam);
final start = useState(fight.start); final start = useState(fight.start);
final mode = useState(fight.gameMode); final mode = useState(fight.gameMode);
final map = useState(fight.map); final map = useState(fight.map);
final referrer = useState(fight.fightLeaderId); final referrer = useState(fight.kampfleiter);
return AlertDialog( return AlertDialog(
title: Text("${fight.blueTeam.name} vs ${fight.redTeam.name}"), title: Text("${fight.blueTeam.name} vs ${fight.redTeam.name}"),
content: Column( content: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
const SizedBox(height: 8),
const Text("Blue Team"),
_TeamSelector(event.event, blueTeam.value, (p0) {
blueTeam.value = p0;
}, event.teams),
const SizedBox(height: 8),
const Text("Red Team"),
_TeamSelector(event.event, redTeam.value, (p0) {
redTeam.value = p0;
}, event.teams),
const SizedBox(height: 8), const SizedBox(height: 8),
const Text("Start"), const Text("Start"),
const SizedBox(height: 8), const SizedBox(height: 8),
@ -469,12 +491,13 @@ class EditEventFightDialog extends HookConsumerWidget {
final user = await showSearch( final user = await showSearch(
context: context, delegate: UserSearchDelegate(users)); context: context, delegate: UserSearchDelegate(users));
if (user != null) { if (user != null) {
referrer.value = user.id; referrer.value = user;
fightsRefresher(); fightsRefresher();
} }
}, },
child: child: Text(referrer.value.id == 0
Text(referrer.value == 0 ? "None" : referrer.value.toString()), ? "None"
: "${referrer.value.name} (${referrer.value!.id})"),
), ),
], ],
), ),
@ -518,8 +541,8 @@ class EditEventFightDialog extends HookConsumerWidget {
onPressed: () async { onPressed: () async {
var nav = Navigator.of(context); var nav = Navigator.of(context);
final repo = await ref.read(eventRepositoryProvider.future); final repo = await ref.read(eventRepositoryProvider.future);
await repo.updateFight( await repo.updateFight(fight.id, start.value, mode.value,
fight.id, start.value, mode.value, map.value, referrer.value); map.value, referrer.value.id, blueTeam.value, redTeam.value);
fightsRefresher(); fightsRefresher();
nav.pop(); nav.pop();
}, },
@ -546,6 +569,7 @@ class _AddFightWidget extends HookConsumerWidget {
final blueTeam = useState<Team?>(null); final blueTeam = useState<Team?>(null);
final redTeam = useState<Team?>(null); final redTeam = useState<Team?>(null);
final date = useState<DateTime>(event.start); final date = useState<DateTime>(event.start);
final referrer = useState<User?>(null);
final canCreate = useMemoized(() { final canCreate = useMemoized(() {
return gamemode.value != null && return gamemode.value != null &&
@ -599,6 +623,22 @@ class _AddFightWidget extends HookConsumerWidget {
eventData.teams), eventData.teams),
const SizedBox(height: 8), const SizedBox(height: 8),
DateTimeEditor((p0) => date.value = p0, date.value, true), DateTimeEditor((p0) => date.value = p0, date.value, true),
const SizedBox(height: 8),
const Text("Kampfleiter"),
const SizedBox(height: 8),
TextButton(
onPressed: () async {
final users = await ref.read(usersProvider.future);
final user = await showSearch(
context: context, delegate: UserSearchDelegate(users));
if (user != null) {
referrer.value = user;
}
},
child: Text(referrer.value == null || referrer.value!.id == 0
? "None"
: "${referrer.value!.name} (${referrer.value!.id})"),
),
], ],
), ),
actions: [ actions: [
@ -618,7 +658,8 @@ class _AddFightWidget extends HookConsumerWidget {
gamemode.value!, gamemode.value!,
map.value!, map.value!,
blueTeam.value!, blueTeam.value!,
redTeam.value!); redTeam.value!,
referrer.value?.id ?? 0);
onAdded.call(); onAdded.call();
nav.pop(); nav.pop();
} }

Datei anzeigen

@ -45,7 +45,7 @@ class HomeScreen extends HookConsumerWidget {
onPressed: servers.isLoading onPressed: servers.isLoading
? null ? null
: () { : () {
ref.refresh(eventsListProvider); ref.invalidate(eventsListProvider);
}, },
icon: const Icon(Icons.refresh), icon: const Icon(Icons.refresh),
), ),
@ -67,7 +67,7 @@ class HomeScreen extends HookConsumerWidget {
final nav = Navigator.of(context); final nav = Navigator.of(context);
final prefs = await SharedPreferences.getInstance(); final prefs = await SharedPreferences.getInstance();
await prefs.remove("key"); await prefs.remove("key");
ref.refresh(userDataProvider); ref.invalidate(userDataProvider);
nav.pop(); nav.pop();
context.go('/login'); context.go('/login');
}, },
@ -99,7 +99,7 @@ class HomeScreen extends HookConsumerWidget {
trailing: IconButton( trailing: IconButton(
icon: const Icon(Icons.person), icon: const Icon(Icons.person),
onPressed: () { onPressed: () {
Navigator.pushNamed(context, "/settings"); context.go('/settings');
}, },
), ),
selectedIndex: navRailIndex.value, selectedIndex: navRailIndex.value,

Datei anzeigen

@ -277,6 +277,12 @@ class TeamSearchDelegate extends SearchDelegate<Team?> {
Widget buildResults(BuildContext context) { Widget buildResults(BuildContext context) {
return ListView( return ListView(
children: [ children: [
ListTile(
title: const Text("?"),
onTap: () {
close(context, Team(-1, "?", "?", "8"));
},
),
for (final team in teams) for (final team in teams)
if (team.name.toLowerCase().contains(query.toLowerCase())) if (team.name.toLowerCase().contains(query.toLowerCase()))
ListTile( ListTile(
@ -293,6 +299,12 @@ class TeamSearchDelegate extends SearchDelegate<Team?> {
Widget buildSuggestions(BuildContext context) { Widget buildSuggestions(BuildContext context) {
return ListView( return ListView(
children: [ children: [
ListTile(
title: const Text("?"),
onTap: () {
close(context, Team(-1, "?", "?", "8"));
},
),
for (final team in teams) for (final team in teams)
if (team.name.toLowerCase().contains(query.toLowerCase())) if (team.name.toLowerCase().contains(query.toLowerCase()))
ListTile( ListTile(