Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions lib/src/model/common/time_increment.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ class TimeIncrement implements Comparable<TimeIncrement> {
increment = increment.inSeconds,
assert(time >= Duration.zero && increment >= Duration.zero);

const TimeIncrement.infinite() : time = 0, increment = 0;

TimeIncrement.blitzDefault()
: time = const Duration(minutes: 5).inSeconds,
increment = const Duration(seconds: 3).inSeconds;

/// Clock initial time in seconds
final int time;

Expand Down
4 changes: 1 addition & 3 deletions lib/src/model/over_the_board/over_the_board_clock.dart
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,7 @@ class OverTheBoardClock extends _$OverTheBoardClock {
}
});

return OverTheBoardClockState.fromTimeIncrement(
TimeIncrement(const Duration(minutes: 5).inSeconds, const Duration(seconds: 3).inSeconds),
);
return OverTheBoardClockState.fromTimeIncrement(TimeIncrement.blitzDefault());
}

void setupClock(TimeIncrement timeIncrement) {
Expand Down
98 changes: 63 additions & 35 deletions lib/src/view/over_the_board/configure_over_the_board_game.dart
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,16 @@ class _ConfigureOverTheBoardGameSheetState extends ConsumerState<_ConfigureOverT
});
}

void _toggleInfiniteTime(bool isInfinite) {
setState(() {
if (isInfinite) {
timeIncrement = TimeIncrement.blitzDefault();
} else {
timeIncrement = const TimeIncrement.infinite();
}
});
}

@override
Widget build(BuildContext context) {
return BottomSheetScrollableContainer(
Expand All @@ -86,44 +96,62 @@ class _ConfigureOverTheBoardGameSheetState extends ConsumerState<_ConfigureOverT
);
},
),
ListTile(
title: Text.rich(
TextSpan(
text: '${context.l10n.minutesPerSide}: ',
children: [
TextSpan(
style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
text: clockLabelInMinutes(timeIncrement.time),
AnimatedCrossFade(
duration: const Duration(milliseconds: 400),
firstChild: const SizedBox.shrink(),
secondChild: Column(
children: [
ListTile(
title: Text.rich(
TextSpan(
text: '${context.l10n.minutesPerSide}: ',
children: [
TextSpan(
style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
text: clockLabelInMinutes(timeIncrement.time),
),
],
),
),
],
),
),
subtitle: NonLinearSlider(
value: timeIncrement.time,
values: kAvailableTimesInSeconds,
labelBuilder: clockLabelInMinutes,
onChange: _setTotalTime,
onChangeEnd: _setTotalTime,
),
),
ListTile(
title: Text.rich(
TextSpan(
text: '${context.l10n.incrementInSeconds}: ',
children: [
TextSpan(
style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
text: timeIncrement.increment.toString(),
subtitle: NonLinearSlider(
value: timeIncrement.time,
values: kAvailableTimesInSeconds,
labelBuilder: clockLabelInMinutes,
onChange: _setTotalTime,
onChangeEnd: _setTotalTime,
),
],
),
),
subtitle: NonLinearSlider(
value: timeIncrement.increment,
values: kAvailableIncrementsInSeconds,
onChange: _setIncrement,
onChangeEnd: _setIncrement,
),
ListTile(
title: Text.rich(
TextSpan(
text: '${context.l10n.incrementInSeconds}: ',
children: [
TextSpan(
style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
text: timeIncrement.increment.toString(),
),
],
),
),
subtitle: NonLinearSlider(
value: timeIncrement.increment,
values: kAvailableIncrementsInSeconds,
onChange: _setIncrement,
onChangeEnd: _setIncrement,
),
),
],
),
crossFadeState: timeIncrement.isInfinite
? CrossFadeState.showFirst
: CrossFadeState.showSecond,
),
SwitchSettingTile(
title: Text(context.l10n.unlimited),
value: timeIncrement.isInfinite,
onChanged: (value) {
_toggleInfiniteTime(timeIncrement.isInfinite);
},
),
],
),
Expand Down