Skip to content

Commit

Permalink
feat: add status view different from page
Browse files Browse the repository at this point in the history
  • Loading branch information
luisburgos committed Sep 24, 2022
1 parent 6a973b3 commit c64279a
Show file tree
Hide file tree
Showing 4 changed files with 163 additions and 40 deletions.
150 changes: 110 additions & 40 deletions example/lib/shared/modules/trivia/page.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import 'package:buzz/buzz.dart';
import 'package:core/core.dart';
import 'package:example/shared/modules/trivia/components/trivia_data_view.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';

import 'components/copy_join_link_view.dart';
import 'components/trivia_data_view.dart';

class NavigateToTrivia extends NavigateToCommand {
NavigateToTrivia({
Expand Down Expand Up @@ -45,32 +46,98 @@ class TriviaPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final triviaId = Get.parameters['trivia_id'] ?? '';
final status = Get.parameters['status'] ?? '';
String? status = Get.parameters['status'];

if (status == 'finished') {
return _TriviaFinishedStatusPage(
triviaId: triviaId,
onSeeScoreboardTap: onSeeScoreboardTap,
);
}

if (status == 'started') {
return _TriviaStartedStatusPage(
late Widget triviaView;
if (status == null) {
triviaView = _TriviaCompleteView(
triviaId: triviaId,
onStartPlayTap: onStartPlayTap,
onSeeScoreboardTap: onSeeScoreboardTap,
onCopyJoinLinkTap: onCopyJoinLinkTap,
);
} else {
if (status == 'initial') {
triviaView = _TriviaInitialStatusView(
triviaId: triviaId,
onCopyJoinLinkTap: onCopyJoinLinkTap,
);
}

if (status == 'started') {
triviaView = _TriviaStartedStatusView(
triviaId: triviaId,
onStartPlayTap: onStartPlayTap,
onSeeScoreboardTap: onSeeScoreboardTap,
);
}

if (status == 'finished') {
triviaView = _TriviaFinishedStatusView(
triviaId: triviaId,
onSeeScoreboardTap: onSeeScoreboardTap,
);
}
}

return _TriviaInitialStatusPage(
triviaId: triviaId,
onCopyJoinLinkTap: onCopyJoinLinkTap,
return Scaffold(
appBar: AppBar(
title: Text('$runtimeType'),
),
body: Column(
children: [
Expanded(child: triviaView),
],
),
);
}
}

class _TriviaInitialStatusPage extends StatelessWidget {
const _TriviaInitialStatusPage({
class _TriviaCompleteView extends StatelessWidget {
const _TriviaCompleteView({
Key? key,
required this.triviaId,
required this.onCopyJoinLinkTap,
required this.onSeeScoreboardTap,
required this.onStartPlayTap,
}) : super(key: key);

final String triviaId;
final Function(String) onCopyJoinLinkTap;
final Function(String) onStartPlayTap;
final Function(String) onSeeScoreboardTap;

@override
Widget build(BuildContext context) {
return ScrollablePositionedList.builder(
itemCount: 3,
itemBuilder: (_, index) {
if (index == 0) {
return _TriviaInitialStatusView(
triviaId: triviaId,
onCopyJoinLinkTap: onCopyJoinLinkTap,
);
}

if (index == 1) {
return _TriviaStartedStatusView(
triviaId: triviaId,
onStartPlayTap: onStartPlayTap,
onSeeScoreboardTap: onSeeScoreboardTap,
);
}

return _TriviaFinishedStatusView(
triviaId: triviaId,
onSeeScoreboardTap: onSeeScoreboardTap,
);
},
);
}
}

class _TriviaInitialStatusView extends StatelessWidget {
const _TriviaInitialStatusView({
Key? key,
required this.triviaId,
required this.onCopyJoinLinkTap,
Expand All @@ -83,32 +150,35 @@ class _TriviaInitialStatusPage extends StatelessWidget {
Widget build(BuildContext context) {
const joinLink = 'TODO: improve joinLink';

return BasePage(
return BaseContainer(
name: '$runtimeType',
body: Column(
children: [
const SizedBox(height: 50),
const TriviaDataView(
hostName: 'hostName',
triviaName: 'triviaName',
triviaDescription: 'triviaDescription',
triviaMainQuestion: 'triviaMainQuestion',
),
const Spacer(),
CopyJoinLinkView(
joinLink: joinLink,
onCopyJoinLinkTap: (joinLink) {
//TODO: Implement.
},
),
],
body: Container(
color: Colors.red.shade200,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const SizedBox(height: 50),
const TriviaDataView(
hostName: 'hostName',
triviaName: 'triviaName',
triviaDescription: 'triviaDescription',
triviaMainQuestion: 'triviaMainQuestion',
),
CopyJoinLinkView(
joinLink: joinLink,
onCopyJoinLinkTap: (joinLink) {
//TODO: Implement.
},
),
],
),
),
);
}
}

class _TriviaStartedStatusPage extends StatelessWidget {
const _TriviaStartedStatusPage({
class _TriviaStartedStatusView extends StatelessWidget {
const _TriviaStartedStatusView({
Key? key,
required this.triviaId,
required this.onStartPlayTap,
Expand All @@ -121,7 +191,7 @@ class _TriviaStartedStatusPage extends StatelessWidget {

@override
Widget build(BuildContext context) {
return BasePage(
return BaseContainer(
name: '$runtimeType',
actions: [
MainAction(
Expand All @@ -143,8 +213,8 @@ class _TriviaStartedStatusPage extends StatelessWidget {
}
}

class _TriviaFinishedStatusPage extends StatelessWidget {
const _TriviaFinishedStatusPage({
class _TriviaFinishedStatusView extends StatelessWidget {
const _TriviaFinishedStatusView({
Key? key,
required this.triviaId,
required this.onSeeScoreboardTap,
Expand All @@ -155,7 +225,7 @@ class _TriviaFinishedStatusPage extends StatelessWidget {

@override
Widget build(BuildContext context) {
return BasePage(
return BaseContainer(
name: '$runtimeType',
actions: [
MainAction(
Expand Down
45 changes: 45 additions & 0 deletions example/packages/core/lib/src/named_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,51 @@ class BasePage extends StatelessWidget {
}
}

class BaseContainer extends StatelessWidget {
const BaseContainer({
Key? key,
required this.name,
this.action,
this.body,
this.onSettingsPressed,
this.actions = const [],
}) : super(key: key);

final String name;
final MainAction? action;
final Widget? body;
final Function()? onSettingsPressed;
final List<MainAction> actions;

@override
Widget build(BuildContext context) {
List<Widget> actionWidgets = [];
if (actions.isNotEmpty) {
actionWidgets = actions
.map(
(action) => MainActionWidget(action: action),
)
.toList();
}

return Container(
color: Colors.red,
width: double.infinity,
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(name),
if (body != null) Flexible(child: body!),
if (action != null) MainActionWidget(action: action!),
...actionWidgets,
],
),
);
}
}

class MainActionWidget extends StatelessWidget {
const MainActionWidget({
Key? key,
Expand Down
7 changes: 7 additions & 0 deletions example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.27.4"
scrollable_positioned_list:
dependency: "direct main"
description:
name: scrollable_positioned_list
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.4"
sky_engine:
dependency: transitive
description: flutter
Expand Down
1 change: 1 addition & 0 deletions example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ dependencies:
get: 4.6.5
flutter_modular: 5.0.2
get_storage: 2.0.3
scrollable_positioned_list: 0.3.4
core:
path: 'packages/core'
buzz:
Expand Down

0 comments on commit c64279a

Please sign in to comment.