Skip to content

Commit

Permalink
Visual changes, bug fixes, API connections
Browse files Browse the repository at this point in the history
  • Loading branch information
jumpiniasty committed Jul 20, 2023
1 parent 7c061a4 commit 2c41768
Show file tree
Hide file tree
Showing 22 changed files with 419 additions and 103 deletions.
7 changes: 4 additions & 3 deletions lib/controllers/party_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,10 @@ class PartyController {
"Authorization": "Bearer $token",
},
);
final parties = <Party>[
for (final p in jsonDecode(res.body)["results"]) Party.fromMap(p),
];
final parties = <Party>[];
for (final p in jsonDecode(res.body)["results"]) {
parties.add(Party.fromMap(p));
}
return parties;
}

Expand Down
13 changes: 7 additions & 6 deletions lib/controllers/party_creator_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ import '../models/party.dart';
import '../models/party_request.dart';
import '../utils/ext.dart' show LatLngConvert;

///Used by the party creator to control owned parties
/// Used by the party creator to control owned parties
class PartyCreatorController {
///Returns a list of all parties created by the user
/// Returns a list of all parties created by the user
static Future<List<Party>> ownedParties() async {
const storage = FlutterSecureStorage();
final token = await storage.read(key: "access");
Expand All @@ -32,7 +32,7 @@ class PartyCreatorController {
return parties;
}

///Creates a party using information provided in [party]
/// Creates a party using information provided in [party]
static Future<Party?> createParty(Party party) async {
const storage = FlutterSecureStorage();
final token = await storage.read(key: "access");
Expand Down Expand Up @@ -69,7 +69,7 @@ class PartyCreatorController {
return Party.fromMap(jsonDecode(await res.stream.bytesToString()));
}

///Deletes party with the provided [id]
/// Deletes party with the provided [id]
static Future<bool> deleteParty(String id) async {
const storage = FlutterSecureStorage();
final token = await storage.read(key: "access");
Expand All @@ -84,7 +84,7 @@ class PartyCreatorController {
return res.statusCode == 204;
}

//FIXME sending request
/// Accepts incoming party join request
static Future<bool> acceptPartyRequest(PartyRequest req) async {
const storage = FlutterSecureStorage();
final token = await storage.read(key: "access");
Expand All @@ -98,7 +98,7 @@ class PartyCreatorController {
return res.statusCode == 201;
}

//FIXME sending request
/// Rejects incoming party join request
static Future<bool> rejectPartyRequest(PartyRequest req) async {
const storage = FlutterSecureStorage();
final token = await storage.read(key: "access");
Expand All @@ -112,6 +112,7 @@ class PartyCreatorController {
return res.statusCode == 204;
}

/// Sends party invitation to provided user [f]
static Future<bool> sendPartyInvitation(Party p, Friend f) async {
const storage = FlutterSecureStorage();
final token = await storage.read(key: "access");
Expand Down
30 changes: 24 additions & 6 deletions lib/controllers/user_controller.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'dart:convert';
import 'dart:io';
import 'package:drinkify/models/friend.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:http/http.dart' as http;
import 'package:http_parser/http_parser.dart';
Expand All @@ -11,9 +12,9 @@ import '../models/friend_invitiation.dart';
import '../models/party_invitation.dart';
import '../models/party_request.dart';

///Used for getting information about the user, updating, deleting and searching
/// Used for getting information about the user, updating, deleting and searching
class UserController {
///Returns information about you
/// Returns information about you
static Future<User> me() async {
const storage = FlutterSecureStorage();
final token = await storage.read(key: "access");
Expand Down Expand Up @@ -91,6 +92,7 @@ class UserController {
return res.statusCode == 200;
}

// Sends a friend invitation
static Future<bool> sendFriendInvitation(FriendInvitation inv) async {
const storage = FlutterSecureStorage();
final token = await storage.read(key: "access");
Expand All @@ -112,7 +114,7 @@ class UserController {
return res.statusCode == 201;
}

///Retrieves a list of friend invitaions
/// Retrieves a list of friend invitaions
static Future<List<FriendInvitation>> friendInvitations() async {
const storage = FlutterSecureStorage();
final token = await storage.read(key: "access");
Expand All @@ -132,7 +134,7 @@ class UserController {
return invitations;
}

// FIXME url
/// Accepts friend invitation
static Future<bool> acceptFriendInvitation(FriendInvitation inv) async {
const storage = FlutterSecureStorage();
final token = await storage.read(key: "access");
Expand All @@ -154,6 +156,7 @@ class UserController {
return res.statusCode == 201;
}

/// Rejects friend invitation
static Future<bool> rejectFriendInvitation(FriendInvitation inv) async {
const storage = FlutterSecureStorage();
final token = await storage.read(key: "access");
Expand All @@ -168,7 +171,7 @@ class UserController {
return res.statusCode == 201;
}

///Retrieves a list of party invitations
/// Retrieves a list of party invitations
static Future<List<PartyInvitation>> partyInvitations() async {
const storage = FlutterSecureStorage();
final token = await storage.read(key: "access");
Expand All @@ -187,7 +190,7 @@ class UserController {
return invitations;
}

///Retrieves a list of join requests to user's owned parties
/// Retrieves a list of join requests to user's owned parties
static Future<List<PartyRequest>> joinRequests() async {
const storage = FlutterSecureStorage();
final token = await storage.read(key: "access");
Expand All @@ -205,4 +208,19 @@ class UserController {
}
return requests;
}

/// Removes friend from user's friend list
static Future<bool> removeFriend(Friend f) async {
const storage = FlutterSecureStorage();
final token = await storage.read(key: "access");
final url = "$mainUrl/friends/${f.publicId}/";
final res = await http.delete(
Uri.parse(url),
headers: {
"Authorization": "Bearer $token",
},
);

return res.statusCode == 204;
}
}
7 changes: 7 additions & 0 deletions lib/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@
"addAFriend": "Add a friend",
"emptyHere": "Empty here :(",
"partiesProfile2": "Parties",
"showProfile": "Show profile",
"removeFriend": "Remove friend",
"removeFriendSuccess": "Friend removed successfully",
"removeFriendFailure": "Could not remove friend",

"notificationsNotifications": "Notifications",
"notificationFrom": "From",
Expand Down Expand Up @@ -85,6 +89,8 @@
"mapError": "It seems like you don't have any maps installed on your device.",
"joinRequestSuccess": "Join request sent",
"joinRequestFailure": "Could not send join request",
"selectedParty": "Party",
"you": "You",

"logIn": "Log in",
"loginFailed": "Login failed",
Expand Down Expand Up @@ -119,6 +125,7 @@
"partyEnd": "End",
"searchAFriend": "Search for a friend",
"invite": "Invite",
"invitedUser": "Invited",
"invitedFriends": "Invited friends",
"create": "Create",
"creatingParty": "Creating party...",
Expand Down
7 changes: 7 additions & 0 deletions lib/l10n/app_pl.arb
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@
"addAFriend": "Dodaj znajomego",
"emptyHere": "Pusto tutaj :(",
"partiesProfile2": "Imprezy",
"showProfile": "Pokaż profil",
"removeFriend": "Usuń znajomego",
"removeFriendSuccess": "Usunięto znajomego",
"removeFriendFailure": "Nie udało się usunąć znajomego",

"notificationsNotifications": "Powiadomienia",
"notificationFrom": "Od",
Expand Down Expand Up @@ -85,6 +89,8 @@
"mapError": "Wygląda na to, że nie masz zainstalowanych map na swoim urządzeniu.",
"joinRequestSuccess": "Wysłano prośbę o dołączenie",
"joinRequestFailure": "Nie wysłano prośby",
"selectedParty": "Impreza",
"you": "Ty",

"logIn": "Zaloguj się",
"loginFailed": "Nie udało się zalogować",
Expand Down Expand Up @@ -119,6 +125,7 @@
"partyEnd": "Koniec",
"searchAFriend": "Wyszukaj znajomego",
"invite": "Zaproś",
"invitedUser": "Zaproszono",
"invitedFriends": "Zaproszeni znajomi",
"create": "Stwórz",
"creatingParty": "Tworzenie imprezy...",
Expand Down
50 changes: 42 additions & 8 deletions lib/routes/create_party_routes/invite_friends_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,15 +66,47 @@ class _InviteFriendsPageState extends State<InviteFriendsPage> {
user,
onButtonTap: () {
if (invitedUsers.contains(user)) return;
invitedUsers.add(user);
setState(() => invitedUsers.add(user));
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
duration: const Duration(seconds: 2),
behavior: SnackBarBehavior.floating,
elevation: 0,
backgroundColor:
Theming.whiteTone.withOpacity(0.1),
content: Row(
children: [
Text(
"${AppLocalizations.of(context)!.invitedUser} ",
style: const TextStyle(
color: Theming.whiteTone,
fontWeight: FontWeight.bold,
),
),
Text(
"@${user.username}",
style: const TextStyle(
color: Theming.greenTone,
fontWeight: FontWeight.bold,
),
),
],
),
),
);
},
buttonChild: Text(
AppLocalizations.of(context)!.invite,
style: const TextStyle(
color: Theming.whiteTone,
fontWeight: FontWeight.bold,
),
),
buttonChild: invitedUsers.contains(user)
? const Icon(
Icons.check_rounded,
color: Theming.primaryColor,
)
: Text(
AppLocalizations.of(context)!.invite,
style: const TextStyle(
color: Theming.primaryColor,
fontWeight: FontWeight.bold,
),
),
),
],
)
Expand All @@ -88,6 +120,8 @@ class _InviteFriendsPageState extends State<InviteFriendsPage> {
),
),
),

//TODO implement searching
GlassMorphism(
borderRadius: BorderRadius.circular(30),
blur: 20,
Expand Down
19 changes: 12 additions & 7 deletions lib/routes/friend_list.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:drinkify/widgets/dialogs/friend_option_sheet.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
Expand Down Expand Up @@ -90,13 +91,17 @@ class _FriendListPageState extends State<FriendListPage> {
for (final f in friends)
UserHolder(
f,
onButtonTap: () => context.go("/profile", extra: f),
buttonChild: Text(
AppLocalizations.of(context)!.navbarProfile,
style: const TextStyle(
color: Theming.whiteTone,
fontWeight: FontWeight.bold,
),
onButtonTap: () {
showModalBottomSheet(
context: context,
backgroundColor: Theming.bgColor,
isScrollControlled: true,
builder: (_) => FriendOptionSheet(f),
);
},
buttonChild: const Icon(
Icons.more_vert,
color: Theming.primaryColor,
),
),
],
Expand Down
12 changes: 10 additions & 2 deletions lib/routes/notification_routes/friend_invitations_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ import '/utils/theming.dart';
import '/widgets/dialogs/notification_sheet.dart';

class FriendInvitationsPage extends StatelessWidget {
final VoidCallback onAction;
final List<FriendInvitation> notif;
const FriendInvitationsPage(
this.notif, {
this.notif,
this.onAction, {
super.key,
});

Expand Down Expand Up @@ -42,7 +44,13 @@ class FriendInvitationsPage extends StatelessWidget {
context: ctx,
backgroundColor: Theming.bgColor,
isScrollControlled: true,
builder: (_) => NotificationSheet(inv),
builder: (_) => NotificationSheet(
inv,
(obj) {
if (obj is! FriendInvitation) return;
onAction();
},
),
);
},
splashColor: Theming.whiteTone.withOpacity(0.05),
Expand Down
12 changes: 10 additions & 2 deletions lib/routes/notification_routes/party_invitations_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ import '/widgets/dialogs/notification_sheet.dart';

class PartyInvitationsPage extends StatelessWidget {
final List<PartyInvitation> notif;
final VoidCallback onAction;
const PartyInvitationsPage(
this.notif, {
this.notif,
this.onAction, {
super.key,
});

Expand Down Expand Up @@ -42,7 +44,13 @@ class PartyInvitationsPage extends StatelessWidget {
context: ctx,
backgroundColor: Theming.bgColor,
isScrollControlled: true,
builder: (_) => NotificationSheet(inv),
builder: (_) => NotificationSheet(
inv,
(obj) {
if (obj is! PartyInvitation) return;
onAction();
},
),
);
},
splashColor: Theming.whiteTone.withOpacity(0.05),
Expand Down
12 changes: 10 additions & 2 deletions lib/routes/notification_routes/party_requests_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ import '/widgets/dialogs/notification_sheet.dart';

class PartyRequestsPage extends StatelessWidget {
final List<PartyRequest> notif;
final VoidCallback onAction;
const PartyRequestsPage(
this.notif, {
this.notif,
this.onAction, {
super.key,
});

Expand Down Expand Up @@ -42,7 +44,13 @@ class PartyRequestsPage extends StatelessWidget {
context: ctx,
backgroundColor: Theming.bgColor,
isScrollControlled: true,
builder: (_) => NotificationSheet(inv),
builder: (_) => NotificationSheet(
inv,
(obj) {
if (obj is! PartyRequest) return;
onAction();
},
),
);
},
splashColor: Theming.whiteTone.withOpacity(0.05),
Expand Down
Loading

0 comments on commit 2c41768

Please sign in to comment.