Merge pull request 'Arthur_UserGame' (#25) from Arthur_UserGame into master
continuous-integration/drone/push Build is passing Details

Reviewed-on: #25
ContinueLocalManager
Arthur VALIN 2 years ago
commit aef6be1c0e

@ -51,7 +51,7 @@ final GoRouter router = GoRouter(
GoRoute(
path: 'scoreboard',
builder: (BuildContext context, GoRouterState state) {
return FinalScoreBoard(gameDeatil: state.extra as GameDetail);
return FinalScoreBoard(gameDetail: state.extra as GameDetail);
},
),
],

@ -53,6 +53,7 @@ abstract class AbstractRound {
bool computeNext(int val);
void computePoints();
bool shotIsStrike();
int getMaxPinsThisShot();
bool isStrike() {
return firstThrow==10;
@ -66,6 +67,9 @@ abstract class AbstractRound {
return (firstThrow ?? 0)+(secondThrow ?? 0)==10;
}
int getNbStrike();
int getNbSpares();
int getPinsKnockedDown();
void subscribe(AbstractRound nextRound){
nextRound.previousRound=this;
@ -73,7 +77,6 @@ abstract class AbstractRound {
void update(int val){
points = (points ?? 0) + val;
print("ROUND " + number.toString() + " - " + player.id.toString() + "Update points : " + points.toString());
previousRound?.update(val);
}

@ -1,13 +1,15 @@
import 'Player.dart';
class Game {
int _id;
DateTime _date;
int _pointsCurrentUser;
bool _isFinished;
List<int> _playersId = [];
List<Player> _players = [];
// Constructor
Game(this._id, this._date, this._pointsCurrentUser, this._isFinished,
this._playersId);
this._players);
// Getters and setters
int get id => _id;
@ -34,9 +36,9 @@ class Game {
_isFinished = value;
}
List<int> get playersId => _playersId;
List<Player> get players => _players;
set playersId(List<int> value) {
_playersId = value;
set playersId(List<Player> value) {
_players = value;
}
}

@ -5,11 +5,12 @@ import 'package:bowl_in/model/LastRound.dart';
import 'Player.dart';
import 'Round.dart';
import 'User.dart';
class GameDetail {
int _id;
DateTime _time;
int? _winner;
Player? _winner;
int _nbPoints;
bool _isFinished;
int _host;
@ -25,10 +26,10 @@ class GameDetail {
this.rounds.add(Round(null, null, 0, element, i));
});
}
players.forEach((element) {
this.rounds.add(LastRound(null, null, 0, element, 10, null));
});
}
// Getters and setters
@ -44,9 +45,9 @@ class GameDetail {
_time = value;
}
int? get winner => _winner;
Player? get winner => _winner;
set winner(int? value) {
set winner(Player? value) {
_winner = value;
}
@ -83,13 +84,27 @@ class GameDetail {
Map<Player, int> get points => _points;
void addGameToUsers(){
for(var p in players){
if(p is User){
p.games.add(Game(this.id, this.time, points[p] ?? 0, true, players));
p.stat.updateStats(this, p);
}
}
}
void computeWinner(){
print(getRank().entries.first.key.name);
this.winner = getRank().entries.first.key;
}
void computeScores(){
print("====COMPUTE POINTS====");
for(var element in rounds){
print(element.points);
points[element.player] = (points[element.player] ?? 0) + (element.points ?? 0);
print(element.player.name + " : " + points[element.player].toString());
}
computeWinner();
addGameToUsers();
}
Map<Player, int> getRank() {

@ -1,3 +1,4 @@
import 'package:bowl_in/model/IManager.dart';
import 'package:flutter/cupertino.dart';
import 'GameDetail.dart';
@ -7,8 +8,11 @@ import 'Round.dart';
class GamePlayer {
late GameDetail _game;
final IManager _parent;
int currentRoundIndex = 0;
GamePlayer(this._parent);
GameDetail get game => _game;
set game(GameDetail value) {
@ -23,6 +27,10 @@ class GamePlayer {
}
if (currentRoundIndex >= game.rounds.length) {
print("FINISHED");
game.id=_parent.gameMgr.getNextId();
_parent.gameMgr.addGame(game);
game.computeScores();
context.go("/scoreboard", extra: game);
} else {

@ -1,6 +1,18 @@
import 'dart:math';
import 'Player.dart';
const _images = [
"./assets/images/image_user_cyan.png",
"./assets/images/image_user_red.png",
"./assets/images/image_user_yellow.png",
"./assets/images/image_user_pink.png",
"./assets/images/image_user_orange.png",
"./assets/images/image_user_green.png",
"./assets/images/image_user_purple.png",
];
class Guest extends Player {
// Constructor
Guest(int id, String image, String name) : super(id, image, name);
Guest(String name) : super(name, _images[Random().nextInt(_images.length)]);
}

@ -10,4 +10,6 @@ abstract class IGameManager {
List<GameDetail> getGamesByPlayers(List<Player> users);
List<Player> getPlayersByIdGame(int id);
Map<Player, int> getRankByIdGame(int id);
int getNextId();
addGame(GameDetail gd);
}

@ -10,7 +10,7 @@ import 'Game.dart';
abstract class IManager {
late User _userCurrent;
late GameDetail _gameCurrent;
late GamePlayer _gamePlayer = GamePlayer();
late GamePlayer _gamePlayer = GamePlayer(this);
late IUserManager _userMgr;
late IGameManager _gameMgr;

@ -55,4 +55,60 @@ class LastRound extends AbstractRound{
return secondThrow==10;
}
}
@override
int getNbSpares() {
int nb = 0;
if(firstThrow!=10){
if((firstThrow??0)+(secondThrow??0)==10){
nb+=1;
}
}else{
if((thirdThrow??0)+(secondThrow??0)==10) {
nb+=1;
}
}
return nb;
}
@override
int getNbStrike() {
int nb = 0;
if(firstThrow==10){
nb+=1;
if(secondThrow==10){
nb+=1;
if(thirdThrow==10) {
nb+=1;
}
}
}else{
if(thirdThrow==10) {
nb+=1;
}
}
return nb;
}
@override
int getPinsKnockedDown() {
return (firstThrow??0)+(secondThrow??0)+(thirdThrow??0);
}
@override
int getMaxPinsThisShot() {
if(firstThrow==null){
return 10;
}else if(firstThrow==10 && secondThrow==null){
return 10;
}else if(secondThrow==null){
return 10 - (firstThrow??0);
}else if(secondThrow==10){
return 10;
}else{
return 10 - (secondThrow??0);
}
}
}

@ -1,13 +1,10 @@
class Player {
final int _id;
String _name;
String _image;
// Constructor
Player(this._id, this._name, this._image);
Player(this._name, this._image);
// Getters and setters
int get id => _id;
String get name => _name;
@ -20,4 +17,7 @@ class Player {
set image(String value) {
_image = value;
}
}

@ -28,7 +28,6 @@ class Round extends AbstractRound{
@override
void computePoints() {
points = (firstThrow ?? 0)+(secondThrow ?? 0);
print("ROUND " + number.toString() + " - " + player.id.toString() + "Compute points : " + points.toString());
if(previousRound?.isStrike() ?? false){
previousRound?.update(points ?? 0);
}
@ -40,5 +39,33 @@ class Round extends AbstractRound{
return firstThrow==null;
}
@override
int getNbSpares() {
if(isSpare()){
return 1;
}
return 0;
}
@override
int getNbStrike() {
if(isStrike()){
return 1;
}
return 0;
}
@override
int getPinsKnockedDown() {
return (firstThrow ?? 0)+(secondThrow ?? 0);
}
@override
int getMaxPinsThisShot() {
if(firstThrow==null){
return 10;
}else{
return 10 - (firstThrow ?? 0);
}
}
}

@ -1,6 +1,10 @@
import 'package:bowl_in/model/GameDetail.dart';
import 'package:bowl_in/model/Player.dart';
import 'User.dart';
class Stat {
int _nbVictory;
int _nbDefeat;
int _nbGames;
int _highscore;
int _nbStrikes;
@ -12,7 +16,6 @@ class Stat {
// Constructor
Stat(
this._nbVictory,
this._nbDefeat,
this._nbGames,
this._highscore,
this._nbStrikes,
@ -29,12 +32,6 @@ class Stat {
_nbVictory = value;
}
int get nbDefeat => _nbDefeat;
set nbDefeat(int value) {
_nbDefeat = value;
}
int get nbGames => _nbGames;
set nbGames(int value) {
@ -76,4 +73,27 @@ class Stat {
set avgPinsPerRound(double value) {
_avgPinsPerRound = value;
}
void updateStats(GameDetail gd, Player p){
nbGames +=1;
if(gd.winner == p){
nbVictory +=1;
}
if((gd.points[p] ?? 0) > highscore){
highscore = gd.points[p] ?? 0;
}
double totalpins = 0;
for(var r in gd.rounds){
if(p == r.player){
nbStrikes += r.getNbStrike();
nbSpares += r.getNbSpares();
totalpins = totalpins + r.getPinsKnockedDown();
}
}
avgPinsPerRound = ((avgPinsPerRound * (nbGames-1)) + (totalpins/10))/nbGames;
}
}

@ -28,7 +28,7 @@ class GameManager extends IGameManager {
List<GameDetail> games = [];
for (var element in parent.gameDetails) {
for (Player player in element.players) {
if (player.id == id) {
if (player is User && player.id == id) {
games.add(element);
break;
}
@ -41,7 +41,7 @@ class GameManager extends IGameManager {
List<GameDetail> games = [];
for (var element in parent.gameDetails) {
for (Player player in element.players) {
if (player.id == user.id) {
if (player is User && user is User && player.id == user.id) {
games.add(element);
break;
}
@ -81,4 +81,14 @@ class GameManager extends IGameManager {
}
throw Exception("Game not found.");
}
@override
addGame(GameDetail gd) {
parent.gameDetails.add(gd);
}
@override
int getNextId() {
return parent.gameDetails.length;
}
}

@ -1,5 +1,6 @@
library StubLib;
import '../Guest.dart';
import '../IManager.dart';
import '../Game.dart';
import '../IUserManager.dart';
@ -32,13 +33,13 @@ class StubData extends IManager {
IGameManager get gameMgr => _gameMgr;
List<Player> players = [
Player(1, "Mathieu", "./assets/images/image_user_cyan.png"),
Player(2, "Robin", "./assets/images/image_user_purple.png"),
Player(3, "Lucas", "./assets/images/image_user_red.png"),
Player(4, "Emre", "./assets/images/image_user_blue.png"),
Player(5, "Louison", "./assets/images/image_user_cyan.png"),
Player(6, "Arthur", "./assets/images/image_user_yellow.png"),
Player(7, "David", "./assets/images/image_user_pink.png"),
Guest("Mathieu"),
Guest("Robin"),
Guest("Lucas"),
Guest("Emre"),
Guest("Louison"),
Guest("Arthur"),
Guest("David"),
User(
8,
"Emre",
@ -51,15 +52,14 @@ class StubData extends IManager {
],
[],
Stat(
10,
2,
12,
130,
7,
6,
700,
58.33,
30.2)),
0,
0,
0,
0,
0,
0,
0,
0)),
User(
9,
"Dave",
@ -83,15 +83,14 @@ class StubData extends IManager {
],
[],
Stat(
10,
2,
12,
110,
7,
6,
700,
58.33,
30.2)),
0,
0,
0,
0,
0,
0,
0,
0)),
User(
22,
"Louison",
@ -105,7 +104,6 @@ class StubData extends IManager {
[],
Stat(
10,
2,
12,
150,
7,
@ -126,7 +124,6 @@ class StubData extends IManager {
[],
Stat(
10,
2,
12,
10,
7,
@ -147,7 +144,6 @@ class StubData extends IManager {
[],
Stat(
10,
2,
12,
40,
7,
@ -168,7 +164,6 @@ class StubData extends IManager {
[],
Stat(
10,
2,
12,
76,
7,
@ -178,15 +173,14 @@ class StubData extends IManager {
30.2)),
],
Stat(
2,
7,
9,
80,
4,
3,
250,
27.77,
10.55))
0,
0,
0,
0,
0,
0,
0,
0))
];
List<GameDetail> _gameDetails = [];

@ -28,7 +28,7 @@ class UserManager extends IUserManager {
Player getUserById(int id) {
for (var player in parent.players) {
if (player.id == id) {
if (player is User && player.id == id) {
return player;
}
}

@ -4,6 +4,7 @@ import 'Player.dart';
import 'Stat.dart';
class User extends Player {
final int _id;
String _mail;
List<Achievement> _achievements = <Achievement>[];
List<User> _friends = <User>[];
@ -11,9 +12,11 @@ class User extends Player {
List<Game> games = [];
// Constructor
User(int id, String name, String image, this._mail, this._achievements,
User(this._id, String name, String image, this._mail, this._achievements,
this._friends, this._stat)
: super(id, name, image);
: super(name, image);
int get id => _id;
// Getters and setters
String get mail => _mail;

@ -85,12 +85,15 @@ class _AnalysisScreenState extends State<AnalysisScreen> {
verticalDirection: VerticalDirection.up,
children: [
StatsCard(
title: "Number of victory",
val: MyApp.controller.userCurrent.stat.nbVictory
.toDouble()),
title: "Number of victories",
val: MyApp.controller.userCurrent.stat.nbVictory.toDouble(),
precision: 0,
),
StatsCard(
title: "Average pins per round",
val: MyApp.controller.userCurrent.stat.avgPinsPerRound),
val: MyApp.controller.userCurrent.stat.avgPinsPerRound,
precision: 2,
),
],
))
]),

@ -6,6 +6,9 @@ import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
import '../model/Game.dart';
import '../model/Guest.dart';
import '../model/Player.dart';
import '../widgets/button_new_party.dart';
import '../widgets/ingame_widgets.dart';
import '../widgets/scores_list_widget.dart';
@ -18,10 +21,12 @@ class InGameScreen extends StatefulWidget {
}
class _InGameScreenState extends State<InGameScreen> {
late List<Player> listPlayers;
late Widget widgetHolder;
void initState() {
widgetHolder = InGameCardConfig();
listPlayers = [MyApp.controller.userCurrent];
widgetHolder = InGameCardConfig(listPlayer: listPlayers);
super.initState();
}
@ -52,8 +57,13 @@ class _InGameScreenState extends State<InGameScreen> {
Spacer(),
ElevatedButton(
onPressed: () {
GameDetail gd = GameDetail(1, DateTime.now(), null, 123, false,
MyApp.controller.userCurrent.id, [MyApp.controller.userCurrent, MyApp.controller.userMgr.getUserById(2)]);
GameDetail gd = GameDetail(
-1,
DateTime.now(),
null,
0,
false,
MyApp.controller.userCurrent.id, listPlayers);
MyApp.controller.gamePlayer.game = gd;
MyApp.controller.gameCurrent = gd;

@ -101,8 +101,9 @@ class GameCard extends StatelessWidget {
class StatsCard extends StatelessWidget {
final String title;
final double val;
final int precision;
const StatsCard({Key? key, required this.title, required this.val})
const StatsCard({Key? key, required this.title, required this.val, required this.precision})
: super(key: key);
@override
@ -137,7 +138,7 @@ class StatsCard extends StatelessWidget {
),
Spacer(),
Text(
this.val.toString(),
this.val.toStringAsFixed(precision),
style: GoogleFonts.roboto(
fontWeight: FontWeight.w900,
fontSize: 28,

@ -4,6 +4,10 @@ import 'package:flutter/services.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
import '../main.dart';
import '../model/GameDetail.dart';
import '../model/Player.dart';
import '../model/User.dart';
import 'ingame_widgets.dart';
class ButtonNewParty extends StatelessWidget {
@ -143,10 +147,14 @@ class NewGameModal extends StatelessWidget {
}
class ScoreBoardModal extends StatelessWidget {
const ScoreBoardModal({Key? key}) : super(key: key);
final GameDetail gamedetail;
const ScoreBoardModal({Key? key, required this.gamedetail}) : super(key: key);
@override
Widget build(BuildContext context) {
var rank = gamedetail.getRank();
var pseudoList = rank.keys.toList();
var scoreList = rank.values.toList();
return Dialog(
child: Stack(
alignment: Alignment.topCenter,
@ -159,39 +167,42 @@ class ScoreBoardModal extends StatelessWidget {
child:
Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Expanded(
child: Padding(
padding: EdgeInsets.fromLTRB(0, 40, 0, 0),
child: Stack(
alignment: Alignment.topCenter,
children: [
/*Positioned(
child: PodiumGameOverWidget(
isfirst: 2,
pseudo: 'Lucas',
score: 123,
),
top: 70,
left: 30,
),
Positioned(
child: PodiumGameOverWidget(
isfirst: 1,
pseudo: 'Momo',
score: 160,
),
top: 10,
),
Positioned(
child: PodiumGameOverWidget(
isfirst: 3,
pseudo: 'popo',
score: 110,
),
top: 70,
right: 30,
)*/
],
),
child: Stack(
alignment: Alignment.topCenter,
children: [
rank.length > 1
? Positioned(
child: PodiumGameOverWidget(
isfirst: 2,
player: pseudoList[1],
score: scoreList[1],
),
top: 70,
left: 30,
)
: Container(),
rank.length > 0
? Positioned(
child: PodiumGameOverWidget(
isfirst: 1,
player: pseudoList[0],
score: scoreList[0],
),
top: 10,
)
: Container(),
rank.length > 2
? Positioned(
child: PodiumGameOverWidget(
isfirst: 3,
player: pseudoList[2],
score: scoreList[2],
),
top: 70,
right: 30,
)
: Container()
],
)),
]),
)

@ -1,5 +1,6 @@
import 'dart:ui';
import 'package:bowl_in/main.dart';
import 'package:bowl_in/widgets/profil_listpodium_widget.dart';
import 'package:bowl_in/widgets/scores_list_widget.dart';
import 'package:flutter/cupertino.dart';
@ -9,11 +10,13 @@ import 'package:google_fonts/google_fonts.dart';
import '../model/AbstractRound.dart';
import '../model/GameDetail.dart';
import '../model/Guest.dart';
import '../model/Player.dart';
import '../model/User.dart';
class FinalScoreBoard extends StatefulWidget {
final GameDetail gameDeatil;
const FinalScoreBoard({Key? key, required this.gameDeatil}) : super(key: key);
final GameDetail gameDetail;
const FinalScoreBoard({Key? key, required this.gameDetail}) : super(key: key);
@override
State<FinalScoreBoard> createState() => _FinalScoreBoardState();
@ -25,7 +28,7 @@ class _FinalScoreBoardState extends State<FinalScoreBoard> {
late List<int> scoreList;
@override
void initState() {
rank = widget.gameDeatil.getRank();
rank = widget.gameDetail.getRank();
pseudoList = rank.keys.toList();
scoreList = rank.values.toList();
super.initState();
@ -248,13 +251,37 @@ class PodiumGameOverWidget extends StatelessWidget {
}
class InGameCardConfig extends StatefulWidget {
const InGameCardConfig({Key? key}) : super(key: key);
final List<Player> listPlayer;
const InGameCardConfig({Key? key, required this.listPlayer}) : super(key: key);
@override
State<InGameCardConfig> createState() => _InGameCardConfigState();
}
class _InGameCardConfigState extends State<InGameCardConfig> {
@override
void initState() {
super.initState();
}
void onDelete(Player p){
setState(() {
widget.listPlayer.remove(p);
});
}
void onReorder(int oldIndex, int newIndex){
setState(() {
if (oldIndex < newIndex) {
newIndex -= 1;
}
final Player item = widget.listPlayer.removeAt(oldIndex);
widget.listPlayer.insert(newIndex, item);
});
}
@override
Widget build(BuildContext context) {
return Container(
@ -298,7 +325,7 @@ class _InGameCardConfigState extends State<InGameCardConfig> {
],
),
)),
ListUserInGame(),
ListUserInGame(listPlayer: widget.listPlayer, onDelete: onDelete, onReorder: onReorder,),
Spacer(),
Image(
image: AssetImage("assets/images/start_sentence.png"),
@ -307,7 +334,12 @@ class _InGameCardConfigState extends State<InGameCardConfig> {
Padding(
padding: EdgeInsets.fromLTRB(15, 0, 15, 15),
child: ElevatedButton(
onPressed: () {},
onPressed: () {
setState(() {
if (widget.listPlayer.length < 10)
widget.listPlayer.add(new Guest("guest"));
});
},
child: Text(
"+ Add a player",
style: GoogleFonts.roboto(
@ -332,13 +364,17 @@ class _InGameCardConfigState extends State<InGameCardConfig> {
}
class ListUserInGame extends StatefulWidget {
const ListUserInGame({Key? key}) : super(key: key);
final List<Player> listPlayer;
final Function(Player) onDelete;
final Function(int, int) onReorder;
const ListUserInGame({Key? key, required this.listPlayer, required this.onDelete, required this.onReorder}) : super(key: key);
@override
State<ListUserInGame> createState() => _ListUserInGameState();
}
class _ListUserInGameState extends State<ListUserInGame> {
@override
Widget build(BuildContext context) {
return Padding(
@ -347,23 +383,31 @@ class _ListUserInGameState extends State<ListUserInGame> {
crossAxisAlignment: CrossAxisAlignment.end,
children: [
ConstrainedBox(
constraints: new BoxConstraints(
maxHeight: 170,
),
child: ListView(children: [
UserInGame(),
UserInGame(),
UserInGame(),
UserInGame(),
UserInGame(),
])),
Text(
"3 player(s)",
style: GoogleFonts.roboto(
fontWeight: FontWeight.w500,
fontSize: 15,
color: CupertinoColors.black,
decoration: TextDecoration.none),
constraints: new BoxConstraints(
maxHeight: 170,
),
child: ReorderableListView.builder(
itemCount: widget.listPlayer.length,
itemBuilder: (context, index) {
return UserInGame(key:ValueKey(widget.listPlayer[index]) ,player: widget.listPlayer[index], onDelete: widget.onDelete, index: index);
},
onReorder: widget.onReorder,
),
),
RichText(
text: TextSpan(
text: widget.listPlayer.length.toString(),
style: GoogleFonts.roboto(
fontWeight: FontWeight.w500,
fontSize: 15,
color: CupertinoColors.black,
decoration: TextDecoration.none),
children: const <TextSpan>[
TextSpan(
text: ' player(s)',
style: TextStyle(fontWeight: FontWeight.bold)),
],
),
)
],
));
@ -371,13 +415,17 @@ class _ListUserInGameState extends State<ListUserInGame> {
}
class UserInGame extends StatefulWidget {
const UserInGame({Key? key}) : super(key: key);
final Player player;
final Function(Player) onDelete;
final int index;
const UserInGame({Key? key, required this.player, required this.onDelete, required this.index}) : super(key: key);
@override
State<UserInGame> createState() => _UserInGameState();
}
class _UserInGameState extends State<UserInGame> {
final userNameTextField = TextEditingController();
@override
Widget build(BuildContext context) {
return Container(
@ -393,27 +441,61 @@ class _UserInGameState extends State<UserInGame> {
),
child: Row(
children: [
Container(
ReorderableDragStartListener(
index: widget.index,
child : Container(
width: 30,
height: 30,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(70)),
image: DecorationImage(
image: AssetImage("assets/images/image_user_cyan.png"),
fit: BoxFit.cover),
image: AssetImage(widget.player.image), fit: BoxFit.cover),
),
),
),
SizedBox(
width: 10,
),
Text(
"Emre",
style: GoogleFonts.roboto(
fontSize: 18,
decoration: TextDecoration.none,
color: Color(0xff241E40)),
widget.player is Guest
? Material(
surfaceTintColor: Colors.transparent,
child: SizedBox(
width: 220,
child: TextField(
controller: userNameTextField,
style: const TextStyle(color: Colors.black),
decoration: InputDecoration(
border: InputBorder.none,
filled: true,
fillColor: Color(0xffF2F2F2),
hintText: 'Pseudonyme',
),
cursorColor: Colors.purple,
textAlign: TextAlign.left,
onChanged: (str)=> widget.player.name=str
,
),
),
)
: SizedBox(
width: 220,
child: Text(
widget.player.name,
style: GoogleFonts.roboto(
fontSize: 18,
decoration: TextDecoration.none,
color: Color(0xff241E40))
),
),
(widget.player is User && (widget.player as User).id == MyApp.controller.userCurrent.id) ?
Icon(Icons.lock, color: Colors.amber) :
GestureDetector(
onTap: () {
widget.onDelete(widget.player);
},
child: Icon(Icons.close)
),
Spacer(),
Spacer()
],
),
);
@ -437,17 +519,8 @@ class InGameCardThrow extends StatefulWidget {
class _InGameCardThrowState extends State<InGameCardThrow> {
GlobalKey<_NumberPadState> _numberPadKey = GlobalKey();
late var maxValue;
void initState() {
if (widget.currentRound.firstThrow == null) {
maxValue = 10;
} else if (widget.currentRound.secondThrow == null) {
maxValue = 10 - (widget.currentRound.firstThrow ?? 0);
} else {
maxValue = 10;
}
super.initState();
}
@ -522,7 +595,7 @@ class _InGameCardThrowState extends State<InGameCardThrow> {
numberThrow: widget.numberThrow,
setSelectedValue: widget.setSelectedValue,
currentRound: widget.currentRound,
maxValue: maxValue,
maxValue: widget.currentRound.getMaxPinsThisShot(),
),
],
),
@ -602,7 +675,10 @@ class SpareButton extends StatelessWidget {
final IntCallback onSonChanged;
final int valueToReturn;
const SpareButton(
{Key? key, required this.onSonChanged, required this.currentSelected, required this.valueToReturn})
{Key? key,
required this.onSonChanged,
required this.currentSelected,
required this.valueToReturn})
: super(key: key);
@override
@ -622,8 +698,9 @@ class SpareButton extends StatelessWidget {
child: Text(
"SPARE !",
style: GoogleFonts.roboto(
color:
currentSelected == valueToReturn ? Colors.pink : CupertinoColors.black,
color: currentSelected == valueToReturn
? Colors.pink
: CupertinoColors.black,
decoration: TextDecoration.none,
fontWeight: FontWeight.w900,
fontStyle: FontStyle.italic,

@ -111,12 +111,9 @@ class CardGame extends StatelessWidget {
child: Wrap(
spacing: 5,
runSpacing: 5,
children: game.playersId
children: game.players
.map((e) => ProfilPicture(
path: MyApp.controller.userMgr
.getUserById(e)
.image
.toString(),
path: e.image.toString(),
))
.toList()))),
const Spacer(),
@ -149,7 +146,9 @@ class CardGame extends StatelessWidget {
showDialog(
context: context,
builder: (BuildContext context) {
return ScoreBoardModal();
return ScoreBoardModal(
gamedetail:
MyApp.controller.gameMgr.getGameById(game.id));
});
},
));

Loading…
Cancel
Save