Skip to content

Commit

Permalink
n
Browse files Browse the repository at this point in the history
  • Loading branch information
Hareesh-Nandigrama committed Aug 7, 2023
1 parent dfbe508 commit 8f442e2
Show file tree
Hide file tree
Showing 12 changed files with 183 additions and 200 deletions.
27 changes: 0 additions & 27 deletions lib/functions/notifications/get_notifications.dart

This file was deleted.

4 changes: 3 additions & 1 deletion lib/globals/endpoints.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ class Endpoints {
static const String userProfile = "/user";
static const String userDeviceTokens = "/user/device-tokens";
static const String userNotifPrefs = "/user/notifs/prefs";
//static const String userLogout = "/user/logout";
static const String generalNotifications = "/notification";
static const String userNotifications = "/user/notifs";

static getHeader() {
return {'Content-Type': 'application/json', 'security-key': Endpoints.apiSecurityKey};
}
Expand Down
30 changes: 30 additions & 0 deletions lib/models/notifications/notification_model.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import 'package:json_annotation/json_annotation.dart';
part 'notification_model.g.dart';

@JsonSerializable()
class NotifsModel {
String? title;
String? body;
String category = "Lost";
bool? read = false;

@JsonKey(name: "createdAt")
DateTime? time = DateTime.now();

@JsonKey(name: "_id")
String messageId = "";
NotifsModel(
{
this.title,
this.body,
this.read,
required this.category,
required this.time,
required this.messageId
});

factory NotifsModel.fromJson(Map<String, dynamic> map) =>
_$NotifsModelFromJson(map);

Map<String, dynamic> toJson() => _$NotifsModelToJson(this);
}
104 changes: 49 additions & 55 deletions lib/pages/notifications/notifications.dart
Original file line number Diff line number Diff line change
@@ -1,35 +1,20 @@
import 'dart:convert';
import 'package:fluentui_system_icons/fluentui_system_icons.dart';
import 'package:flutter/material.dart';
import 'package:onestop_dev/functions/notifications/get_notifications.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:onestop_dev/globals/my_colors.dart';
import 'package:onestop_dev/globals/my_fonts.dart';
import 'package:onestop_dev/models/notifications/notification_model.dart';
import 'package:onestop_dev/pages/notifications/notification_settings.dart';
import 'package:onestop_dev/services/api.dart';
import 'package:onestop_dev/services/data_provider.dart';
import 'package:onestop_dev/stores/common_store.dart';
import 'package:onestop_dev/stores/login_store.dart';
import 'package:onestop_dev/widgets/ui/list_shimmer.dart';
import 'package:onestop_dev/widgets/notifications/notification_tile.dart';
import 'package:shared_preferences/shared_preferences.dart';

class NotifsModel {
String? title;
String? body;
String category;
bool read;
DateTime time;
String messageId;

NotifsModel(
this.title,
this.body,
this.read,
this.category,
this.time,
this.messageId
);
}
import 'package:onestop_dev/widgets/ui/list_shimmer.dart';
import 'package:provider/provider.dart';

class NotificationPage extends StatefulWidget {
static String id = "notifications";
static String id = "/notifications";
const NotificationPage({Key? key}) : super(key: key);

@override
Expand All @@ -52,6 +37,7 @@ class _NotificationPageState extends State<NotificationPage> {

@override
Widget build(BuildContext context) {
var store = context.read<CommonStore>();
return Scaffold(
appBar: AppBar(
backgroundColor: kAppBarGrey,
Expand All @@ -62,9 +48,9 @@ class _NotificationPageState extends State<NotificationPage> {
MaterialPageRoute(builder: (context)=>const NotificationSettings())
);
},
child: Padding(
padding: const EdgeInsets.only(right:16),
child: const Icon(
child: const Padding(
padding: EdgeInsets.only(right:16),
child: Icon(
Icons.settings,
color: kWhite2,
),
Expand All @@ -81,30 +67,38 @@ class _NotificationPageState extends State<NotificationPage> {
style: MyFonts.w500,
),
),
body: FutureBuilder<List<NotifsModel>>(
future: getSavedNotifications(true),
body: FutureBuilder<Map<String, List<NotifsModel>>>(
future: DataProvider.getNotifications(),
builder: (context, snapshot) {
if (snapshot.hasData) {
if (snapshot.data!.isEmpty) {
return Center(
child: Text(
'No notifications found',
style: MyFonts.w300.setColor(kWhite),
),
);
}
if(snapshot.data!["userPersonalNotifs"]!.isEmpty && snapshot.data!["allTopicNotifs"]!.isEmpty)
{
return Center(
child: Text(
'No notifications found',
style: MyFonts.w300.setColor(kWhite),
),
);
}
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: ListView.builder(
itemCount: snapshot.data!.length,
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 4.0),
child: NotificationTile(
notifModel: snapshot.data![index],
child: Column(
children: [
for(NotifsModel notif in snapshot.data!["userPersonalNotifs"]!)
Padding(
padding: const EdgeInsets.symmetric(vertical: 4.0),
child: NotificationTile(
notifModel: notif,
),
),
);
},
for(NotifsModel notif in snapshot.data!["allTopicNotifs"]!)
Padding(
padding: const EdgeInsets.symmetric(vertical: 4.0),
child: NotificationTile(
notifModel: notif,
),
),
],
),
);
}
Expand All @@ -128,16 +122,16 @@ class _NotificationPageState extends State<NotificationPage> {
),
);
}),
floatingActionButton: FloatingActionButton(
onPressed: () async{
final SharedPreferences prefs =
await SharedPreferences.getInstance();
await prefs.reload();
prefs.remove('notifications');
setState(() {});
},
backgroundColor: lBlue2,
child: Icon(Icons.cancel),
floatingActionButton: Observer(
builder: (context) {
return store.isPersonalNotif ? FloatingActionButton(
onPressed: () async{
await APIService().deletePersonalNotif();
},
backgroundColor: lBlue2,
child: const Icon(Icons.delete),
): Container();
}
),
);
}
Expand Down
33 changes: 16 additions & 17 deletions lib/services/api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -137,27 +137,33 @@ class APIService {
Future<void> updateUserProfile(Map data, String? deviceToken) async {
Map<String, dynamic> queryParameters = {};
if (deviceToken != null) queryParameters["deviceToken"] = deviceToken;
var response = await dio.patch(Endpoints.userProfile,
await dio.patch(Endpoints.userProfile,
data: data, queryParameters: queryParameters);
print(response);
}

Future<List<Response>> getNotifications() async {
final results = await Future.wait([
dio.get(Endpoints.generalNotifications),
dio.get(Endpoints.userNotifications)
]);
return results;
}

Future<void> deletePersonalNotif() async {
await dio.delete(Endpoints.userNotifications);
}

Future<void> postUserDeviceToken(String deviceToken) async {
var response = await dio
await dio
.post(Endpoints.userDeviceTokens, data: {"deviceToken": deviceToken});
print(response);
}

Future<void> updateUserDeviceToken(Map data) async {
print(data);
var response = await dio.patch(Endpoints.userDeviceTokens, data: data);
print(response);
await dio.patch(Endpoints.userDeviceTokens, data: data);
}

Future<void> updateUserNotifPref(Map data) async {
print(data);
var response = await dio.patch(Endpoints.userNotifPrefs, data: data);
print(response);
await dio.patch(Endpoints.userNotifPrefs, data: data);
}

Future<List<Map<String, dynamic>>> getRestaurantData() async {
Expand Down Expand Up @@ -209,7 +215,6 @@ class APIService {

Future<List> getBuyItems() async {
var response = await dio.get(Endpoints.buyURL);
print(response.data);
return response.data.details;
}

Expand Down Expand Up @@ -293,13 +298,11 @@ class APIService {
}

Future<List<SellModel>> getBuyPage(int pageNumber) async {
print(pageNumber);
final queryParameters = {
'page': pageNumber.toString(),
};
var response =
await dio.get(Endpoints.buyPath, queryParameters: queryParameters);
print(response);
var json = response.data;
List<SellModel> buyPage = (json['details'] as List<dynamic>)
.map((e) => SellModel.fromJson(e))
Expand Down Expand Up @@ -496,8 +499,6 @@ class APIService {
final res = await dio.get(Endpoints.messURL);
return res.data;
} catch (e) {
print(Endpoints.messURL);
print(e);
rethrow;
}
}
Expand All @@ -507,8 +508,6 @@ class APIService {
final res = await dio.get(Endpoints.busStops);
return res.data;
} catch (e) {
print("____________________________________________");
print(e);
rethrow;
}
}
Expand Down
23 changes: 23 additions & 0 deletions lib/services/data_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:onestop_dev/models/contacts/contact_model.dart';
import 'package:onestop_dev/models/food/mess_menu_model.dart';
import 'package:onestop_dev/models/food/restaurant_model.dart';
import 'package:onestop_dev/models/news/news_model.dart';
import 'package:onestop_dev/models/notifications/notification_model.dart';
import 'package:onestop_dev/models/timetable/registered_courses.dart';
import 'package:onestop_dev/services/api.dart';
import 'package:onestop_dev/services/local_storage.dart';
Expand Down Expand Up @@ -187,6 +188,28 @@ class DataProvider {
}
}

static Future<Map<String, List<NotifsModel>>> getNotifications()
async {
var response = await APIService().getNotifications();
Map<String, List<NotifsModel>> output = {
"userPersonalNotifs": [],
"allTopicNotifs": []
};

for(var notif in response[0].data["allTopicNotifs"]!)
{
print(notif);
output["allTopicNotifs"]!.add(NotifsModel.fromJson(notif));
}
for(var notif in response[1].data["userPersonalNotifs"]!)
{
print(notif);
output["userPersonalNotifs"]!.add(NotifsModel.fromJson(notif));
}
print("here");
return output;
}

static Future<List<TravelTiming>> getFerryTiming() async {
var cachedData =
await LocalStorage.instance.getRecord(DatabaseRecords.ferryTimings);
Expand Down
Loading

0 comments on commit 8f442e2

Please sign in to comment.