make ranking working and add new stats
continuous-integration/drone/push Build is failing Details

pull/20/head
Lucas Delanier 1 year ago
parent bc89c0ea90
commit 50beb48c93

@ -12,4 +12,5 @@ abstract class IUserManager {
IAuthManager get authMgr => _authMgr;
List<Player> getUsersByName(String name);
Player getUserById(int id);
List<User> getRankingWithFriends();
}

@ -61,7 +61,68 @@ class StubData extends IManager {
Achievement("0 point"),
Achievement("Win a game")
],
[],
[
User(
21,
"Arthur",
"./assets/images/image_user_cyan.png",
"emre.kartal@etu.uca.fr",
[
Achievement("5 games"),
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
[],
Stat(10, 2, 12, 110, 7, 6, 700, 58.33, 30.2)),
User(
22,
"Louison",
"./assets/images/image_user_cyan.png",
"emre.kartal@etu.uca.fr",
[
Achievement("5 games"),
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
[],
Stat(10, 2, 12, 150, 7, 6, 700, 58.33, 30.2)),
User(
23,
"Owen",
"./assets/images/image_user_cyan.png",
"emre.kartal@etu.uca.fr",
[
Achievement("5 games"),
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
[],
Stat(10, 2, 12, 10, 7, 6, 700, 58.33, 30.2)),
User(
24,
"LULU",
"./assets/images/image_user_cyan.png",
"emre.kartal@etu.uca.fr",
[
Achievement("5 games"),
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
[],
Stat(10, 2, 12, 40, 7, 6, 700, 58.33, 30.2)),
User(
25,
"Raphael",
"./assets/images/image_user_cyan.png",
"emre.kartal@etu.uca.fr",
[
Achievement("5 games"),
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
[],
Stat(10, 2, 12, 76, 7, 6, 700, 58.33, 30.2)),
],
Stat(2, 7, 9, 80, 4, 3, 250, 27.77, 10.55))
];
@ -71,10 +132,10 @@ class StubData extends IManager {
null, players[7].id, rounds, [players[0], players[1]]));
gameDetails.add(GameDetail(2, DateTime.now(), players[0].id, 113, true,
null, players[7].id, rounds, [players[0], players[1], players[7]]));
gameDetails.add(GameDetail(3, DateTime.now(), players[7].id, 93, true,
null, players[7].id, [], [players[0], players[7]]));
gameDetails.add(GameDetail(4, DateTime.now(), players[7].id, 93, true,
null, players[7].id, [], [players[1], players[7]]));
gameDetails.add(GameDetail(3, DateTime.now(), players[7].id, 93, true, null,
players[7].id, [], [players[0], players[7]]));
gameDetails.add(GameDetail(4, DateTime.now(), players[7].id, 93, true, null,
players[7].id, [], [players[1], players[7]]));
}
List<GameDetail> get gameDetails => _gameDetails;

@ -1,5 +1,7 @@
library StubLib;
import 'package:bowl_in/model/User.dart';
import '../IUserManager.dart';
import '../IAuthManager.dart';
import '../Player.dart';
@ -17,10 +19,8 @@ class UserManager extends IUserManager {
// Methods
List<Player> getUsersByName(String name) {
List<Player> players = [];
for (var player in parent.players)
{
if (player.name == name)
{
for (var player in parent.players) {
if (player.name == name) {
players.add(player);
}
}
@ -28,13 +28,18 @@ class UserManager extends IUserManager {
}
Player getUserById(int id) {
for (var player in parent.players)
{
if (player.id == id)
{
for (var player in parent.players) {
if (player.id == id) {
return player;
}
}
throw new Exception("Player not found");
}
@override
List<User> getRankingWithFriends() {
List<User> sortedPlayers = List.from(parent.userCurrent.friends);
sortedPlayers.sort((a, b) => b.stat.highscore.compareTo(a.stat.highscore));
return sortedPlayers;
}
}

@ -21,7 +21,7 @@ class _AnalysisScreenState extends State<AnalysisScreen> {
child: Stack(alignment: Alignment.topCenter, children: [
Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height * 1.45,
height: MediaQuery.of(context).size.height,
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
@ -84,18 +84,13 @@ class _AnalysisScreenState extends State<AnalysisScreen> {
spacing: 10,
verticalDirection: VerticalDirection.up,
children: [
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(
title: "Number of victory",
val: MyApp.controller.userCurrent.stat.nbVictory
.toDouble()),
StatsCard(
title: "Average pins per round",
val: MyApp.controller.userCurrent.stat.avgPinsPerRound),
],
))
]),

@ -48,7 +48,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
mainAxisAlignment: MainAxisAlignment.start,
verticalDirection: VerticalDirection.up,
children: [
ListAchievementWidget(nbUnlocked: 1),
ListAchievementWidget(nbUnlocked: 0),
Padding(
padding: EdgeInsets.fromLTRB(40, 0, 0, 0),
child: ProfileWidget()),

@ -1,6 +1,8 @@
import 'package:bowl_in/main.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../model/User.dart';
import '../widgets/profil_listpodium_widget.dart';
class RankScreen extends StatefulWidget {
@ -11,6 +13,7 @@ class RankScreen extends StatefulWidget {
}
class _RankScreenState extends State<RankScreen> {
List<User> rank = MyApp.controller.userMgr.getRankingWithFriends();
@override
Widget build(BuildContext context) {
return Stack(alignment: Alignment.center, children: [
@ -60,16 +63,21 @@ class _RankScreenState extends State<RankScreen> {
Positioned(
left: 65,
top: MediaQuery.of(context).size.height * 0.195,
child: ProfilPodiumWidget(isfirst: 0, pseudo: "Louison", score: 122)),
child: ProfilPodiumWidget(
isfirst: 0, pseudo: rank[1].name, score: rank[1].stat.highscore)),
Positioned(
top: MediaQuery.of(context).size.height * 0.114,
child: Align(
child: ProfilPodiumWidget(isfirst: 1, pseudo: "Lucas", score: 167),
child: ProfilPodiumWidget(
isfirst: 1,
pseudo: rank[0].name,
score: rank[0].stat.highscore),
)),
Positioned(
right: 65,
top: MediaQuery.of(context).size.height * 0.219,
child: ProfilPodiumWidget(isfirst: 0, pseudo: "David", score: 102),
child: ProfilPodiumWidget(
isfirst: 0, pseudo: rank[2].name, score: rank[2].stat.highscore),
),
Positioned(
bottom: -40,
@ -82,7 +90,7 @@ class _RankScreenState extends State<RankScreen> {
image: DecorationImage(
image: AssetImage("assets/images/image_podium.png"),
)),
child: ListPodium(),
child: rank.length > 3 ? ListPodium() : Container(),
)
],
)),

@ -85,7 +85,7 @@ class ListAchievementWidget extends StatelessWidget {
imagePath: 'assets/images/achievements/win_locked.png',
imagePathUnlocked:
'assets/images/achievements/win_unlocked.png',
isUnlocked: 1,
isUnlocked: 0,
),
AchievementWidget(
imagePath:
@ -106,19 +106,19 @@ class ListAchievementWidget extends StatelessWidget {
'assets/images/achievements/2strikeinarow_locked.png',
imagePathUnlocked:
'assets/images/achievements/2strikeinarow_unlocked.png',
isUnlocked: 1,
isUnlocked: 0,
),
AchievementWidget(
imagePath: 'assets/images/achievements/5games_locked.png',
imagePathUnlocked:
'assets/images/achievements/5games_unlocked.png',
isUnlocked: 1,
isUnlocked: 0,
),
AchievementWidget(
imagePath: 'assets/images/achievements/10spares_locked.png',
imagePathUnlocked:
'assets/images/achievements/10spares_unlocked.png',
isUnlocked: 1,
isUnlocked: 0,
),
AchievementWidget(
imagePath:

@ -100,7 +100,7 @@ class GameCard extends StatelessWidget {
class StatsCard extends StatelessWidget {
final String title;
final int val;
final double val;
const StatsCard({Key? key, required this.title, required this.val})
: super(key: key);

@ -3,6 +3,10 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import '../main.dart';
import '../model/Player.dart';
import '../model/User.dart';
class ProfilPodiumWidget extends StatelessWidget {
final int isfirst;
final String pseudo;
@ -149,58 +153,22 @@ class ListPodium extends StatelessWidget {
@override
Widget build(BuildContext context) {
List<User> rank = MyApp.controller.userMgr.getRankingWithFriends();
return Padding(
padding: EdgeInsets.fromLTRB(20, 80, 20, 0),
child: SizedBox(
height: 500,
child: ScrollConfiguration(
behavior: CustomScroll(),
child: ListView(
children: [
ProfilListWidget(
position: 4,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 5,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 6,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 7,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 8,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 9,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 10,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 11,
pseudo: 'Emre',
score: 35,
),
SizedBox(
height: 50,
),
],
child: ListView.builder(
itemCount: rank.length - 3,
itemBuilder: (BuildContext context, int index) {
return ProfilListWidget(
position: 4 + index,
pseudo: rank[index + 3].name,
score: rank[index + 3].stat.highscore,
);
},
),
)));
}

@ -39,7 +39,7 @@ class CardGame extends StatelessWidget {
),
),
child: Padding(
padding: EdgeInsets.fromLTRB(120, 3, 3, 0),
padding: EdgeInsets.fromLTRB(120, 0, 3, 0),
child: ClipRect(
clipBehavior: Clip.hardEdge,
child: Opacity(
@ -88,7 +88,7 @@ class CardGame extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.fromLTRB(5, 5, 10, 3),
padding: EdgeInsets.fromLTRB(5, 3, 10, 3),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
@ -121,7 +121,7 @@ class CardGame extends StatelessWidget {
.toList()))),
const Spacer(),
Padding(
padding: EdgeInsets.fromLTRB(0, 30, 15, 0),
padding: EdgeInsets.fromLTRB(0, 25, 15, 0),
child: GradientText(
game.pointsCurrentUser.toString(),
style: TextStyle(

Loading…
Cancel
Save