Files
Reboot-Launcher/gui/lib/src/page/pages.dart
Alessandro Autiero e3b8d7d182 Release 9.2.0
2024-07-06 18:43:52 +02:00

87 lines
2.8 KiB
Dart

import 'dart:async';
import 'dart:collection';
import 'package:fluent_ui/fluent_ui.dart';
import 'package:get/get.dart';
import 'package:reboot_launcher/src/messenger/abstract/overlay.dart';
import 'package:reboot_launcher/src/page/abstract/page.dart';
import 'package:reboot_launcher/src/page/abstract/page_type.dart';
import 'package:reboot_launcher/src/page/implementation/backend_page.dart';
import 'package:reboot_launcher/src/page/implementation/browser_page.dart';
import 'package:reboot_launcher/src/page/implementation/host_page.dart';
import 'package:reboot_launcher/src/page/implementation/info_page.dart';
import 'package:reboot_launcher/src/page/implementation/play_page.dart';
import 'package:reboot_launcher/src/page/implementation/settings_page.dart';
import 'package:reboot_launcher/src/widget/info_bar_area.dart';
final StreamController<void> pagesController = StreamController.broadcast();
bool hitBack = false;
final List<RebootPage> pages = [
const PlayPage(),
const HostPage(),
const BrowsePage(),
const BackendPage(),
const InfoPage(),
const SettingsPage()
];
final List<GlobalKey<OverlayTargetState>> _flyoutPageControllers = List.generate(pages.length, (_) => GlobalKey());
final RxInt pageIndex = RxInt(RebootPageType.play.index);
final HashMap<int, GlobalKey> _pageKeys = HashMap();
final GlobalKey<NavigatorState> appNavigatorKey = GlobalKey();
final GlobalKey<OverlayState> appOverlayKey = GlobalKey();
final GlobalKey<InfoBarAreaState> infoBarAreaKey = GlobalKey();
GlobalKey get pageKey => getPageKeyByIndex(pageIndex.value);
GlobalKey getPageKeyByIndex(int index) {
final key = _pageKeys[index];
if(key != null) {
return key;
}
final result = GlobalKey();
_pageKeys[index] = result;
return result;
}
bool get hasPageButton => pages[pageIndex.value].hasButton(pageStack.lastOrNull);
final Queue<Object?> appStack = _createAppStack();
Queue _createAppStack() {
final queue = Queue();
var lastValue = pageIndex.value;
pageIndex.listen((index) {
if(!hitBack && lastValue != index) {
queue.add(lastValue);
pagesController.add(null);
}
hitBack = false;
lastValue = index;
});
return queue;
}
final Map<int, Queue<String>> _pagesStack = Map.fromEntries(List.generate(pages.length, (index) => MapEntry(index, Queue<String>())));
Queue<String> get pageStack => _pagesStack[pageIndex.value]!;
void addSubPageToStack(String pageName) {
final index = pageIndex.value;
final identifier = "${index}_$pageName";
appStack.add(identifier);
_pagesStack[index]!.add(identifier);
pagesController.add(null);
}
GlobalKey<OverlayTargetState> getOverlayTargetKeyByPage(int pageIndex) => _flyoutPageControllers[pageIndex];
GlobalKey<OverlayTargetState> get pageOverlayTargetKey => _flyoutPageControllers[pageIndex.value];