Skip to content

Commit

Permalink
Simplify custom game screen
Browse files Browse the repository at this point in the history
  • Loading branch information
veloce committed Feb 22, 2025
1 parent ffdad9c commit 5414b7e
Showing 1 changed file with 26 additions and 112 deletions.
138 changes: 26 additions & 112 deletions lib/src/view/play/create_custom_game_screen.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import 'dart:async';

import 'package:deep_pick/deep_pick.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:lichess_mobile/src/model/account/account_repository.dart';
Expand Down Expand Up @@ -31,11 +30,11 @@ import 'package:lichess_mobile/src/widgets/expanded_section.dart';
import 'package:lichess_mobile/src/widgets/feedback.dart';
import 'package:lichess_mobile/src/widgets/list.dart';
import 'package:lichess_mobile/src/widgets/non_linear_slider.dart';
import 'package:lichess_mobile/src/widgets/platform.dart';
import 'package:lichess_mobile/src/widgets/platform_scaffold.dart';

enum _ViewMode { create, challenges }

class CreateCustomGameScreen extends StatelessWidget {
class CreateCustomGameScreen extends StatefulWidget {
const CreateCustomGameScreen();

static Route<dynamic> buildRoute(BuildContext context) {
Expand All @@ -47,27 +46,11 @@ class CreateCustomGameScreen extends StatelessWidget {
}

@override
Widget build(BuildContext context) {
return PlatformWidget(androidBuilder: _buildAndroid, iosBuilder: _buildIos);
}

Widget _buildIos(BuildContext context) {
return const _CupertinoBody();
}

Widget _buildAndroid(BuildContext context) {
return const _AndroidBody();
}
State<CreateCustomGameScreen> createState() => _CreateCustomGameScreenState();
}

class _AndroidBody extends StatefulWidget {
const _AndroidBody();

@override
State<_AndroidBody> createState() => _AndroidBodyState();
}

class _AndroidBodyState extends State<_AndroidBody> with TickerProviderStateMixin {
class _CreateCustomGameScreenState extends State<CreateCustomGameScreen>
with TickerProviderStateMixin {
late final TabController _tabController;

@override
Expand All @@ -92,87 +75,26 @@ class _AndroidBodyState extends State<_AndroidBody> with TickerProviderStateMixi

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(context.l10n.custom),
bottom: TabBar(
controller: _tabController,
tabs: <Widget>[
Tab(text: context.l10n.createAGame),
Tab(text: context.l10n.mobileCustomGameJoinAGame),
],
),
return PlatformScaffold(
appBarTitle: Text(context.l10n.custom),
appBarBottom: TabBar(
controller: _tabController,
tabs: <Widget>[
Tab(text: context.l10n.createAGame),
Tab(text: context.l10n.mobileCustomGameJoinAGame),
],
),
body: TabBarView(
controller: _tabController,
children: <Widget>[
_TabView(sliver: _CreateGameBody(setViewMode: setViewMode)),
_TabView(sliver: _ChallengesBody(setViewMode: setViewMode)),
_CreateGameBody(setViewMode: setViewMode),
_ChallengesBody(setViewMode: setViewMode),
],
),
);
}
}

class _CupertinoBody extends StatefulWidget {
const _CupertinoBody();

@override
_CupertinoBodyState createState() => _CupertinoBodyState();
}

class _CupertinoBodyState extends State<_CupertinoBody> {
_ViewMode _selectedSegment = _ViewMode.create;

void setViewMode(_ViewMode mode) {
setState(() {
_selectedSegment = mode;
});
}

@override
Widget build(BuildContext context) {
final tabSwitcher = CupertinoSlidingSegmentedControl<_ViewMode>(
groupValue: _selectedSegment,
children: {
_ViewMode.create: Text(context.l10n.createAGame),
_ViewMode.challenges: Text(context.l10n.mobileCustomGameJoinAGame),
},
onValueChanged: (_ViewMode? view) {
if (view != null) {
setState(() {
_selectedSegment = view;
});
}
},
);
return CupertinoPageScaffold(
navigationBar: CupertinoNavigationBar(
middle: Text(context.l10n.custom),
bottom: PreferredSize(preferredSize: const Size.fromHeight(44.0), child: tabSwitcher),
),
child: _TabView(
sliver:
_selectedSegment == _ViewMode.create
? _CreateGameBody(setViewMode: setViewMode)
: _ChallengesBody(setViewMode: setViewMode),
),
);
}
}

class _TabView extends StatelessWidget {
const _TabView({required this.sliver});

final Widget sliver;

@override
Widget build(BuildContext context) {
final edgeInsets = MediaQuery.paddingOf(context) + Styles.verticalBodyPadding;
return CustomScrollView(slivers: [SliverPadding(padding: edgeInsets, sliver: sliver)]);
}
}

class _ChallengesBody extends ConsumerStatefulWidget {
const _ChallengesBody({required this.setViewMode});

Expand Down Expand Up @@ -230,7 +152,7 @@ class _ChallengesBodyState extends ConsumerState<_ChallengesBody> {
data: (challenges) {
final supportedChallenges =
challenges.where((challenge) => challenge.variant.isPlaySupported).toList();
return SliverList.separated(
return ListView.separated(
itemCount: supportedChallenges.length,
separatorBuilder:
(context, index) =>
Expand Down Expand Up @@ -276,14 +198,9 @@ class _ChallengesBodyState extends ConsumerState<_ChallengesBody> {
);
},
loading: () {
return const SliverFillRemaining(
child: Center(child: CircularProgressIndicator.adaptive()),
);
return const Center(child: CircularProgressIndicator.adaptive());
},
error:
(error, stack) => SliverFillRemaining(
child: Center(child: Text(context.l10n.mobileCustomGameJoinAGame)),
),
error: (error, stack) => Center(child: Text(context.l10n.mobileCustomGameJoinAGame)),
);
}
}
Expand Down Expand Up @@ -452,10 +369,11 @@ class _CreateGameBodyState extends ConsumerState<_CreateGameBody> {
account?.perfs[timeControl == TimeControl.realTime
? preferences.perfFromCustom
: Perf.correspondence];
return SliverPadding(
padding: Styles.sectionBottomPadding,
sliver: SliverList(
delegate: SliverChildListDelegate([
return Center(
child: ListView(
padding: MediaQuery.paddingOf(context) + Styles.verticalBodyPadding,
shrinkWrap: true,
children: [
if (account != null)
PlatformListTile(
harmonizeCupertinoTitleStyle: true,
Expand Down Expand Up @@ -577,16 +495,12 @@ class _CreateGameBodyState extends ConsumerState<_CreateGameBody> {
);
},
),
]),
],
),
);
},
loading:
() =>
const SliverFillRemaining(child: Center(child: CircularProgressIndicator.adaptive())),
error:
(error, stackTrace) =>
const SliverFillRemaining(child: Center(child: Text('Could not load account data'))),
loading: () => const Center(child: CircularProgressIndicator.adaptive()),
error: (error, stackTrace) => const Center(child: Text('Could not load account data')),
);
}
}
Expand Down

0 comments on commit 5414b7e

Please sign in to comment.