Compare commits
No commits in common. "e88dea8858e4668aaffee8d50ae1a7bf4455412c" and "9d4ce6ca8c8e8f62ea2fe6b380c1c08ce4ce9d82" have entirely different histories.
e88dea8858
...
9d4ce6ca8c
@ -15,10 +15,12 @@ body:json {
|
||||
"client_id": "{{third_client_id}}",
|
||||
"client_secret":"{{third_client_tk}}",
|
||||
"type": "general",
|
||||
"subject": "关于迁移服务器完成的提示",
|
||||
"subtitle": "一条来自 Solar Network 团队的运营信息",
|
||||
"content": "我们已经将所有用户数据迁移到新版服务器,刚刚发布新的 DNS,因为部分 DNS 缓存的影响。可能更改不会生效,可以使用 nslookup / ping 检查解析地址是否未 8. 开头,您可以主动刷新 DNS。谢谢!",
|
||||
"metadata": {},
|
||||
"subject": "新年快乐!",
|
||||
"subtitle": "一条来自 Solar Network 团队的信息",
|
||||
"content": "今天是农历正月初一,小羊祝您新年快乐 🎉",
|
||||
"metadata": {
|
||||
"image": "D2EDbcrsTugs3xk5"
|
||||
},
|
||||
"priority": 10
|
||||
}
|
||||
}
|
||||
|
@ -44,7 +44,6 @@ import 'package:surface/providers/widget.dart';
|
||||
import 'package:surface/router.dart';
|
||||
import 'package:flutter_web_plugins/url_strategy.dart' show usePathUrlStrategy;
|
||||
import 'package:surface/widgets/dialog.dart';
|
||||
import 'package:surface/widgets/menu_bar.dart';
|
||||
import 'package:tray_manager/tray_manager.dart';
|
||||
import 'package:version/version.dart';
|
||||
import 'package:workmanager/workmanager.dart';
|
||||
@ -332,7 +331,18 @@ class _AppSplashScreenState extends State<_AppSplashScreen> with TrayListener {
|
||||
|
||||
Future<void> _hotkeyInitialization() async {
|
||||
if (kIsWeb) return;
|
||||
// The quit key has been removed, and the logic of the quit key is moved to system menu bar activator.
|
||||
|
||||
if (Platform.isMacOS) {
|
||||
HotKey quitHotKey = HotKey(
|
||||
key: PhysicalKeyboardKey.keyQ,
|
||||
modifiers: [HotKeyModifier.meta],
|
||||
scope: HotKeyScope.inapp,
|
||||
);
|
||||
await hotKeyManager.register(quitHotKey, keyUpHandler: (_) {
|
||||
_appLifecycleListener?.dispose();
|
||||
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
final Menu _appTrayMenu = Menu(
|
||||
@ -416,15 +426,6 @@ class _AppSplashScreenState extends State<_AppSplashScreen> with TrayListener {
|
||||
return AppExitResponse.cancel;
|
||||
}
|
||||
|
||||
void _quitApp() {
|
||||
_appLifecycleListener?.dispose();
|
||||
if (Platform.isWindows) {
|
||||
appWindow.close();
|
||||
} else {
|
||||
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onTrayIconMouseDown() {
|
||||
if (Platform.isWindows) {
|
||||
@ -459,7 +460,12 @@ class _AppSplashScreenState extends State<_AppSplashScreen> with TrayListener {
|
||||
Timer(const Duration(milliseconds: 100), () => appWindow.show());
|
||||
break;
|
||||
case 'exit':
|
||||
_quitApp();
|
||||
_appLifecycleListener?.dispose();
|
||||
if (Platform.isWindows) {
|
||||
appWindow.close();
|
||||
} else {
|
||||
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -476,31 +482,28 @@ class _AppSplashScreenState extends State<_AppSplashScreen> with TrayListener {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final cfg = context.read<ConfigProvider>();
|
||||
return AppSystemMenuBar(
|
||||
onQuit: _quitApp,
|
||||
child: NotificationListener<SizeChangedLayoutNotification>(
|
||||
onNotification: (notification) {
|
||||
return NotificationListener<SizeChangedLayoutNotification>(
|
||||
onNotification: (notification) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
cfg.calcDrawerSize(context);
|
||||
});
|
||||
return false;
|
||||
},
|
||||
child: OrientationBuilder(
|
||||
builder: (context, orientation) {
|
||||
final cfg = context.read<ConfigProvider>();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
cfg.calcDrawerSize(context);
|
||||
});
|
||||
return false;
|
||||
},
|
||||
child: OrientationBuilder(
|
||||
builder: (context, orientation) {
|
||||
final cfg = context.read<ConfigProvider>();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
Future.delayed(const Duration(milliseconds: 300), () {
|
||||
if (context.mounted) {
|
||||
cfg.calcDrawerSize(context);
|
||||
});
|
||||
Future.delayed(const Duration(milliseconds: 300), () {
|
||||
if (context.mounted) {
|
||||
cfg.calcDrawerSize(context);
|
||||
}
|
||||
});
|
||||
return SizeChangedLayoutNotifier(
|
||||
child: widget.child,
|
||||
);
|
||||
},
|
||||
),
|
||||
}
|
||||
});
|
||||
return SizeChangedLayoutNotifier(
|
||||
child: widget.child,
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
@ -164,7 +164,7 @@ class _PostEditorScreenState extends State<PostEditorScreen>
|
||||
});
|
||||
hotKeyManager.register(_saveDraftHotKey, keyDownHandler: (_) async {
|
||||
if (mounted) {
|
||||
_writeController.sendPost(context, saveAsDraft: true);
|
||||
_writeController.sendPost(context);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -1,103 +0,0 @@
|
||||
import 'dart:io';
|
||||
|
||||
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');
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
if (onQuit != null)
|
||||
PlatformMenuItem(
|
||||
shortcut: const SingleActivator(
|
||||
LogicalKeyboardKey.keyQ,
|
||||
meta: true,
|
||||
),
|
||||
label: 'trayMenuExit'.tr(),
|
||||
onSelected: () {
|
||||
onQuit?.call();
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
child: child,
|
||||
);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user