Skip to content

Commit

Permalink
Updated frontEnd
Browse files Browse the repository at this point in the history
Some Changes to ApiProvider
  • Loading branch information
F4zination committed Jun 4, 2024
1 parent bac184b commit b66d720
Show file tree
Hide file tree
Showing 10 changed files with 96 additions and 145 deletions.
1 change: 1 addition & 0 deletions duo_client/lib/provider/api_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ class ApiProvider extends ChangeNotifier implements AbstractServerConnection {

@override
Future<int> getGameStateStream(String token, int gameId) {
debugPrint('called getGameStateStream');
return getIt.get<GrpcServerConnection>().getGameStateStream(token, gameId);
}

Expand Down
57 changes: 0 additions & 57 deletions duo_client/lib/provider/game_statistic_provider.dart

This file was deleted.

65 changes: 32 additions & 33 deletions duo_client/lib/screens/dashboard_screen.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import 'package:duo_client/provider/api_provider.dart';
import 'package:duo_client/provider/friend_provider.dart';
import 'package:duo_client/provider/game_rule_provider.dart';
import 'package:duo_client/provider/game_statistic_provider.dart';
import 'package:duo_client/provider/played_games_provider.dart';
import 'package:duo_client/screens/home_screen.dart';
import 'package:duo_client/utils/constants.dart';
Expand Down Expand Up @@ -77,22 +76,17 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
child: Padding(
padding: const EdgeInsets.only(
bottom: Constants.defaultPadding * 3),
child: ref
.read(gameStatisticProvider)
.gameStatistics
.isEmpty
? const EmptySegmentText(text: 'No games played yet')
: Row(
children: [
const SizedBox(width: Constants.defaultPadding),
...ref
.watch(playedGamesProvider)
.playedGames
.map((playedGame) => RecentGameItem(
playedGame: playedGame,
)),
],
),
child: Row(
children: [
const SizedBox(width: Constants.defaultPadding),
...ref
.watch(playedGamesProvider)
.playedGames
.map((playedGame) => RecentGameItem(
playedGame: playedGame,
)),
],
),
),
);
}),
Expand All @@ -114,25 +108,30 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
return gameRules.isEmpty
? const EmptySegmentText(text: 'No gamerules yet')
: SizedBox(
height: 100,
height: 130,
child: ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.horizontal,
itemBuilder: (context, index) => Padding(
padding: const EdgeInsets.symmetric(
horizontal: Constants.defaultPadding),
child: DuoContainer(
width: 150,
child: Center(
child: Text(
gameRules[index].name,
style: Theme.of(context)
.textTheme
.titleLarge
?.copyWith(
color: Theme.of(context)
.colorScheme
.onPrimary,
),
horizontal: Constants.defaultPadding / 2),
child: Padding(
padding: const EdgeInsets.only(
bottom: Constants.defaultPadding * 2.3),
child: DuoContainer(
width: 150,
child: Center(
child: Text(
gameRules[index].name,
style: Theme.of(context)
.textTheme
.titleLarge
?.copyWith(
color: Theme.of(context)
.colorScheme
.onPrimary,
),
),
),
),
),
Expand All @@ -141,7 +140,7 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
),
);
}),
const SizedBox(height: Constants.defaultPadding * 2),
const SizedBox(height: Constants.defaultPadding / 2),
DuoHeader(title: 'Friends', actions: [
IconButton(
tooltip: 'Add friend',
Expand Down
2 changes: 2 additions & 0 deletions duo_client/lib/screens/game_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class _GameScreenState extends ConsumerState<GameScreen> {
await ref.read(apiProvider).getToken(), ref.read(apiProvider).gameId);
ref.read(apiProvider).sendUserstatusUpdate(
await ref.read(apiProvider).getToken(), FriendState.inGame);
debugPrint('Status in initState of game_screen: $status');
if (status != 0) {
debugPrint('Error getting game state stream');
}
Expand All @@ -46,6 +47,7 @@ class _GameScreenState extends ConsumerState<GameScreen> {

@override
void dispose() {
debugPrint('Disposing game_screen');
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
Expand Down
1 change: 1 addition & 0 deletions duo_client/lib/screens/leaderboard_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ class _LeaderboardScreenState extends ConsumerState<LeaderboardScreen> {
return LeaderboardListTile(
boardPlace: index + 1,
friend: friends[index],
ownScore: self_user.score,
isBetterThanPlayer:
friends[index].score > self_user.score,
isPlayer: friends[index].name == self_user.name,
Expand Down
47 changes: 25 additions & 22 deletions duo_client/lib/utils/connection/grpc_server_connection.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ class GrpcServerConnection extends AbstractServerConnection {
StreamController<StatusChangeRequest>? userStatusStreamController;

ResponseStream<void_>? userStatusAckStream;
Stream<PlayerAction> playerActionStream = const Stream.empty();
StreamController<PlayerAction> playerActionStreamController =
StreamController<PlayerAction>.broadcast();

Expand Down Expand Up @@ -271,26 +270,28 @@ class GrpcServerConnection extends AbstractServerConnection {
Future<int> getPlayerStream(String token, int gameId) async {
try {
ResponseStream<PlayerState> playerStream =
client.getPlayerStream(playerActionStream);

playerStream.listen(
(value) {
// playerState = value;
// _notifyListeners();
eventController.add(PlayerStateEvent(value));
},
cancelOnError: true,
onError: (e) {
eventController.add(PlayerStateDoneEvent());
debugPrint('Error: $e');
},
onDone: () {
// playerState = null;
eventController.add(PlayerStateDoneEvent());
gameStream = null;
debugPrint('Player Stream Done');
},
);
client.getPlayerStream(playerActionStreamController.stream);

this.playerStream = playerStream;

this.playerStream?.listen(
(value) {
// playerState = value;
// _notifyListeners();
eventController.add(PlayerStateEvent(value));
},
cancelOnError: false,
onError: (e) {
eventController.add(PlayerStateDoneEvent());
debugPrint('Error: $e');
},
onDone: () {
// playerState = null;
eventController.add(PlayerStateDoneEvent());
gameStream = null;
debugPrint('Player Stream Done');
},
);
} catch (e) {
return -1;
}
Expand Down Expand Up @@ -377,7 +378,9 @@ class GrpcServerConnection extends AbstractServerConnection {
gameId: gameId,
));

gameStateStream.listen(
gameStream = gameStateStream;

gameStream?.listen(
(value) {
eventController.add(GameStateEvent(value));
},
Expand Down
35 changes: 15 additions & 20 deletions duo_client/lib/widgets/card_scroll_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,21 @@ class _CardScrollViewState extends ConsumerState<CardScrollView> {
bool _isReordering = false;
bool isTurn = false;
List<duo.PlayingCard> cards = [];
final StreamController<PlayerAction> _playerActionController =
StreamController<PlayerAction>();

//ToDo: BUG if the cards are removed before the animation is done it will crash or before on Reorder is done

@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
ref.read(apiProvider).getPlayerStream(
ref.read(storageProvider).accessToken, ref.read(apiProvider).gameId);
WidgetsBinding.instance.addPostFrameCallback((_) async {
String token = await ref.read(apiProvider).getToken();
await ref
.read(apiProvider)
.getPlayerStream(token, ref.read(apiProvider).gameId);
ref.read(apiProvider).streamPlayerAction(PlayerAction(
action: PlayerAction_ActionType.INIT,
cardId: '',
token: token,
));
});

super.initState();
Expand Down Expand Up @@ -111,20 +117,9 @@ class _CardScrollViewState extends ConsumerState<CardScrollView> {
}

void playCard(int index) {
_playerActionController.add(PlayerAction(
action: PlayerAction_ActionType.PLACE,
cardId: cards[index].cardName,
));
}

void drawCard() {
_playerActionController
.add(PlayerAction()..action = PlayerAction_ActionType.DRAW);
}

@override
void dispose() {
_playerActionController.close();
super.dispose();
ref.read(apiProvider).streamPlayerAction(PlayerAction(
action: PlayerAction_ActionType.PLACE,
cardId: cards[index].cardName,
));
}
}
6 changes: 3 additions & 3 deletions duo_client/lib/widgets/friend_request_tile.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ class FriendRequestTile extends ConsumerWidget {
friendRequest.requesterUuid,
true,
);
ref
.read(apiProvider)
.getFriends(await ref.read(apiProvider).getToken());
// ref
// .read(apiProvider)
// .getFriends(await ref.read(apiProvider).getToken());
//ref.read(notificationProvider).removeNotification();
},
),
Expand Down
9 changes: 5 additions & 4 deletions duo_client/lib/widgets/game_stacks.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:duo_client/pb/game.pb.dart';
import 'package:duo_client/provider/api_provider.dart';
import 'package:duo_client/provider/storage_provider.dart';
import 'package:duo_client/widgets/duo_card_stack.dart';
import 'package:duo_client/widgets/playingcard.dart';
import 'package:flutter/material.dart';
Expand All @@ -16,10 +15,12 @@ class GameStacks extends ConsumerStatefulWidget {
class _GameStacksState extends ConsumerState<GameStacks> {
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) {
WidgetsBinding.instance.addPostFrameCallback((_) async {
//init the stack stream
ref.read(apiProvider).getStackStream(
ref.read(storageProvider).accessToken, ref.read(apiProvider).gameId);
String token = await ref.read(apiProvider).getToken();
await ref
.read(apiProvider)
.getStackStream(token, ref.read(apiProvider).gameId);
});
super.initState();
}
Expand Down
18 changes: 12 additions & 6 deletions duo_client/lib/widgets/leaderboard_list_tile.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@ import 'package:flutter/material.dart';
class LeaderboardListTile extends StatelessWidget {
final int boardPlace;
final Friend friend;
final int ownScore;
final bool isBetterThanPlayer;
final VoidCallback? onTap;
final bool isPlayer;
const LeaderboardListTile({
required this.boardPlace,
required this.friend,
required this.isBetterThanPlayer,
required this.ownScore,
this.isPlayer = false,
this.onTap,
super.key,
Expand Down Expand Up @@ -100,13 +102,17 @@ class LeaderboardListTile extends StatelessWidget {
]),
),
Text(
isBetterThanPlayer
? '+${friend.score.toString()}'
: '-${friend.score.toString()}',
isPlayer
? ownScore.toString()
: isBetterThanPlayer
? '+${(ownScore - friend.score).toString()}'
: '-${(ownScore - friend.score).toString()}',
style: Theme.of(context).textTheme.bodyLarge?.copyWith(
color: isBetterThanPlayer
? Constants.successColor
: Constants.errorColor,
color: isPlayer
? Constants.goldColor
: isBetterThanPlayer
? Constants.successColor
: Constants.errorColor,
),
),
const SizedBox(
Expand Down

0 comments on commit b66d720

Please sign in to comment.