2022-11-19 05:00:17 +00:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart';
|
2022-11-22 04:46:34 +00:00
|
|
|
import 'package:provider/provider.dart';
|
2022-11-19 05:00:17 +00:00
|
|
|
|
|
|
|
import '../models/user_notification.dart';
|
2022-11-22 04:46:34 +00:00
|
|
|
import '../services/notifications_manager.dart';
|
2022-11-19 05:00:17 +00:00
|
|
|
import '../utils/dateutils.dart';
|
2022-11-22 04:46:34 +00:00
|
|
|
import '../utils/snackbar_builder.dart';
|
2022-11-19 05:00:17 +00:00
|
|
|
|
|
|
|
class NotificationControl extends StatelessWidget {
|
|
|
|
final UserNotification notification;
|
|
|
|
|
|
|
|
const NotificationControl({
|
|
|
|
super.key,
|
|
|
|
required this.notification,
|
|
|
|
});
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
2022-11-22 04:46:34 +00:00
|
|
|
final manager = context.watch<NotificationsManager>();
|
2022-11-19 05:00:17 +00:00
|
|
|
return ListTile(
|
|
|
|
tileColor: notification.seen ? null : Colors.black12,
|
|
|
|
leading: Text(notification.fromName),
|
|
|
|
title: HtmlWidget(notification.content),
|
|
|
|
subtitle:
|
|
|
|
Text(ElapsedDateUtils.epochSecondsToString(notification.timestamp)),
|
|
|
|
trailing: notification.seen
|
|
|
|
? null
|
2022-11-22 04:46:34 +00:00
|
|
|
: IconButton(
|
|
|
|
onPressed: () async {
|
|
|
|
final result = await manager.markSeen(notification);
|
|
|
|
if (result.isFailure) {
|
|
|
|
buildSnackbar(
|
|
|
|
context, 'Error marking notification: ${result.error}');
|
|
|
|
}
|
|
|
|
},
|
|
|
|
icon: Icon(Icons.close_rounded)),
|
2022-11-19 05:00:17 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|