Files
.github
android
api
assets
buildtools
debian
drift_schemas
ios
lib
controllers
database
providers
screens
types
widgets
account
attachment
chat
feed
navigation
post
realm
about.dart
app_bar_leading.dart
connection_indicator.dart
context_menu.dart
dialog.dart
html.dart
link_preview.dart
loading_indicator.dart
markdown_content.dart
menu_bar.dart
notify_indicator.dart
unauthorized_hint.dart
universal_image.dart
updater.dart
version_label.dart
firebase_options.dart
logger.dart
main.dart
router.dart
theme.dart
linux
macos
snap
test
web
windows
.gitignore
.metadata
.roadsignrc
CODE_OF_CONDUCT.md
README.md
analysis_options.yaml
build.yaml
devtools_options.yaml
firebase.json
pubspec.lock
pubspec.yaml
roadsign.toml
App/lib/widgets/menu_bar.dart
2025-03-19 00:30:58 +08:00

115 lines
3.6 KiB
Dart

import 'dart:io';
import 'package:bitsdojo_window/bitsdojo_window.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'package:surface/providers/navigation.dart';
import 'package:surface/router.dart';
// https://api.flutter.dev/flutter/widgets/PlatformMenuBar-class.html
// All the code following is only works on macOS
class AppSystemMenuBar extends StatelessWidget {
final Function? onQuit;
final Widget child;
const AppSystemMenuBar({super.key, this.onQuit, required this.child});
@override
Widget build(BuildContext context) {
if (kIsWeb || !Platform.isMacOS) return child;
final nav = context.watch<NavigationProvider>();
return PlatformMenuBar(
menus: <PlatformMenuItem>[
PlatformMenu(
label: 'Solian',
menus: <PlatformMenuItem>[
PlatformMenuItemGroup(
members: <PlatformMenuItem>[
PlatformMenuItem(
label: 'screenAbout'.tr(),
onSelected: () {
appRouter.goNamed('about');
nav.autoDetectIndex(appRouter);
},
),
],
),
PlatformMenuItemGroup(
members: [
PlatformMenuItem(
label: 'screenHome'.tr(),
shortcut: const SingleActivator(
LogicalKeyboardKey.digit1,
meta: true,
),
onSelected: () {
appRouter.goNamed('home');
nav.autoDetectIndex(appRouter);
},
),
PlatformMenuItem(
label: 'screenExplore'.tr(),
shortcut: const SingleActivator(
LogicalKeyboardKey.digit2,
meta: true,
),
onSelected: () {
appRouter.goNamed('explore');
nav.autoDetectIndex(appRouter);
},
),
PlatformMenuItem(
label: 'screenChat'.tr(),
shortcut: const SingleActivator(
LogicalKeyboardKey.digit3,
meta: true,
),
onSelected: () {
appRouter.goNamed('chat');
},
),
PlatformMenuItem(
label: 'screenAccount'.tr(),
shortcut: const SingleActivator(
LogicalKeyboardKey.digit4,
meta: true,
),
onSelected: () {
appRouter.goNamed('account');
},
),
],
),
PlatformMenuItem(
shortcut: const SingleActivator(
LogicalKeyboardKey.keyH,
meta: true,
),
label: 'trayMenuHide'.tr(),
onSelected: () {
appWindow.hide();
},
),
if (onQuit != null)
PlatformMenuItem(
shortcut: const SingleActivator(
LogicalKeyboardKey.keyQ,
meta: true,
),
label: 'trayMenuExit'.tr(),
onSelected: () {
onQuit?.call();
},
),
],
),
],
child: child,
);
}
}