2022-09-15 21:38:30 +00:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
2022-11-18 18:45:42 +00:00
|
|
|
import 'package:stackwallet/pages_desktop_specific/desktop_exchange/desktop_exchange_view.dart';
|
2022-11-09 23:23:53 +00:00
|
|
|
import 'package:stackwallet/pages_desktop_specific/home/address_book_view/desktop_address_book.dart';
|
2022-09-15 21:38:30 +00:00
|
|
|
import 'package:stackwallet/pages_desktop_specific/home/desktop_menu.dart';
|
2022-10-17 16:50:37 +00:00
|
|
|
import 'package:stackwallet/pages_desktop_specific/home/desktop_settings_view.dart';
|
2022-09-16 16:23:42 +00:00
|
|
|
import 'package:stackwallet/pages_desktop_specific/home/my_stack_view/my_stack_view.dart';
|
2022-11-14 15:50:58 +00:00
|
|
|
import 'package:stackwallet/pages_desktop_specific/home/notifications/desktop_notifications_view.dart';
|
2022-11-07 17:42:55 +00:00
|
|
|
import 'package:stackwallet/pages_desktop_specific/home/support_and_about_view/desktop_about_view.dart';
|
2022-11-07 15:15:44 +00:00
|
|
|
import 'package:stackwallet/pages_desktop_specific/home/support_and_about_view/desktop_support_view.dart';
|
2022-11-14 16:40:31 +00:00
|
|
|
import 'package:stackwallet/providers/desktop/current_desktop_menu_item.dart';
|
|
|
|
import 'package:stackwallet/providers/global/notifications_provider.dart';
|
|
|
|
import 'package:stackwallet/providers/ui/unread_notifications_provider.dart';
|
2022-09-26 18:42:37 +00:00
|
|
|
import 'package:stackwallet/route_generator.dart';
|
2022-09-22 23:48:50 +00:00
|
|
|
import 'package:stackwallet/utilities/theme/stack_colors.dart';
|
2022-09-15 21:38:30 +00:00
|
|
|
|
|
|
|
class DesktopHomeView extends ConsumerStatefulWidget {
|
|
|
|
const DesktopHomeView({Key? key}) : super(key: key);
|
|
|
|
|
|
|
|
static const String routeName = "/desktopHome";
|
|
|
|
|
|
|
|
@override
|
|
|
|
ConsumerState<DesktopHomeView> createState() => _DesktopHomeViewState();
|
|
|
|
}
|
|
|
|
|
|
|
|
class _DesktopHomeViewState extends ConsumerState<DesktopHomeView> {
|
2022-11-14 15:50:58 +00:00
|
|
|
final Map<DesktopMenuItemId, Widget> contentViews = {
|
|
|
|
DesktopMenuItemId.myStack: const Navigator(
|
2022-10-13 17:55:04 +00:00
|
|
|
key: Key("desktopStackHomeKey"),
|
2022-09-26 18:42:37 +00:00
|
|
|
onGenerateRoute: RouteGenerator.generateRoute,
|
|
|
|
initialRoute: MyStackView.routeName,
|
2022-09-18 16:14:27 +00:00
|
|
|
),
|
2022-11-18 18:45:42 +00:00
|
|
|
DesktopMenuItemId.exchange: const Navigator(
|
|
|
|
key: Key("desktopExchangeHomeKey"),
|
|
|
|
onGenerateRoute: RouteGenerator.generateRoute,
|
|
|
|
initialRoute: DesktopExchangeView.routeName,
|
|
|
|
),
|
2022-11-14 15:50:58 +00:00
|
|
|
DesktopMenuItemId.notifications: const Navigator(
|
|
|
|
key: Key("desktopNotificationsHomeKey"),
|
|
|
|
onGenerateRoute: RouteGenerator.generateRoute,
|
|
|
|
initialRoute: DesktopNotificationsView.routeName,
|
2022-09-16 17:26:12 +00:00
|
|
|
),
|
2022-11-14 15:50:58 +00:00
|
|
|
DesktopMenuItemId.addressBook: const Navigator(
|
2022-11-09 15:57:41 +00:00
|
|
|
key: Key("desktopAddressBookHomeKey"),
|
|
|
|
onGenerateRoute: RouteGenerator.generateRoute,
|
|
|
|
initialRoute: DesktopAddressBook.routeName,
|
2022-09-16 17:26:12 +00:00
|
|
|
),
|
2022-11-14 15:50:58 +00:00
|
|
|
DesktopMenuItemId.settings: const Navigator(
|
2022-10-13 17:55:04 +00:00
|
|
|
key: Key("desktopSettingHomeKey"),
|
2022-10-05 17:41:41 +00:00
|
|
|
onGenerateRoute: RouteGenerator.generateRoute,
|
2022-10-17 16:50:37 +00:00
|
|
|
initialRoute: DesktopSettingsView.routeName,
|
2022-09-16 17:26:12 +00:00
|
|
|
),
|
2022-11-14 15:50:58 +00:00
|
|
|
DesktopMenuItemId.support: const Navigator(
|
2022-11-07 15:15:44 +00:00
|
|
|
key: Key("desktopSupportHomeKey"),
|
|
|
|
onGenerateRoute: RouteGenerator.generateRoute,
|
|
|
|
initialRoute: DesktopSupportView.routeName,
|
2022-09-16 17:26:12 +00:00
|
|
|
),
|
2022-11-14 15:50:58 +00:00
|
|
|
DesktopMenuItemId.about: const Navigator(
|
2022-11-07 17:42:55 +00:00
|
|
|
key: Key("desktopAboutHomeKey"),
|
|
|
|
onGenerateRoute: RouteGenerator.generateRoute,
|
|
|
|
initialRoute: DesktopAboutView.routeName,
|
2022-09-16 17:26:12 +00:00
|
|
|
),
|
2022-11-14 15:50:58 +00:00
|
|
|
};
|
2022-09-16 17:26:12 +00:00
|
|
|
|
2022-11-14 16:40:31 +00:00
|
|
|
void onMenuSelectionWillChange(DesktopMenuItemId newKey) {
|
|
|
|
// check for unread notifications and refresh provider before
|
|
|
|
// showing notifications view
|
|
|
|
if (newKey == DesktopMenuItemId.notifications) {
|
|
|
|
ref.refresh(unreadNotificationsStateProvider);
|
|
|
|
}
|
|
|
|
// mark notifications as read if leaving notifications view
|
|
|
|
if (ref.read(currentDesktopMenuItemProvider.state).state ==
|
|
|
|
DesktopMenuItemId.notifications &&
|
|
|
|
newKey != DesktopMenuItemId.notifications) {
|
|
|
|
final Set<int> unreadNotificationIds =
|
|
|
|
ref.read(unreadNotificationsStateProvider.state).state;
|
|
|
|
|
|
|
|
if (unreadNotificationIds.isNotEmpty) {
|
|
|
|
List<Future<void>> futures = [];
|
|
|
|
for (int i = 0; i < unreadNotificationIds.length - 1; i++) {
|
|
|
|
futures.add(ref
|
|
|
|
.read(notificationsProvider)
|
|
|
|
.markAsRead(unreadNotificationIds.elementAt(i), false));
|
|
|
|
}
|
|
|
|
|
|
|
|
// wait for multiple to update if any
|
|
|
|
Future.wait(futures).then((_) {
|
|
|
|
// only notify listeners once
|
|
|
|
ref
|
|
|
|
.read(notificationsProvider)
|
|
|
|
.markAsRead(unreadNotificationIds.last, true);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
2022-09-16 17:26:12 +00:00
|
|
|
}
|
|
|
|
|
2022-09-15 21:38:30 +00:00
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return Material(
|
2022-09-22 23:48:50 +00:00
|
|
|
color: Theme.of(context).extension<StackColors>()!.background,
|
2022-09-15 21:38:30 +00:00
|
|
|
child: Row(
|
|
|
|
children: [
|
2022-09-16 17:26:12 +00:00
|
|
|
DesktopMenu(
|
2022-11-14 16:40:31 +00:00
|
|
|
// onSelectionChanged: onMenuSelectionChanged,
|
|
|
|
onSelectionWillChange: onMenuSelectionWillChange,
|
2022-09-16 17:26:12 +00:00
|
|
|
),
|
2022-10-13 19:10:24 +00:00
|
|
|
Container(
|
|
|
|
width: 1,
|
|
|
|
color: Theme.of(context).extension<StackColors>()!.background,
|
|
|
|
),
|
2022-09-16 23:54:46 +00:00
|
|
|
Expanded(
|
2022-11-14 16:40:31 +00:00
|
|
|
child: contentViews[
|
|
|
|
ref.watch(currentDesktopMenuItemProvider.state).state]!,
|
2022-09-16 23:54:46 +00:00
|
|
|
),
|
2022-09-15 21:38:30 +00:00
|
|
|
],
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|