1
0

Some Improvements

Dieser Commit ist enthalten in:
Chaoscaot 2023-04-10 00:39:31 +02:00
Ursprung 9dfdd65bf0
Commit 4c54b65b5c
12 geänderte Dateien mit 413 neuen und 397 gelöschten Zeilen

Datei anzeigen

@ -46,16 +46,6 @@ final _routes = GoRouter(
}
return EditEventScreen(eventId);
}),
GoRoute(
path: "/event/:eventId/generator",
builder: (context, state) {
final eventId = int.tryParse(state.params['eventId']!);
if (eventId == null) {
context.go("/");
return const SizedBox();
}
return BracketGeneratorScreen(eventId);
}),
GoRoute(
path: "/display/:eventId",
builder: (context, state) {

Datei anzeigen

@ -32,10 +32,9 @@ class DateTimeEditor extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
return Row(
mainAxisAlignment: mainAxisAlignment,
return Wrap(
children: [
TextButton(
FilledButton.tonalIcon(
onPressed: enabled
? () async {
final date = await showDatePicker(
@ -49,36 +48,40 @@ class DateTimeEditor extends HookConsumerWidget {
}
}
: null,
child: Text(kDateFormat.format(initialDate)),
icon: const Icon(Icons.calendar_today),
label: Text(kOnlyDateFormat.format(initialDate)),
),
IconButton(
onPressed: enabled
? () async {
final time = await showTimePicker(
builder: (context, child) {
return MediaQuery(
data: MediaQuery.of(context).copyWith(
alwaysUse24HourFormat: true,
),
child: child!,
);
},
context: context,
initialTime: TimeOfDay(
hour: initialDate.hour, minute: initialDate.minute),
);
if (time != null) {
final changed = DateTime(
initialDate.year,
initialDate.month,
initialDate.day,
time.hour,
time.minute);
onChanged(changed);
}
const SizedBox(width: 8),
FilledButton.tonalIcon(
onPressed: enabled
? () async {
final time = await showTimePicker(
builder: (context, child) {
return MediaQuery(
data: MediaQuery.of(context).copyWith(
alwaysUse24HourFormat: true,
),
child: child!,
);
},
context: context,
initialTime: TimeOfDay(
hour: initialDate.hour, minute: initialDate.minute),
);
if (time != null) {
final changed = DateTime(
initialDate.year,
initialDate.month,
initialDate.day,
time.hour,
time.minute);
onChanged(changed);
}
: null,
icon: const Icon(Icons.schedule)),
}
: null,
icon: const Icon(Icons.schedule),
label: Text(kTimeFormat.format(initialDate)),
),
],
);
}

Datei anzeigen

@ -36,15 +36,18 @@ class CreateEventDialog extends HookConsumerWidget {
final startTime = useState(DateTime.now());
final endTime = useState(DateTime.now().add(const Duration(hours: 1)));
return AlertDialog(
title: const Text('Create Event'),
content: Column(
return Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(height: 20),
TextField(
decoration: InputDecoration(
labelText: "Event Name",
errorText: eventExists.value ? "Event already exists" : null,
border: const OutlineInputBorder(),
constraints: const BoxConstraints(maxWidth: 300),
),
controller: eventName,
onChanged: (value) {
@ -54,44 +57,40 @@ class CreateEventDialog extends HookConsumerWidget {
}
},
),
SizedBox(height: 10),
const Text("Start:"),
DateTimeEditor((p0) {
startTime.value = p0;
}, startTime.value, true),
SizedBox(height: 10),
const Text("End:"),
DateTimeEditor((p0) {
endTime.value = p0;
}, endTime.value, true),
Divider(),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text("Start: "),
DateTimeEditor((p0) {
startTime.value = p0;
}, startTime.value, true),
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: const Text("Cancel"),
),
FilledButton(
onPressed: () async {
final event = await ref
.read(eventRepositoryProvider.future)
.then((value) => value.createEvent(
eventName.text, startTime.value, endTime.value));
context.go('/event/${event.id}');
},
child: const Text("Create"),
),
],
),
Row(
children: [
const Text("End: "),
DateTimeEditor((p0) {
endTime.value = p0;
}, endTime.value, true),
],
),
)
],
),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: const Text(
"Cancel",
style: TextStyle(color: Colors.red),
),
),
FilledButton(
onPressed: () async {
final event = await ref.read(eventRepositoryProvider.future).then(
(value) => value.createEvent(
eventName.text, startTime.value, endTime.value));
context.go('/event/${event.id}');
},
child: const Text("Create"),
),
],
);
}
}

