stack_wallet/lib/pages/notification_views/notifications_view.dart

112 lines
3.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:stackwallet/notifications/notification_card.dart';
import 'package:stackwallet/providers/providers.dart';
import 'package:stackwallet/providers/ui/unread_notifications_provider.dart';
import 'package:stackwallet/themes/stack_colors.dart';
import 'package:stackwallet/utilities/text_styles.dart';
import 'package:stackwallet/widgets/background.dart';
import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart';
import 'package:stackwallet/widgets/rounded_white_container.dart';
class NotificationsView extends ConsumerStatefulWidget {
const NotificationsView({
Key? key,
this.walletId,
}) : super(key: key);
final String? walletId;
static const routeName = "/notifications";
@override
ConsumerState<NotificationsView> createState() => _NotificationsViewState();
}
class _NotificationsViewState extends ConsumerState<NotificationsView> {
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
final notifications = widget.walletId == null
? ref
.watch(notificationsProvider.select((value) => value.notifications))
: ref
.watch(notificationsProvider.select((value) => value.notifications))
.where((element) => element.walletId == widget.walletId)
.toList(growable: false);
return Background(
child: Scaffold(
backgroundColor: Theme.of(context).extension<StackColors>()!.background,
appBar: AppBar(
title: Text(
"Notifications",
style: STextStyles.navBarTitle(context),
),
leading: AppBarBackButton(
onPressed: () async {
Navigator.of(context).pop();
},
),
),
body: Padding(
padding: const EdgeInsets.all(12),
child: notifications.isNotEmpty
? Column(
children: [
Expanded(
child: ListView.builder(
shrinkWrap: true,
itemCount: notifications.length,
itemBuilder: (builderContext, index) {
final notification = notifications[index];
if (notification.read == false) {
ref
.read(unreadNotificationsStateProvider.state)
.state
.add(notification.id);
}
return Padding(
padding: const EdgeInsets.all(4),
child: NotificationCard(
notification: notifications[index],
),
);
},
),
),
],
)
: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.all(4),
child: RoundedWhiteContainer(
child: Center(
child: FittedBox(
fit: BoxFit.scaleDown,
child: Text(
"Notifications will appear here",
style: STextStyles.itemSubtitle(context),
),
),
),
),
)
],
),
),
),
);
}
}