Skip to content

Commit

Permalink
select player sheet changes
Browse files Browse the repository at this point in the history
  • Loading branch information
cp-sidhdhi-p committed Mar 13, 2024
1 parent c9ca341 commit 71ff568
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 70 deletions.
2 changes: 1 addition & 1 deletion khelo/android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ android {
applicationId "com.example.khelo"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion flutter.minSdkVersion
minSdkVersion 21
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
Expand Down
56 changes: 33 additions & 23 deletions khelo/lib/ui/flow/score_board/components/select_player_sheet.dart
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ class _SelectPlayerSheetState extends ConsumerState<SelectPlayerSheet> {
}

Widget _body(BuildContext context, ScoreBoardViewState state) {
if (widget.type == PlayerSelectionType.all) {
if (widget.type == PlayerSelectionType.all ||
widget.type == PlayerSelectionType.batsManAndBowler) {
return _allPlayerSelectionView(context, state);
}
return _specificPlayerSelectionView(context, state);
Expand Down Expand Up @@ -103,25 +104,32 @@ class _SelectPlayerSheetState extends ConsumerState<SelectPlayerSheet> {
const SizedBox(
height: 16,
),
_userCell(
context: context,
user: batsMan2?.player,
onTap: () async {
final player = await SelectPlayerSheet.show<
List<({List<MatchPlayer> players, String teamId})>>(
context,
type: PlayerSelectionType.batsMan,
excludedIds: [
batsMan1?.player.id ?? "INVALID ID",
batsMan2?.player.id ?? "INVALID ID"
]);
if (player != null && context.mounted) {
setState(() {
batsMan2 = player.first.players.first;
});
}
},
),
if (widget.type == PlayerSelectionType.all) ...[
_userCell(
context: context,
user: batsMan2?.player,
onTap: () async {
final player = await SelectPlayerSheet.show<
List<
({
List<MatchPlayer> players,
String teamId
})>>(context,
type: PlayerSelectionType.batsMan,
excludedIds: [
batsMan1?.player.id ?? "INVALID ID",
batsMan2?.player.id ?? "INVALID ID"
]);
if (player != null && context.mounted) {
setState(() {
batsMan2 = player.first.players.first;
});
}
},
),
] else ...[
const Expanded(child: SizedBox()),
],
],
),
_sectionTitle(context, context.l10n.score_board_bowler_title),
Expand Down Expand Up @@ -387,9 +395,11 @@ class _SelectPlayerSheetState extends ConsumerState<SelectPlayerSheet> {
context.l10n.score_board_select_title,
enabled: widget.type == PlayerSelectionType.all
? (batsMan1 != null && batsMan2 != null && bowler != null)
: widget.type == PlayerSelectionType.batsMan
? batsMan1 != null
: bowler != null,
: widget.type == PlayerSelectionType.batsManAndBowler
? (batsMan1 != null && bowler != null)
: widget.type == PlayerSelectionType.batsMan
? batsMan1 != null
: bowler != null,
onPressed: () {
final List<({List<MatchPlayer> players, String teamId})>
selectedPlayer = [];
Expand Down
25 changes: 15 additions & 10 deletions khelo/lib/ui/flow/score_board/score_board_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,18 @@ class _ScoreBoardScreenState extends ConsumerState<ScoreBoardScreen> {
});
}

void _observeShowSelectBowlerAndBatsManSheet(
BuildContext context, WidgetRef ref) {
ref.listen(
scoreBoardStateProvider
.select((value) => value.showSelectBowlerAndBatsManSheet),
(previous, next) {
if (next != null) {
_showSelectPlayerSheet(context, PlayerSelectionType.batsManAndBowler);
}
});
}

void _observeShowSelectPlayerSheet(BuildContext context, WidgetRef ref) {
ref.listen(
scoreBoardStateProvider.select((value) => value.showSelectPlayerSheet),
Expand Down Expand Up @@ -255,6 +267,7 @@ class _ScoreBoardScreenState extends ConsumerState<ScoreBoardScreen> {

_observeShowSelectBatsManSheet(context, ref);
_observeShowSelectBowlerSheet(context, ref);
_observeShowSelectBowlerAndBatsManSheet(context, ref);
_observeShowSelectPlayerSheet(context, ref);
_observeShowSelectWicketTypeSheet(context, ref);
_observeShowStrikerSelectionDialog(context, ref);
Expand Down Expand Up @@ -631,21 +644,13 @@ class _ScoreBoardScreenState extends ConsumerState<ScoreBoardScreen> {
extra = runBeforeWicket?.$1;
}

if (type != WicketType.retiredHurt &&
type != WicketType.retired &&
type != WicketType.timedOut) {
notifier.addBall(
notifier.addBall(
run: 0,
extra: extra,
playerOutId: outBatsMan?.id,
wicketTakerId: wicketTakerId,
wicketType: type,
);
} else {
if (context.mounted) {
notifier.onWicket(type, outBatsMan?.id, isOutWithoutDelivery: true);
}
}
switchStrike: extra != null ? extra % 2 == 0 : false);
}

Future<void> _showStrikerSelectionDialog(BuildContext context) async {
Expand Down
76 changes: 45 additions & 31 deletions khelo/lib/ui/flow/score_board/score_board_view_model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ class ScoreBoardViewNotifier extends StateNotifier<ScoreBoardViewState> {

final lastBall = state.currentScoresList.lastOrNull;

final bowlerId = lastBall?.ball_number != 5 ? lastBall?.bowler_id : null;
final bowlerId = lastBall?.ball_number != 6 ? lastBall?.bowler_id : null;
final bowler = bowlerId != null
? state.match!.teams
.firstWhere(
Expand All @@ -144,8 +144,9 @@ class ScoreBoardViewNotifier extends StateNotifier<ScoreBoardViewState> {

bool showSelectAllPlayerSheet =
bowler == null && (currentPlayingBatsMan.isEmpty);
int overCount =
int.parse((state.currentInning!.overs ?? 1).toStringAsFixed(0));
int overCount = int.parse(
(state.currentInning!.overs == 0 ? 1 : state.currentInning!.overs ?? 1)
.toStringAsFixed(0));

state = state.copyWith(
batsMans: currentPlayingBatsMan,
Expand All @@ -155,12 +156,21 @@ class ScoreBoardViewNotifier extends StateNotifier<ScoreBoardViewState> {
totalRuns: state.currentInning!.total_runs ?? 0,
wicketCount: state.otherInning!.total_wickets ?? 0,
showSelectPlayerSheet: showSelectAllPlayerSheet ? DateTime.now() : null,
showSelectBowlerSheet:
bowler == null && !showSelectAllPlayerSheet ? DateTime.now() : null,
showSelectBatsManSheet:
currentPlayingBatsMan.length == 1 && !showSelectAllPlayerSheet
? DateTime.now()
: null,
showSelectBowlerSheet: bowler == null &&
!showSelectAllPlayerSheet &&
currentPlayingBatsMan.length == 2
? DateTime.now()
: null,
showSelectBowlerAndBatsManSheet: bowler == null &&
!showSelectAllPlayerSheet &&
currentPlayingBatsMan.length == 1
? DateTime.now()
: null,
showSelectBatsManSheet: bowler != null &&
currentPlayingBatsMan.length == 1 &&
!showSelectAllPlayerSheet
? DateTime.now()
: null,
ballCount: lastBall?.ball_number ?? 0,
);
}
Expand Down Expand Up @@ -268,9 +278,12 @@ class ScoreBoardViewNotifier extends StateNotifier<ScoreBoardViewState> {
WicketType? wicketType,
}) async {
int ballCount = state.ballCount;
if (extrasType == null ||
extrasType == ExtrasType.legBye ||
extrasType == ExtrasType.bye) {
if ((extrasType == null ||
extrasType == ExtrasType.legBye ||
extrasType == ExtrasType.bye) &&
wicketType != WicketType.retired &&
wicketType != WicketType.retiredHurt &&
wicketType != WicketType.timedOut) {
ballCount = state.ballCount + 1;
}

Expand Down Expand Up @@ -302,7 +315,7 @@ class ScoreBoardViewNotifier extends StateNotifier<ScoreBoardViewState> {
: extra ?? 0));

if (wicketType != null) {
onWicket(wicketType, playerOutId);
await onWicket(wicketType, playerOutId);
}

if (ball.inning_id != state.currentInning?.id &&
Expand Down Expand Up @@ -332,9 +345,8 @@ class ScoreBoardViewNotifier extends StateNotifier<ScoreBoardViewState> {

Future<void> onWicket(
WicketType wicketType,
String? playerOutId, {
bool isOutWithoutDelivery = false,
}) async {
String? playerOutId,
) async {
final outPlayer = state.batsMans
?.where((element) => element.player.id == playerOutId)
.firstOrNull;
Expand All @@ -359,11 +371,6 @@ class ScoreBoardViewNotifier extends StateNotifier<ScoreBoardViewState> {
if (wicketType != WicketType.retiredHurt) {
state = state.copyWith(wicketCount: state.wicketCount + 1);
}

if (isOutWithoutDelivery) {
await _updateInningScoreDetails();
checkIfInningComplete(wicket: wicketType);
}
}

void checkIfInningComplete({WicketType? wicket}) {
Expand Down Expand Up @@ -396,14 +403,14 @@ class ScoreBoardViewNotifier extends StateNotifier<ScoreBoardViewState> {

if (state.otherInning?.innings_status == InningStatus.finish &&
(state.totalRuns > (state.otherInning?.total_runs ?? 0))) {
// target-run-achieved
// targeted-run-achieved
state = state.copyWith(showMatchCompleteDialog: DateTime.now());
} else if (((playing?.length == 1) &&
(yetToPlay?.isEmpty ?? true) &&
(state.continueWithInjuredPlayers
? injured?.isEmpty ?? true
: true)) ||
remainingBall == 0) {
remainingBall <= 0) {
// TODO: playWithInjuredPlayer
// all-out(inc. injured) OR all-overs-complete
if (state.otherInning?.innings_status == InningStatus.finish) {
Expand All @@ -425,9 +432,11 @@ class ScoreBoardViewNotifier extends StateNotifier<ScoreBoardViewState> {
.where((element) => (element.over_number == state.overCount &&
element.extras_type != ExtrasType.noBall &&
element.extras_type != ExtrasType.wide &&
element.extras_type != ExtrasType.penaltyRun))
element.extras_type != ExtrasType.penaltyRun &&
element.wicket_type != WicketType.retired &&
element.wicket_type != WicketType.retiredHurt &&
element.wicket_type != WicketType.timedOut))
.toList();
// select scores which extra type is not no-ball, wide and penalty and overCount == over
if (fairDeliveries.length == 6) {
state = state.copyWith(showOverCompleteDialog: DateTime.now());
} else {
Expand Down Expand Up @@ -586,15 +595,17 @@ class ScoreBoardViewNotifier extends StateNotifier<ScoreBoardViewState> {
}

Future<void> startNextOver() async {
// if last ball had wicket and batsMan is single, show batsMan and Bowler
final lastBall = state.currentScoresList.last;
if (lastBall.wicket_type != null && (state.batsMans?.length ?? 0) < 2) {
// select batsMan as well
}
bool showSelectBatsManAndBowlerSheet =
lastBall.wicket_type != null && (state.batsMans?.length ?? 0) == 1;

state = state.copyWith(
overCount: state.overCount + 1,
ballCount: 0,
showSelectBowlerSheet: DateTime.now());
showSelectBowlerAndBatsManSheet:
showSelectBatsManAndBowlerSheet ? DateTime.now() : null,
showSelectBowlerSheet:
showSelectBatsManAndBowlerSheet ? null : DateTime.now());
}

Future<void> startNextInning() async {
Expand Down Expand Up @@ -725,7 +736,9 @@ class ScoreBoardViewNotifier extends StateNotifier<ScoreBoardViewState> {
? [...?state.batsMans, batsMans.first]
: batsMans
: state.batsMans);
if (batsMans != null) {

if (!(state.batsMans?.map((e) => e.player.id).contains(state.strikerId) ??
false)) {
_showStrikerSelectionDialog();
}

Expand All @@ -747,6 +760,7 @@ class ScoreBoardViewState with _$ScoreBoardViewState {
List<MatchPlayer>? batsMans,
DateTime? showSelectBatsManSheet,
DateTime? showSelectBowlerSheet,
DateTime? showSelectBowlerAndBatsManSheet,
DateTime? showSelectPlayerSheet,
DateTime? showSelectWicketTypeSheet,
DateTime? showStrikerSelectionDialog,
Expand Down
Loading

0 comments on commit 71ff568

Please sign in to comment.