Datei anzeigen

@ -58,6 +58,7 @@ class AddFightDialog extends HookConsumerWidget {
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
const Divider(),
const Text("Gamemode"),
const SizedBox(height: 8),
ElevatedButton(
@ -133,10 +134,11 @@ class AddFightDialog extends HookConsumerWidget {
}
},
child: Text(group.value.isEmpty ? "None" : group.value)),
const Divider(),
],
),
actions: [
ElevatedButton(
TextButton(
onPressed: () {
Navigator.of(context).pop();
},

Datei anzeigen

@ -29,6 +29,8 @@ import 'package:steamwar_multitool/src/components/date_time_editor.dart';
import 'package:steamwar_multitool/src/provider/provider.dart';
import 'package:steamwar_multitool/src/delegates/delegates.dart';
import 'package:steamwar_multitool/src/screens/event/components/dialogs/dialogs.dart';
import 'package:steamwar_multitool/src/screens/generator/bracket_generator.dart';
import 'package:steamwar_multitool/src/screens/generator/generators/group_generator.dart';
import 'package:steamwar_multitool/src/types/types.dart';
import 'package:steamwar_multitool/src/util/constants.dart';
import 'package:url_launcher/url_launcher.dart';
@ -59,7 +61,7 @@ class EventFightList extends HookConsumerWidget {
fights.value = await repo.listFights(event.id);
}
return Column(
return ListView(
children: [
const SizedBox(height: 8),
Row(
@ -82,7 +84,9 @@ class EventFightList extends HookConsumerWidget {
const SizedBox(width: 8),
FilledButton.icon(
onPressed: () {
context.go("/event/${event.id}/generator");
showDialog(
context: context,
builder: (context) => BracketGeneratorDialog(eventData));
},
label: const Text("Generate Fight"),
icon: const Icon(Icons.shuffle)),
@ -431,29 +435,10 @@ class EventFightList extends HookConsumerWidget {
itemBuilder: (context, fight) => ListTile(
title: Text(
"${fight.blueTeam.name} vs ${fight.redTeam.name}",
style: TextStyle(
color: fight
.getTeamWithContextColor(
Theme.of(context).scaffoldBackgroundColor)
.color
.computeLuminance() >
0.5
? Colors.black
: Colors.white),
),
subtitle: Text(
fight.score == 0
? kDateFormat.format(fight.start)
: "Winner: ${fight.winner.name}",
style: TextStyle(
color: fight
.getTeamWithContextColor(
Theme.of(context).scaffoldBackgroundColor)
.color
.computeLuminance() >
0.5
? Colors.black
: Colors.white)),
subtitle: Text(fight.score == 0
? kDateFormat.format(fight.start)
: "Winner: ${fight.winner.name}"),
onTap: () {
showDialog(
context: context,
@ -465,8 +450,6 @@ class EventFightList extends HookConsumerWidget {
);
});
},
tileColor:
fight.score != 0 ? fight.winner.color.withOpacity(0.5) : null,
leading: Checkbox(
value: selected.value.contains(fight.id),
onChanged: (value) {

Datei anzeigen

@ -27,6 +27,7 @@ import 'package:steamwar_multitool/src/components/components.dart';
import 'package:steamwar_multitool/src/components/date_time_editor.dart';
import 'package:steamwar_multitool/src/provider/provider.dart';
import 'package:steamwar_multitool/src/screens/event/components/fight_list.dart';
import 'package:steamwar_multitool/src/screens/event/components/team_list.dart';
import 'package:steamwar_multitool/src/screens/event/event.dart';
import 'package:steamwar_multitool/src/delegates/delegates.dart';
import 'package:steamwar_multitool/src/types/types.dart';
@ -52,6 +53,7 @@ class LoadedEventScreen extends HookConsumerWidget {
final schematicTypeState = useState<SchematicType?>(null);
final publicOnlyState = useState(event.publicSchemsOnly);
final spectateSystemState = useState(event.spectateSystem);
final tabController = useTabController(initialLength: 3);
useMemoized(() {
ref.read(schematicTypesProvider.future).then((value) {
@ -152,141 +154,170 @@ class LoadedEventScreen extends HookConsumerWidget {
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: ListView(
child: Column(
children: [
const SizedBox(height: 8),
TextField(
controller: nameController,
decoration: const InputDecoration(
labelText: "Name",
border: OutlineInputBorder(),
TabBar(
tabs: const [
Tab(child: Text("General")),
Tab(child: Text("Teams")),
Tab(child: Text("Fights"))
],
controller: tabController,
),
Expanded(
child: TabBarView(
controller: tabController,
children: [
ListView(
shrinkWrap: true,
children: [
const SizedBox(height: 8),
TextField(
controller: nameController,
decoration: const InputDecoration(
labelText: "Name",
border: OutlineInputBorder(),
),
onChanged: (value) {
changed.value = true;
},
),
const SizedBox(height: 8),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text("Deadline: "),
DateTimeEditor((p0) {
deadlineState.value = p0;
changed.value = true;
}, deadlineState.value, true),
],
),
const SizedBox(height: 8),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text("Start: "),
DateTimeEditor((p0) {
startDateState.value = p0;
changed.value = true;
}, startDateState.value, true),
],
),
const SizedBox(height: 8),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text("End: "),
DateTimeEditor((p0) {
endDateState.value = p0;
changed.value = true;
}, endDateState.value, true),
],
),
const SizedBox(height: 8),
Row(
children: [
SizedBox(
width: 150,
child: TextField(
controller: maxTeamMembersController,
decoration: InputDecoration(
labelText: "Max Team Members",
border: const OutlineInputBorder(),
errorText: invalidMaxTeamMembers.value
? "Must be a number above 0"
: null),
keyboardType: TextInputType.number,
onChanged: (value) {
if (value.isEmpty ||
int.tryParse(value) == null ||
int.parse(value) <= 0) {
invalidMaxTeamMembers.value = true;
} else {
invalidMaxTeamMembers.value = false;
maxTeamMembersState.value = int.parse(value);
changed.value = true;
}
},
),
),
Expanded(
child: Slider(
value: maxTeamMembersState.value.toDouble(),
onChanged: (p0) {
maxTeamMembersState.value = p0.toInt();
maxTeamMembersController.text =
p0.toInt().toString();
changed.value = true;
},
min: min(1, maxTeamMembersState.value.toDouble()),
max:
max(30, maxTeamMembersState.value.toDouble()),
divisions:
max(30, maxTeamMembersState.value.toDouble())
.toInt() -
1,
label: maxTeamMembersState.value.toString(),
),
),
],
),
const SizedBox(height: 8),
ref.watch(schematicTypesProvider).when(
data: (data) {
return DropdownMenu(
dropdownMenuEntries: [
for (final type in data)
DropdownMenuEntry(
value: type,
label: type.name,
)
],
initialSelection: schematicTypeState.value,
enableSearch: true,
width: 300,
menuHeight: 300,
label: const Text("Schematic Type"),
onSelected: (value) {
schematicTypeState.value = value;
changed.value = true;
},
enableFilter: true,
);
},
error: (err, stk) {
return ErrorComponent(err, stk);
},
loading: () {
return LinearProgressIndicator();
},
),
const SizedBox(height: 8),
SwitchListTile(
value: publicOnlyState.value,
onChanged: (value) {
publicOnlyState.value = value;
changed.value = true;
},
title: const Text("Public Only"),
),
SwitchListTile(
value: spectateSystemState.value,
onChanged: (value) {
spectateSystemState.value = value;
changed.value = true;
},
title: const Text("Use Spectate System"),
),
],
),
TeamList(eventData.teams),
EventFightList(
eventData: eventData,
),
],
),
onChanged: (value) {
changed.value = true;
},
),
const SizedBox(height: 8),
Row(
children: [
const Text("Deadline: "),
DateTimeEditor((p0) {
deadlineState.value = p0;
changed.value = true;
}, deadlineState.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),
TextField(
controller: maxTeamMembersController,
decoration: InputDecoration(
labelText: "Max Team Members",
border: const OutlineInputBorder(),
errorText: invalidMaxTeamMembers.value
? "Must be a number above 0"
: null),
keyboardType: TextInputType.number,
onChanged: (value) {
if (value.isEmpty ||
int.tryParse(value) == null ||
int.parse(value) <= 0) {
invalidMaxTeamMembers.value = true;
} else {
invalidMaxTeamMembers.value = false;
maxTeamMembersState.value = int.parse(value);
changed.value = true;
}
},
),
Slider(
value: maxTeamMembersState.value.toDouble(),
onChanged: (p0) {
maxTeamMembersState.value = p0.toInt();
maxTeamMembersController.text = p0.toInt().toString();
changed.value = true;
},
min: min(1, maxTeamMembersState.value.toDouble()),
max: max(30, maxTeamMembersState.value.toDouble()),
divisions:
max(30, maxTeamMembersState.value.toDouble()).toInt() - 1,
label: maxTeamMembersState.value.toString(),
),
const SizedBox(height: 8),
Row(
children: [
const Text("Schematic Type: "),
TextButton(
onPressed: () async {
final types =
await ref.read(schematicTypesProvider.future);
final out = await showSearch(
context: context,
delegate: SchematicTypeSearchDelegate(types));
if (out == RESET_TYPE) {
schematicTypeState.value = null;
changed.value = true;
} else {
schematicTypeState.value =
out ?? schematicTypeState.value;
changed.value = true;
}
},
child: Text(schematicTypeState.value?.name ?? "Select")),
],
),
const SizedBox(height: 8),
CheckboxListTile(
value: publicOnlyState.value,
onChanged: (value) {
publicOnlyState.value = value ?? publicOnlyState.value;
changed.value = true;
},
title: const Text("Public Only"),
),
const SizedBox(height: 8),
CheckboxListTile(
value: spectateSystemState.value,
onChanged: (value) {
spectateSystemState.value = value ?? spectateSystemState.value;
changed.value = true;
},
title: const Text("Use Spectate System"),
),
const SizedBox(height: 8),
Text("Teams (${eventData.teams.length})",
style: Theme.of(context).textTheme.headline6),
Wrap(
children: [
for (final team in eventData.teams)
Padding(
padding: const EdgeInsets.all(8.0),
child: TeamChip(team),
)
],
),
const SizedBox(height: 8),
Text("Fights", style: Theme.of(context).textTheme.headline6),
EventFightList(
eventData: eventData,
),
],
),

Datei anzeigen

@ -0,0 +1,56 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:steamwar_multitool/src/types/types.dart';
class TeamList extends HookConsumerWidget {
final List<Team> teams;
const TeamList(
this.teams, {
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),
leading: CircleAvatar(
backgroundColor: team.color,
child: Text(
team.kuerzel,
style: TextStyle(
color: team.color.computeLuminance() > 0.4
? Colors.black
: Colors.white,
fontSize: 12,
),
),
),
);
},
itemCount: teams.length,
);
}
}

Datei anzeigen

@ -20,43 +20,57 @@
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:steamwar_multitool/src/components/components.dart';
import 'package:steamwar_multitool/src/provider/events.dart';
import 'package:steamwar_multitool/src/screens/generator/loaded_generator.dart';
import 'package:steamwar_multitool/src/screens/generator/generators/group_generator.dart';
import 'package:steamwar_multitool/src/types/types.dart';
class BracketGeneratorScreen extends HookConsumerWidget {
final int eventId;
const BracketGeneratorScreen(this.eventId, {Key? key}) : super(key: key);
class BracketGeneratorDialog extends HookConsumerWidget {
final EventExtended event;
const BracketGeneratorDialog(this.event, {Key? key}) : super(key: key);
@override
Widget build(BuildContext context, WidgetRef ref) {
final event = useMemoized(() => ref
.watch(eventRepositoryProvider.future)
.then((value) => value.getEvent(eventId)));
final selection = useState(0);
return FutureBuilder(
builder: (context, data) {
if (data.hasError) {
return Scaffold(
appBar: AppBar(
title: const Text('Error'),
),
body: ErrorComponent(data.error!, data.stackTrace));
}
if (!data.hasData) {
return Scaffold(
appBar: AppBar(
title: const Text('Loading'),
),
body: const LinearProgressIndicator());
}
final event = data.data as EventExtended;
return LoadedBracketGenerator(event);
},
future: event,
return AlertDialog(
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
Divider(),
ListTile(
title: const Text('Group Bracket'),
leading: Radio(
value: 0,
groupValue: selection.value,
onChanged: (value) {
selection.value = value as int;
},
),
),
Divider(),
],
),
title: const Text('Select Bracket Generator'),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: const Text('Cancel'),
),
FilledButton(
onPressed: () {
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) {
switch (selection.value) {
case 0:
return GroupBracketGenerator(event);
}
return const Scaffold();
}));
},
child: const Text('Next'),
),
],
);
}
}

Datei anzeigen

@ -158,9 +158,7 @@ class GroupBracketGenerator extends HookConsumerWidget {
},
),
],
leading: BackButton(
onPressed: () => context.go('/event/${event.event.id}'),
),
leading: BackButton(),
),
floatingActionButton: FloatingActionButton.extended(
icon: const Icon(Icons.check),

Datei anzeigen

@ -1,61 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:steamwar_multitool/src/screens/generator/generators/group_generator.dart';
import 'package:steamwar_multitool/src/types/event.dart';
class BracketGenerators {
String name;
Widget Function(EventExtended event) builder;
BracketGenerators(this.name, this.builder);
}
final List<BracketGenerators> bracketGenerators = [
BracketGenerators('Group Bracket', (event) => GroupBracketGenerator(event)),
];
class LoadedBracketGenerator extends HookConsumerWidget {
final EventExtended event;
const LoadedBracketGenerator(this.event, {Key? key}) : super(key: key);
@override
Widget build(BuildContext context, WidgetRef ref) {
return Scaffold(
appBar: AppBar(
title: Text('Bracket Generator'),
leading:
BackButton(onPressed: () => context.go('/event/${event.event.id}')),
),
body: ListView(
children: [
for (final generator in bracketGenerators)
ListTile(
title: Text(generator.name),
onTap: () => Navigator.of(context).push(
MaterialPageRoute(builder: (_) => generator.builder(event))),
),
],
),
);
}
}

Datei anzeigen

@ -44,7 +44,8 @@ class EventListComponent extends HookConsumerWidget {
children: [
FilledButton.icon(
onPressed: () {
showDialog(
showModalBottomSheet(
constraints: BoxConstraints(maxWidth: 500),
context: context,
builder: (context) => const CreateEventDialog());
},

Datei anzeigen

@ -5,18 +5,18 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: "0c80aeab9bc807ab10022cd3b2f4cf2ecdf231949dc1ddd9442406a003f19201"
sha256: a36ec4843dc30ea6bf652bf25e3448db6c5e8bcf4aa55f063a5d1dad216d8214
url: "https://pub.dev"
source: hosted
version: "52.0.0"
version: "58.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
sha256: cd8ee83568a77f3ae6b913a36093a1c9b1264e7cb7f834d9ddd2311dade9c1f4
sha256: cc4242565347e98424ce9945c819c192ec0838cb9d1f6aa4a97cc96becbc5b27
url: "https://pub.dev"
source: hosted
version: "5.4.0"
version: "5.10.0"
args:
dependency: transitive
description:
@ -61,18 +61,18 @@ packages:
dependency: transitive
description:
name: build_daemon
sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf"
sha256: "757153e5d9cd88253cb13f28c2fb55a537dc31fefd98137549895b5beb7c6169"
url: "https://pub.dev"
source: hosted
version: "3.1.0"
version: "3.1.1"
build_resolvers:
dependency: transitive
description:
name: build_resolvers
sha256: "7c35a3a7868626257d8aee47b51c26b9dba11eaddf3431117ed2744951416aab"
sha256: db49b8609ef8c81cca2b310618c3017c00f03a92af44c04d310b907b2d692d95
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.2.0"
build_runner:
dependency: "direct dev"
description:
@ -101,10 +101,10 @@ packages:
dependency: transitive
description:
name: built_value
sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725"
sha256: "31b7c748fd4b9adf8d25d72a4c4a59ef119f12876cf414f94f8af5131d5fa2b0"
url: "https://pub.dev"
source: hosted
version: "8.4.3"
version: "8.4.4"
characters:
dependency: transitive
description:
@ -173,10 +173,10 @@ packages:
dependency: transitive
description:
name: dart_style
sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4"
sha256: "6d691edde054969f0e0f26abb1b30834b5138b963793e56f69d3a9a4435e6352"
url: "https://pub.dev"
source: hosted
version: "2.2.4"
version: "2.3.0"
dio:
dependency: "direct main"
description:
@ -226,10 +226,10 @@ packages:
dependency: "direct main"
description:
name: flutter_hooks
sha256: "2b202559a4ed3656bbb7aae9d8b335fb0037b23acc7ae3f377d1ba0b95c21aec"
sha256: "6a126f703b89499818d73305e4ce1e3de33b4ae1c5512e3b8eab4b986f46774c"
url: "https://pub.dev"
source: hosted
version: "0.18.5+1"
version: "0.18.6"
flutter_lints:
dependency: "direct dev"
description:
@ -242,10 +242,10 @@ packages:
dependency: transitive
description:
name: flutter_riverpod
sha256: "0c997763ce06359ee4686553b74def84062e9d6929ac63f61fa02465c1f8e32c"
sha256: "812dfbb87af51e73e68ea038bcfd1c732078d6838d3388d03283db7dec0d1e5f"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
version: "2.3.4"
flutter_test:
dependency: "direct dev"
description: flutter
@ -292,10 +292,10 @@ packages:
dependency: "direct main"
description:
name: go_router
sha256: "5a0b2e0bc88a006c09d2b419004ffabecf83a74520b8852ea148f22e82634c27"
sha256: feab99a20fd248c658c923ba98f4449ca6e575c3dee9fdf07146f4f33482c6bc
url: "https://pub.dev"
source: hosted
version: "6.0.6"
version: "6.5.5"
graphs:
dependency: transitive
description:
@ -316,10 +316,10 @@ packages:
dependency: "direct main"
description:
name: hooks_riverpod
sha256: "71695b2e1dfc22a39f1f9c67b798f8f8f1521f2d0349817d13ccdd5c4cd7acba"
sha256: eceb62b7e3a18e6c2831498c3f2ea5b42c0a938c95d0c1eb1b8a7ccdd022accc
url: "https://pub.dev"
source: hosted
version: "2.1.3"
version: "2.3.4"
http_multi_server:
dependency: transitive
description:
@ -444,26 +444,26 @@ packages:
dependency: transitive
description:
name: path_provider_linux
sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379
sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1"
url: "https://pub.dev"
source: hosted
version: "2.1.7"
version: "2.1.10"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76
sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec"
url: "https://pub.dev"
source: hosted
version: "2.0.5"
version: "2.0.6"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c
sha256: f53720498d5a543f9607db4b0e997c4b5438884de25b0f73098cc2671a51b130
url: "https://pub.dev"
source: hosted
version: "2.1.3"
version: "2.1.5"
platform:
dependency: transitive
description:
@ -476,10 +476,10 @@ packages:
dependency: transitive
description:
name: plugin_platform_interface
sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a
sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
version: "2.1.4"
pool:
dependency: transitive
description:
@ -508,74 +508,74 @@ packages:
dependency: transitive
description:
name: pubspec_parse
sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a"
sha256: ec85d7d55339d85f44ec2b682a82fea340071e8978257e5a43e69f79e98ef50c
url: "https://pub.dev"
source: hosted
version: "1.2.1"
version: "1.2.2"
riverpod:
dependency: transitive
description:
name: riverpod
sha256: "0f43c64f1f79c2112c843305a879a746587fb7c1e388f1d4717737796756e2c4"
sha256: "77ab3bcd084bb19fa8717a526217787c725d7f5be938404c7839cd760fdf6ae5"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
version: "2.3.4"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
sha256: "5949029e70abe87f75cfe59d17bf5c397619c4b74a099b10116baeb34786fad9"
sha256: "858aaa72d8f61637d64e776aca82e1c67e6d9ee07979123c5d17115031c1b13b"
url: "https://pub.dev"
source: hosted
version: "2.0.17"
version: "2.1.0"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
sha256: "955e9736a12ba776bdd261cf030232b30eadfcd9c79b32a3250dd4a494e8c8f7"
sha256: "8304d8a1f7d21a429f91dee552792249362b68a331ac5c3c1caf370f658873f6"
url: "https://pub.dev"
source: hosted
version: "2.0.15"
version: "2.1.0"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
sha256: "2b55c18636a4edc529fa5cd44c03d3f3100c00513f518c5127c951978efcccd0"
sha256: cf2a42fb20148502022861f71698db12d937c7459345a1bdaa88fc91a91b3603
url: "https://pub.dev"
source: hosted
version: "2.1.3"
version: "2.2.0"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
sha256: f8ea038aa6da37090093974ebdcf4397010605fd2ff65c37a66f9d28394cb874
sha256: "9d387433ca65717bbf1be88f4d5bb18f10508917a8fa2fb02e0fd0d7479a9afa"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
version: "2.2.0"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
sha256: da9431745ede5ece47bc26d5d73a9d3c6936ef6945c101a5aca46f62e52c1cf3
sha256: fb5cf25c0235df2d0640ac1b1174f6466bd311f621574997ac59018a6664548d
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.2.0"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
sha256: a4b5bc37fe1b368bbc81f953197d55e12f49d0296e7e412dfe2d2d77d6929958
sha256: "74083203a8eae241e0de4a0d597dbedab3b8fef5563f33cf3c12d7e93c655ca5"
url: "https://pub.dev"
source: hosted
version: "2.0.4"
version: "2.1.0"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
sha256: "5eaf05ae77658d3521d0e993ede1af962d4b326cd2153d312df716dc250f00c9"
sha256: "5e588e2efef56916a3b229c3bfe81e6a525665a454519ca51dbcc4236a274173"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
version: "2.2.0"
shelf:
dependency: transitive
description:
@ -697,66 +697,66 @@ packages:
dependency: "direct main"
description:
name: url_launcher
sha256: e8f2efc804810c0f2f5b485f49e7942179f56eabcfe81dce3387fec4bb55876b
sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e"
url: "https://pub.dev"
source: hosted
version: "6.1.9"
version: "6.1.10"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
sha256: "3e2f6dfd2c7d9cd123296cab8ef66cfc2c1a13f5845f42c7a0f365690a8a7dd1"
sha256: dd729390aa936bf1bdf5cd1bc7468ff340263f80a2c4f569416507667de8e3c8
url: "https://pub.dev"
source: hosted
version: "6.0.23"
version: "6.0.26"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
sha256: "0a5af0aefdd8cf820dd739886efb1637f1f24489900204f50984634c07a54815"
sha256: "3dedc66ca3c0bef9e6a93c0999aee102556a450afcc1b7bcfeace7a424927d92"
url: "https://pub.dev"
source: hosted
version: "6.1.0"
version: "6.1.3"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
sha256: "318c42cba924e18180c029be69caf0a1a710191b9ec49bb42b5998fdcccee3cc"
sha256: "206fb8334a700ef7754d6a9ed119e7349bc830448098f21a69bf1b4ed038cabc"
url: "https://pub.dev"
source: hosted
version: "3.0.2"
version: "3.0.4"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
sha256: "41988b55570df53b3dd2a7fc90c76756a963de6a8c5f8e113330cb35992e2094"
sha256: "0ef2b4f97942a16523e51256b799e9aa1843da6c60c55eefbfa9dbc2dcb8331a"
url: "https://pub.dev"
source: hosted
version: "3.0.2"
version: "3.0.4"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
sha256: "4eae912628763eb48fc214522e58e942fd16ce195407dbf45638239523c759a6"
sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
version: "2.1.2"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
sha256: "44d79408ce9f07052095ef1f9a693c258d6373dc3944249374e30eff7219ccb0"
sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa"
url: "https://pub.dev"
source: hosted
version: "2.0.14"
version: "2.0.16"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
sha256: b6217370f8eb1fd85c8890c539f5a639a01ab209a36db82c921ebeacefc7a615
sha256: a83ba3607a507758669cfafb03f9de09bf6e6280c14d9b9cb18f013e406dcacd
url: "https://pub.dev"
source: hosted
version: "3.0.3"
version: "3.0.5"
vector_math:
dependency: transitive
description:
@ -793,10 +793,10 @@ packages:
dependency: transitive
description:
name: xdg_directories
sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86
sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1
url: "https://pub.dev"
source: hosted
version: "0.2.0+3"
version: "1.0.0"
yaml:
dependency: transitive
description: