Skip to content

Commit 9a4e0b3

Browse files
committed
modified transfers
1 parent 81217a8 commit 9a4e0b3

File tree

10 files changed

+355
-16
lines changed

10 files changed

+355
-16
lines changed

.vscode/settings.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"fullscreen",
99
"hometeam",
1010
"kickofftime",
11+
"LTRB",
1112
"matchdates",
1213
"matchs",
1314
"minutesplayed",

lib/apis/Apis.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,7 @@ class Apis {
7070
static String updateHandBallStats = "${apiUrl}handBall/update/";
7171
static String deleteHandBallStats = "${apiUrl}handBall/delete/";
7272
static String fetchHandBallPlayer = "${apiUrl}handBall/player/";
73+
// transfers
74+
static String transferredPlayers = "${apiUrl}player/";
75+
static String deleteTransfer = "${apiUrl}player/deleteTransfer/";
7376
}

lib/controllers/player_controller.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:samba_stats/models/player.dart';
12
import 'package:samba_stats/services/player_service.dart';
23

34
import '../models/handball_player_model.dart';
@@ -40,4 +41,24 @@ class PlayerController with ChangeNotifier {
4041
_isLoading = val;
4142
notifyListeners();
4243
}
44+
45+
// function to work on transfers
46+
List<Message> _transfers = [];
47+
List<Message> get transfers => _transfers;
48+
// handle loading
49+
bool _isTransferring = false;
50+
bool get isTransferring => _isTransferring;
51+
set isTransferring(bool val) {
52+
_isTransferring = val;
53+
}
54+
55+
//
56+
void fetchTransfers(String league) {
57+
isTransferring = true;
58+
PlayerService.getTransferredPlayers(league).then((data) {
59+
_transfers = data;
60+
isTransferring = false;
61+
notifyListeners();
62+
});
63+
}
4364
}

lib/models/player.dart

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
// To parse this JSON data, do
2+
//
3+
// final playersModel = playersModelFromJson(jsonString);
4+
15
import 'dart:convert';
26

37
PlayersModel playersModelFromJson(String str) =>
@@ -41,6 +45,7 @@ class Message {
4145
final DateTime createdAt;
4246
final DateTime updatedAt;
4347
final int v;
48+
final Team oldTeam;
4449

4550
Message({
4651
required this.cleanSheet,
@@ -57,6 +62,7 @@ class Message {
5762
required this.createdAt,
5863
required this.updatedAt,
5964
required this.v,
65+
required this.oldTeam,
6066
});
6167

6268
factory Message.fromJson(Map<String, dynamic> json) => Message(
@@ -74,6 +80,7 @@ class Message {
7480
createdAt: DateTime.parse(json["createdAt"]),
7581
updatedAt: DateTime.parse(json["updatedAt"]),
7682
v: json["__v"],
83+
oldTeam: Team.fromJson(json["old_team"] ?? {}),
7784
);
7885

7986
Map<String, dynamic> toJson() => {
@@ -91,6 +98,7 @@ class Message {
9198
"createdAt": createdAt.toIso8601String(),
9299
"updatedAt": updatedAt.toIso8601String(),
93100
"__v": v,
101+
"old_team": oldTeam.toJson(),
94102
};
95103
}
96104

@@ -106,9 +114,9 @@ class Team {
106114
});
107115

108116
factory Team.fromJson(Map<String, dynamic> json) => Team(
109-
id: json["_id"],
110-
name: json["name"],
111-
image: json["image"],
117+
id: json["_id"] ?? "",
118+
name: json["name"] ?? "",
119+
image: json["image"] ?? "",
112120
);
113121

114122
Map<String, dynamic> toJson() => {

lib/services/player_service.dart

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
// ignore_for_file: use_build_context_synchronously
2+
13
import 'dart:convert';
4+
import 'dart:developer';
5+
import 'dart:io';
26
import '../exports/exports.dart';
37
import '../models/handball_player_model.dart';
48
import '../models/player.dart';
@@ -116,7 +120,6 @@ class PlayerService {
116120
}
117121
} on ClientException catch (e) {
118122
context.read<LoaderController>().isLoading = false;
119-
120123
debugPrint(e.message);
121124
}
122125
}
@@ -208,6 +211,7 @@ class PlayerService {
208211

209212
static void transferPlayer(Map<String, dynamic> data) async {
210213
try {
214+
showLoader(text: "Recording transfer...");
211215
Response response = await Client().put(
212216
Uri.parse(
213217
"${Apis.transferPlayer + data['id']}/transferPlayer/${data['league']}"),
@@ -217,6 +221,7 @@ class PlayerService {
217221
},
218222
);
219223
if (response.statusCode == 200) {
224+
Routes.popPage();
220225
showMessage(
221226
msg: "Player transferred successfully", color: Colors.green);
222227
Routes.popPage();
@@ -266,4 +271,42 @@ class PlayerService {
266271
return Future.error(false);
267272
}
268273
}
274+
275+
static Future<List<Message>> getTransferredPlayers(String leagueId) async {
276+
try {
277+
final response = await Client().get(
278+
Uri.parse("${Apis.transferredPlayers}$leagueId/transferred"),
279+
);
280+
if (response.statusCode == 200) {
281+
// log(response.body);
282+
return playersModelFromJson(response.body).message;
283+
} else {
284+
return Future.error(jsonDecode(response.body)['message']);
285+
}
286+
} on ClientException catch (e) {
287+
return Future.error(e.message);
288+
} on SocketException catch (e) {
289+
return Future.error(e.message);
290+
} on HttpException catch (e) {
291+
return Future.error(e.message);
292+
}
293+
}
294+
295+
// delete transfer
296+
static Future deleteTransfer(String id) async {
297+
try {
298+
showLoader(text: "Deleting transfer.....");
299+
Response response = await Client().delete(
300+
Uri.parse(Apis.deleteTransfer + id),
301+
);
302+
if (response.statusCode == 200) {
303+
Routes.popPage();
304+
return Future.value(json.decode(response.body)['message']);
305+
} else {
306+
return Future.error(jsonDecode(response.body)['message']);
307+
}
308+
} catch (e) {
309+
return Future.error(e.toString());
310+
}
311+
}
269312
}

lib/tools/tools.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,13 @@ void showAdaptive(Widget page) {
3131
showAdaptiveDialog(
3232
context: navigatorKey.currentContext!,
3333
barrierDismissible: false,
34+
barrierColor: Theme.of(context).brightness == Brightness.light
35+
? null
36+
: Colors.white38,
3437
traversalEdgeBehavior: TraversalEdgeBehavior.leaveFlutterView,
35-
builder: (context) => Dialog(child: page),
38+
builder: (context) => Dialog(
39+
child: page,
40+
),
3641
);
3742
}
3843

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import '/models/player.dart';
2+
3+
import '/exports/exports.dart';
4+
5+
class TransferPlayer extends StatelessWidget {
6+
final Message player;
7+
const TransferPlayer({super.key, required this.player});
8+
9+
@override
10+
Widget build(BuildContext context) {
11+
return Card(
12+
color: Theme.of(context).brightness == Brightness.light
13+
? Colors.grey.shade100
14+
: Colors.white30,
15+
elevation: 0,
16+
shape: RoundedRectangleBorder(
17+
borderRadius: BorderRadius.circular(10),
18+
side: BorderSide(
19+
color: Theme.of(context).brightness == Brightness.light
20+
? Colors.grey.shade300
21+
: Colors.white54,
22+
width: 1,
23+
),
24+
),
25+
margin: const EdgeInsets.all(10),
26+
child: Column(
27+
children: [
28+
FittedBox(
29+
child: SizedBox(
30+
width: MediaQuery.of(context).size.width,
31+
height: 70,
32+
child: ListTile(
33+
leading: const CircleAvatar(
34+
child: Icon(Icons.person),
35+
),
36+
title: Text(player.name),
37+
trailing: Text(
38+
player.soldOut,
39+
style: const TextStyle(fontSize: 20),
40+
),
41+
),
42+
),
43+
),
44+
FittedBox(
45+
child: Padding(
46+
padding: const EdgeInsets.fromLTRB(0, 3, 0, 10),
47+
child: SizedBox(
48+
width: MediaQuery.of(context).size.width,
49+
height: 50,
50+
child: Row(
51+
children: [
52+
Expanded(
53+
flex: 3,
54+
child: ListTile(
55+
leading: CircleAvatar(
56+
backgroundImage: NetworkImage(player.oldTeam.image),
57+
),
58+
title: Text(player.oldTeam.name),
59+
trailing: const Icon(Icons.arrow_forward),
60+
),
61+
),
62+
Expanded(
63+
flex: 3,
64+
child: ListTile(
65+
leading: CircleAvatar(
66+
backgroundImage: NetworkImage(player.team.image),
67+
),
68+
title: Text(player.team.name),
69+
),
70+
),
71+
],
72+
),
73+
),
74+
),
75+
)
76+
],
77+
),
78+
);
79+
}
80+
}

lib/views/pages/sections/transfers/transfer_widget.dart

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,22 +43,22 @@ class _TransferWidgetState extends State<TransferWidget> {
4343
padding: EdgeInsets.fromLTRB(10, 7, 10, 0),
4444
child: Divider(),
4545
),
46-
InkWell(
47-
onTap: () {
46+
CommonTextField(
47+
controller: newTeamController,
48+
titleText: "New Team",
49+
padding: const EdgeInsets.fromLTRB(10, 5, 10, 5),
50+
enableBorder: true,
51+
hintText: "New team's name appears here...",
52+
enableSuffix: true,
53+
suffixIcon: Icons.add_card,
54+
onTapSuffix: () {
4855
showModalSheet(
4956
ShowTransferTeams(
5057
teamId: widget.leagueId,
5158
),
5259
);
5360
},
54-
child: CommonTextField(
55-
controller: newTeamController,
56-
titleText: "New Teams",
57-
padding: const EdgeInsets.fromLTRB(10, 5, 10, 5),
58-
enableBorder: true,
59-
hintText: "Enter new team name",
60-
readOnly: true,
61-
),
61+
readOnly: true,
6262
),
6363
CommonTextField(
6464
controller: soldController,

0 commit comments

Comments
 (0)