Some Improvements
Dieser Commit ist enthalten in:
Ursprung
9dfdd65bf0
Commit
4c54b65b5c
@ -46,16 +46,6 @@ final _routes = GoRouter(
|
|||||||
}
|
}
|
||||||
return EditEventScreen(eventId);
|
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(
|
GoRoute(
|
||||||
path: "/display/:eventId",
|
path: "/display/:eventId",
|
||||||
builder: (context, state) {
|
builder: (context, state) {
|
||||||
|
@ -32,10 +32,9 @@ class DateTimeEditor extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
return Row(
|
return Wrap(
|
||||||
mainAxisAlignment: mainAxisAlignment,
|
|
||||||
children: [
|
children: [
|
||||||
TextButton(
|
FilledButton.tonalIcon(
|
||||||
onPressed: enabled
|
onPressed: enabled
|
||||||
? () async {
|
? () async {
|
||||||
final date = await showDatePicker(
|
final date = await showDatePicker(
|
||||||
@ -49,36 +48,40 @@ class DateTimeEditor extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
: null,
|
: null,
|
||||||
child: Text(kDateFormat.format(initialDate)),
|
icon: const Icon(Icons.calendar_today),
|
||||||
|
label: Text(kOnlyDateFormat.format(initialDate)),
|
||||||
),
|
),
|
||||||
IconButton(
|
const SizedBox(width: 8),
|
||||||
onPressed: enabled
|
FilledButton.tonalIcon(
|
||||||
? () async {
|
onPressed: enabled
|
||||||
final time = await showTimePicker(
|
? () async {
|
||||||
builder: (context, child) {
|
final time = await showTimePicker(
|
||||||
return MediaQuery(
|
builder: (context, child) {
|
||||||
data: MediaQuery.of(context).copyWith(
|
return MediaQuery(
|
||||||
alwaysUse24HourFormat: true,
|
data: MediaQuery.of(context).copyWith(
|
||||||
),
|
alwaysUse24HourFormat: true,
|
||||||
child: child!,
|
),
|
||||||
);
|
child: child!,
|
||||||
},
|
);
|
||||||
context: context,
|
},
|
||||||
initialTime: TimeOfDay(
|
context: context,
|
||||||
hour: initialDate.hour, minute: initialDate.minute),
|
initialTime: TimeOfDay(
|
||||||
);
|
hour: initialDate.hour, minute: initialDate.minute),
|
||||||
if (time != null) {
|
);
|
||||||
final changed = DateTime(
|
if (time != null) {
|
||||||
initialDate.year,
|
final changed = DateTime(
|
||||||
initialDate.month,
|
initialDate.year,
|
||||||
initialDate.day,
|
initialDate.month,
|
||||||
time.hour,
|
initialDate.day,
|
||||||
time.minute);
|
time.hour,
|
||||||
onChanged(changed);
|
time.minute);
|
||||||
}
|
onChanged(changed);
|
||||||
}
|
}
|
||||||
: null,
|
}
|
||||||
icon: const Icon(Icons.schedule)),
|
: null,
|
||||||
|
icon: const Icon(Icons.schedule),
|
||||||
|
label: Text(kTimeFormat.format(initialDate)),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -36,15 +36,18 @@ class CreateEventDialog extends HookConsumerWidget {
|
|||||||
final startTime = useState(DateTime.now());
|
final startTime = useState(DateTime.now());
|
||||||
final endTime = useState(DateTime.now().add(const Duration(hours: 1)));
|
final endTime = useState(DateTime.now().add(const Duration(hours: 1)));
|
||||||
|
|
||||||
return AlertDialog(
|
return Padding(
|
||||||
title: const Text('Create Event'),
|
padding: const EdgeInsets.all(8.0),
|
||||||
content: Column(
|
child: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
|
SizedBox(height: 20),
|
||||||
TextField(
|
TextField(
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
labelText: "Event Name",
|
labelText: "Event Name",
|
||||||
errorText: eventExists.value ? "Event already exists" : null,
|
errorText: eventExists.value ? "Event already exists" : null,
|
||||||
|
border: const OutlineInputBorder(),
|
||||||
|
constraints: const BoxConstraints(maxWidth: 300),
|
||||||
),
|
),
|
||||||
controller: eventName,
|
controller: eventName,
|
||||||
onChanged: (value) {
|
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(
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
const Text("Start: "),
|
TextButton(
|
||||||
DateTimeEditor((p0) {
|
onPressed: () {
|
||||||
startTime.value = p0;
|
Navigator.of(context).pop();
|
||||||
}, startTime.value, true),
|
},
|
||||||
|
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"),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,6 +58,7 @@ class AddFightDialog extends HookConsumerWidget {
|
|||||||
content: Column(
|
content: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
|
const Divider(),
|
||||||
const Text("Gamemode"),
|
const Text("Gamemode"),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
ElevatedButton(
|
ElevatedButton(
|
||||||
@ -133,10 +134,11 @@ class AddFightDialog extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: Text(group.value.isEmpty ? "None" : group.value)),
|
child: Text(group.value.isEmpty ? "None" : group.value)),
|
||||||
|
const Divider(),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
actions: [
|
actions: [
|
||||||
ElevatedButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
},
|
},
|
||||||
|
@ -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/provider/provider.dart';
|
||||||
import 'package:steamwar_multitool/src/delegates/delegates.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/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/types/types.dart';
|
||||||
import 'package:steamwar_multitool/src/util/constants.dart';
|
import 'package:steamwar_multitool/src/util/constants.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
@ -59,7 +61,7 @@ class EventFightList extends HookConsumerWidget {
|
|||||||
fights.value = await repo.listFights(event.id);
|
fights.value = await repo.listFights(event.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Column(
|
return ListView(
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Row(
|
Row(
|
||||||
@ -82,7 +84,9 @@ class EventFightList extends HookConsumerWidget {
|
|||||||
const SizedBox(width: 8),
|
const SizedBox(width: 8),
|
||||||
FilledButton.icon(
|
FilledButton.icon(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
context.go("/event/${event.id}/generator");
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) => BracketGeneratorDialog(eventData));
|
||||||
},
|
},
|
||||||
label: const Text("Generate Fight"),
|
label: const Text("Generate Fight"),
|
||||||
icon: const Icon(Icons.shuffle)),
|
icon: const Icon(Icons.shuffle)),
|
||||||
@ -431,29 +435,10 @@ class EventFightList extends HookConsumerWidget {
|
|||||||
itemBuilder: (context, fight) => ListTile(
|
itemBuilder: (context, fight) => ListTile(
|
||||||
title: Text(
|
title: Text(
|
||||||
"${fight.blueTeam.name} vs ${fight.redTeam.name}",
|
"${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(
|
subtitle: Text(fight.score == 0
|
||||||
fight.score == 0
|
? kDateFormat.format(fight.start)
|
||||||
? kDateFormat.format(fight.start)
|
: "Winner: ${fight.winner.name}"),
|
||||||
: "Winner: ${fight.winner.name}",
|
|
||||||
style: TextStyle(
|
|
||||||
color: fight
|
|
||||||
.getTeamWithContextColor(
|
|
||||||
Theme.of(context).scaffoldBackgroundColor)
|
|
||||||
.color
|
|
||||||
.computeLuminance() >
|
|
||||||
0.5
|
|
||||||
? Colors.black
|
|
||||||
: Colors.white)),
|
|
||||||
onTap: () {
|
onTap: () {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
@ -465,8 +450,6 @@ class EventFightList extends HookConsumerWidget {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
tileColor:
|
|
||||||
fight.score != 0 ? fight.winner.color.withOpacity(0.5) : null,
|
|
||||||
leading: Checkbox(
|
leading: Checkbox(
|
||||||
value: selected.value.contains(fight.id),
|
value: selected.value.contains(fight.id),
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
|
@ -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/components/date_time_editor.dart';
|
||||||
import 'package:steamwar_multitool/src/provider/provider.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/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/screens/event/event.dart';
|
||||||
import 'package:steamwar_multitool/src/delegates/delegates.dart';
|
import 'package:steamwar_multitool/src/delegates/delegates.dart';
|
||||||
import 'package:steamwar_multitool/src/types/types.dart';
|
import 'package:steamwar_multitool/src/types/types.dart';
|
||||||
@ -52,6 +53,7 @@ class LoadedEventScreen extends HookConsumerWidget {
|
|||||||
final schematicTypeState = useState<SchematicType?>(null);
|
final schematicTypeState = useState<SchematicType?>(null);
|
||||||
final publicOnlyState = useState(event.publicSchemsOnly);
|
final publicOnlyState = useState(event.publicSchemsOnly);
|
||||||
final spectateSystemState = useState(event.spectateSystem);
|
final spectateSystemState = useState(event.spectateSystem);
|
||||||
|
final tabController = useTabController(initialLength: 3);
|
||||||
|
|
||||||
useMemoized(() {
|
useMemoized(() {
|
||||||
ref.read(schematicTypesProvider.future).then((value) {
|
ref.read(schematicTypesProvider.future).then((value) {
|
||||||
@ -152,141 +154,170 @@ class LoadedEventScreen extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
body: Padding(
|
body: Padding(
|
||||||
padding: const EdgeInsets.all(8.0),
|
padding: const EdgeInsets.all(8.0),
|
||||||
child: ListView(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 8),
|
TabBar(
|
||||||
TextField(
|
tabs: const [
|
||||||
controller: nameController,
|
Tab(child: Text("General")),
|
||||||
decoration: const InputDecoration(
|
Tab(child: Text("Teams")),
|
||||||
labelText: "Name",
|
Tab(child: Text("Fights"))
|
||||||
border: OutlineInputBorder(),
|
],
|
||||||
|
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,
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
56
lib/src/screens/event/components/team_list.dart
Normale Datei
56
lib/src/screens/event/components/team_list.dart
Normale Datei
@ -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,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -20,43 +20,57 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:steamwar_multitool/src/components/components.dart';
|
import 'package:steamwar_multitool/src/screens/generator/generators/group_generator.dart';
|
||||||
import 'package:steamwar_multitool/src/provider/events.dart';
|
|
||||||
import 'package:steamwar_multitool/src/screens/generator/loaded_generator.dart';
|
|
||||||
import 'package:steamwar_multitool/src/types/types.dart';
|
import 'package:steamwar_multitool/src/types/types.dart';
|
||||||
|
|
||||||
class BracketGeneratorScreen extends HookConsumerWidget {
|
class BracketGeneratorDialog extends HookConsumerWidget {
|
||||||
final int eventId;
|
final EventExtended event;
|
||||||
const BracketGeneratorScreen(this.eventId, {Key? key}) : super(key: key);
|
const BracketGeneratorDialog(this.event, {Key? key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final event = useMemoized(() => ref
|
final selection = useState(0);
|
||||||
.watch(eventRepositoryProvider.future)
|
|
||||||
.then((value) => value.getEvent(eventId)));
|
|
||||||
|
|
||||||
return FutureBuilder(
|
return AlertDialog(
|
||||||
builder: (context, data) {
|
content: Column(
|
||||||
if (data.hasError) {
|
mainAxisSize: MainAxisSize.min,
|
||||||
return Scaffold(
|
children: [
|
||||||
appBar: AppBar(
|
Divider(),
|
||||||
title: const Text('Error'),
|
ListTile(
|
||||||
),
|
title: const Text('Group Bracket'),
|
||||||
body: ErrorComponent(data.error!, data.stackTrace));
|
leading: Radio(
|
||||||
}
|
value: 0,
|
||||||
|
groupValue: selection.value,
|
||||||
if (!data.hasData) {
|
onChanged: (value) {
|
||||||
return Scaffold(
|
selection.value = value as int;
|
||||||
appBar: AppBar(
|
},
|
||||||
title: const Text('Loading'),
|
),
|
||||||
),
|
),
|
||||||
body: const LinearProgressIndicator());
|
Divider(),
|
||||||
}
|
],
|
||||||
|
),
|
||||||
final event = data.data as EventExtended;
|
title: const Text('Select Bracket Generator'),
|
||||||
return LoadedBracketGenerator(event);
|
actions: [
|
||||||
},
|
TextButton(
|
||||||
future: event,
|
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'),
|
||||||
|
),
|
||||||
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -158,9 +158,7 @@ class GroupBracketGenerator extends HookConsumerWidget {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
leading: BackButton(
|
leading: BackButton(),
|
||||||
onPressed: () => context.go('/event/${event.event.id}'),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
floatingActionButton: FloatingActionButton.extended(
|
floatingActionButton: FloatingActionButton.extended(
|
||||||
icon: const Icon(Icons.check),
|
icon: const Icon(Icons.check),
|
||||||
|
@ -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))),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
@ -44,7 +44,8 @@ class EventListComponent extends HookConsumerWidget {
|
|||||||
children: [
|
children: [
|
||||||
FilledButton.icon(
|
FilledButton.icon(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
showDialog(
|
showModalBottomSheet(
|
||||||
|
constraints: BoxConstraints(maxWidth: 500),
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => const CreateEventDialog());
|
builder: (context) => const CreateEventDialog());
|
||||||
},
|
},
|
||||||
|
128
pubspec.lock
128
pubspec.lock
@ -5,18 +5,18 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: _fe_analyzer_shared
|
name: _fe_analyzer_shared
|
||||||
sha256: "0c80aeab9bc807ab10022cd3b2f4cf2ecdf231949dc1ddd9442406a003f19201"
|
sha256: a36ec4843dc30ea6bf652bf25e3448db6c5e8bcf4aa55f063a5d1dad216d8214
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "52.0.0"
|
version: "58.0.0"
|
||||||
analyzer:
|
analyzer:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: analyzer
|
name: analyzer
|
||||||
sha256: cd8ee83568a77f3ae6b913a36093a1c9b1264e7cb7f834d9ddd2311dade9c1f4
|
sha256: cc4242565347e98424ce9945c819c192ec0838cb9d1f6aa4a97cc96becbc5b27
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.4.0"
|
version: "5.10.0"
|
||||||
args:
|
args:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -61,18 +61,18 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: build_daemon
|
name: build_daemon
|
||||||
sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf"
|
sha256: "757153e5d9cd88253cb13f28c2fb55a537dc31fefd98137549895b5beb7c6169"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.0"
|
version: "3.1.1"
|
||||||
build_resolvers:
|
build_resolvers:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: build_resolvers
|
name: build_resolvers
|
||||||
sha256: "7c35a3a7868626257d8aee47b51c26b9dba11eaddf3431117ed2744951416aab"
|
sha256: db49b8609ef8c81cca2b310618c3017c00f03a92af44c04d310b907b2d692d95
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.2.0"
|
||||||
build_runner:
|
build_runner:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
@ -101,10 +101,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: built_value
|
name: built_value
|
||||||
sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725"
|
sha256: "31b7c748fd4b9adf8d25d72a4c4a59ef119f12876cf414f94f8af5131d5fa2b0"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "8.4.3"
|
version: "8.4.4"
|
||||||
characters:
|
characters:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -173,10 +173,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: dart_style
|
name: dart_style
|
||||||
sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4"
|
sha256: "6d691edde054969f0e0f26abb1b30834b5138b963793e56f69d3a9a4435e6352"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.4"
|
version: "2.3.0"
|
||||||
dio:
|
dio:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -226,10 +226,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_hooks
|
name: flutter_hooks
|
||||||
sha256: "2b202559a4ed3656bbb7aae9d8b335fb0037b23acc7ae3f377d1ba0b95c21aec"
|
sha256: "6a126f703b89499818d73305e4ce1e3de33b4ae1c5512e3b8eab4b986f46774c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.18.5+1"
|
version: "0.18.6"
|
||||||
flutter_lints:
|
flutter_lints:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
@ -242,10 +242,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_riverpod
|
name: flutter_riverpod
|
||||||
sha256: "0c997763ce06359ee4686553b74def84062e9d6929ac63f61fa02465c1f8e32c"
|
sha256: "812dfbb87af51e73e68ea038bcfd1c732078d6838d3388d03283db7dec0d1e5f"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.3"
|
version: "2.3.4"
|
||||||
flutter_test:
|
flutter_test:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -292,10 +292,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: go_router
|
name: go_router
|
||||||
sha256: "5a0b2e0bc88a006c09d2b419004ffabecf83a74520b8852ea148f22e82634c27"
|
sha256: feab99a20fd248c658c923ba98f4449ca6e575c3dee9fdf07146f4f33482c6bc
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.6"
|
version: "6.5.5"
|
||||||
graphs:
|
graphs:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -316,10 +316,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: hooks_riverpod
|
name: hooks_riverpod
|
||||||
sha256: "71695b2e1dfc22a39f1f9c67b798f8f8f1521f2d0349817d13ccdd5c4cd7acba"
|
sha256: eceb62b7e3a18e6c2831498c3f2ea5b42c0a938c95d0c1eb1b8a7ccdd022accc
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.3"
|
version: "2.3.4"
|
||||||
http_multi_server:
|
http_multi_server:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -444,26 +444,26 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_linux
|
name: path_provider_linux
|
||||||
sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379
|
sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.7"
|
version: "2.1.10"
|
||||||
path_provider_platform_interface:
|
path_provider_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_platform_interface
|
name: path_provider_platform_interface
|
||||||
sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76
|
sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.5"
|
version: "2.0.6"
|
||||||
path_provider_windows:
|
path_provider_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_windows
|
name: path_provider_windows
|
||||||
sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c
|
sha256: f53720498d5a543f9607db4b0e997c4b5438884de25b0f73098cc2671a51b130
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.3"
|
version: "2.1.5"
|
||||||
platform:
|
platform:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -476,10 +476,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: plugin_platform_interface
|
name: plugin_platform_interface
|
||||||
sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a
|
sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.3"
|
version: "2.1.4"
|
||||||
pool:
|
pool:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -508,74 +508,74 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: pubspec_parse
|
name: pubspec_parse
|
||||||
sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a"
|
sha256: ec85d7d55339d85f44ec2b682a82fea340071e8978257e5a43e69f79e98ef50c
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.1"
|
version: "1.2.2"
|
||||||
riverpod:
|
riverpod:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: riverpod
|
name: riverpod
|
||||||
sha256: "0f43c64f1f79c2112c843305a879a746587fb7c1e388f1d4717737796756e2c4"
|
sha256: "77ab3bcd084bb19fa8717a526217787c725d7f5be938404c7839cd760fdf6ae5"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.3"
|
version: "2.3.4"
|
||||||
shared_preferences:
|
shared_preferences:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: shared_preferences
|
name: shared_preferences
|
||||||
sha256: "5949029e70abe87f75cfe59d17bf5c397619c4b74a099b10116baeb34786fad9"
|
sha256: "858aaa72d8f61637d64e776aca82e1c67e6d9ee07979123c5d17115031c1b13b"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.17"
|
version: "2.1.0"
|
||||||
shared_preferences_android:
|
shared_preferences_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: shared_preferences_android
|
name: shared_preferences_android
|
||||||
sha256: "955e9736a12ba776bdd261cf030232b30eadfcd9c79b32a3250dd4a494e8c8f7"
|
sha256: "8304d8a1f7d21a429f91dee552792249362b68a331ac5c3c1caf370f658873f6"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.15"
|
version: "2.1.0"
|
||||||
shared_preferences_foundation:
|
shared_preferences_foundation:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: shared_preferences_foundation
|
name: shared_preferences_foundation
|
||||||
sha256: "2b55c18636a4edc529fa5cd44c03d3f3100c00513f518c5127c951978efcccd0"
|
sha256: cf2a42fb20148502022861f71698db12d937c7459345a1bdaa88fc91a91b3603
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.3"
|
version: "2.2.0"
|
||||||
shared_preferences_linux:
|
shared_preferences_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: shared_preferences_linux
|
name: shared_preferences_linux
|
||||||
sha256: f8ea038aa6da37090093974ebdcf4397010605fd2ff65c37a66f9d28394cb874
|
sha256: "9d387433ca65717bbf1be88f4d5bb18f10508917a8fa2fb02e0fd0d7479a9afa"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.3"
|
version: "2.2.0"
|
||||||
shared_preferences_platform_interface:
|
shared_preferences_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: shared_preferences_platform_interface
|
name: shared_preferences_platform_interface
|
||||||
sha256: da9431745ede5ece47bc26d5d73a9d3c6936ef6945c101a5aca46f62e52c1cf3
|
sha256: fb5cf25c0235df2d0640ac1b1174f6466bd311f621574997ac59018a6664548d
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.2.0"
|
||||||
shared_preferences_web:
|
shared_preferences_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: shared_preferences_web
|
name: shared_preferences_web
|
||||||
sha256: a4b5bc37fe1b368bbc81f953197d55e12f49d0296e7e412dfe2d2d77d6929958
|
sha256: "74083203a8eae241e0de4a0d597dbedab3b8fef5563f33cf3c12d7e93c655ca5"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.4"
|
version: "2.1.0"
|
||||||
shared_preferences_windows:
|
shared_preferences_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: shared_preferences_windows
|
name: shared_preferences_windows
|
||||||
sha256: "5eaf05ae77658d3521d0e993ede1af962d4b326cd2153d312df716dc250f00c9"
|
sha256: "5e588e2efef56916a3b229c3bfe81e6a525665a454519ca51dbcc4236a274173"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.3"
|
version: "2.2.0"
|
||||||
shelf:
|
shelf:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -697,66 +697,66 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: url_launcher
|
name: url_launcher
|
||||||
sha256: e8f2efc804810c0f2f5b485f49e7942179f56eabcfe81dce3387fec4bb55876b
|
sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.9"
|
version: "6.1.10"
|
||||||
url_launcher_android:
|
url_launcher_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_android
|
name: url_launcher_android
|
||||||
sha256: "3e2f6dfd2c7d9cd123296cab8ef66cfc2c1a13f5845f42c7a0f365690a8a7dd1"
|
sha256: dd729390aa936bf1bdf5cd1bc7468ff340263f80a2c4f569416507667de8e3c8
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.23"
|
version: "6.0.26"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_ios
|
name: url_launcher_ios
|
||||||
sha256: "0a5af0aefdd8cf820dd739886efb1637f1f24489900204f50984634c07a54815"
|
sha256: "3dedc66ca3c0bef9e6a93c0999aee102556a450afcc1b7bcfeace7a424927d92"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.0"
|
version: "6.1.3"
|
||||||
url_launcher_linux:
|
url_launcher_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_linux
|
name: url_launcher_linux
|
||||||
sha256: "318c42cba924e18180c029be69caf0a1a710191b9ec49bb42b5998fdcccee3cc"
|
sha256: "206fb8334a700ef7754d6a9ed119e7349bc830448098f21a69bf1b4ed038cabc"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.2"
|
version: "3.0.4"
|
||||||
url_launcher_macos:
|
url_launcher_macos:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_macos
|
name: url_launcher_macos
|
||||||
sha256: "41988b55570df53b3dd2a7fc90c76756a963de6a8c5f8e113330cb35992e2094"
|
sha256: "0ef2b4f97942a16523e51256b799e9aa1843da6c60c55eefbfa9dbc2dcb8331a"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.2"
|
version: "3.0.4"
|
||||||
url_launcher_platform_interface:
|
url_launcher_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_platform_interface
|
name: url_launcher_platform_interface
|
||||||
sha256: "4eae912628763eb48fc214522e58e942fd16ce195407dbf45638239523c759a6"
|
sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.1.2"
|
||||||
url_launcher_web:
|
url_launcher_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_web
|
name: url_launcher_web
|
||||||
sha256: "44d79408ce9f07052095ef1f9a693c258d6373dc3944249374e30eff7219ccb0"
|
sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.14"
|
version: "2.0.16"
|
||||||
url_launcher_windows:
|
url_launcher_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_windows
|
name: url_launcher_windows
|
||||||
sha256: b6217370f8eb1fd85c8890c539f5a639a01ab209a36db82c921ebeacefc7a615
|
sha256: a83ba3607a507758669cfafb03f9de09bf6e6280c14d9b9cb18f013e406dcacd
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.3"
|
version: "3.0.5"
|
||||||
vector_math:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -793,10 +793,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: xdg_directories
|
name: xdg_directories
|
||||||
sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86
|
sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.2.0+3"
|
version: "1.0.0"
|
||||||
yaml:
|
yaml:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren