Skip to content

Commit

Permalink
Merge pull request #679 from garylkz/main
Browse files Browse the repository at this point in the history
Default exit behavior setting
  • Loading branch information
Predidit authored Feb 1, 2025
2 parents 53ca31e + 44559fd commit f7d34bf
Show file tree
Hide file tree
Showing 4 changed files with 125 additions and 30 deletions.
72 changes: 59 additions & 13 deletions lib/bean/appbar/sys_app_bar.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:kazumi/bean/dialog/dialog_helper.dart';
import 'package:kazumi/utils/storage.dart';
import 'package:kazumi/utils/utils.dart';
import 'package:flutter/material.dart';
import 'package:window_manager/window_manager.dart';
import 'package:flutter/services.dart';

class SysAppBar extends StatelessWidget implements PreferredSizeWidget {
final double? toolbarHeight;
Expand Down Expand Up @@ -37,16 +39,60 @@ class SysAppBar extends StatelessWidget implements PreferredSizeWidget {
this.bottom});

void _handleCloseEvent() {
KazumiDialog.show(
builder: (context) {
final setting = GStorage.setting;
final exitBehavior =
setting.get(SettingBoxKey.exitBehavior, defaultValue: 2);

switch (exitBehavior) {
case 0:
exit(0);
case 1:
KazumiDialog.dismiss();
windowManager.hide();
break;
default:
KazumiDialog.show(builder: (context) {
bool saveExitBehavior = false; // 下次不再询问?

return AlertDialog(
title: const Text('退出确认'),
content: const Text('您想要退出 Kazumi 吗?'),
content: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
const Text('您想要退出 Kazumi 吗?'),
const SizedBox(height: 24),
StatefulBuilder(builder: (context, setState) {
onChanged(value) {
saveExitBehavior = value ?? false;
setState(() {});
}

return Wrap(
crossAxisAlignment: WrapCrossAlignment.center,
spacing: 8,
children: [
Checkbox(value: saveExitBehavior, onChanged: onChanged),
const Text('下次不再询问'),
],
);
}),
],
),
actions: [
TextButton(
onPressed: () => exit(0), child: const Text('退出 Kazumi')),
onPressed: () async {
if (saveExitBehavior) {
await setting.put(SettingBoxKey.exitBehavior, 0);
}
exit(0);
},
child: const Text('退出 Kazumi')),
TextButton(
onPressed: () {
onPressed: () async {
if (saveExitBehavior) {
await setting.put(SettingBoxKey.exitBehavior, 1);
}
KazumiDialog.dismiss();
windowManager.hide();
},
Expand All @@ -56,6 +102,7 @@ class SysAppBar extends StatelessWidget implements PreferredSizeWidget {
],
);
});
}
}

@override
Expand Down Expand Up @@ -88,14 +135,13 @@ class SysAppBar extends StatelessWidget implements PreferredSizeWidget {
bottom: bottom,
systemOverlayStyle: SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
statusBarIconBrightness: Theme.of(context).brightness ==
Brightness.light
? Brightness.dark
: Brightness.light,
statusBarIconBrightness:
Theme.of(context).brightness == Brightness.light
? Brightness.dark
: Brightness.light,
systemNavigationBarColor: Colors.transparent,
systemNavigationBarDividerColor: Colors.transparent,
)
),
)),
);
}

Expand Down
70 changes: 58 additions & 12 deletions lib/pages/about/about_page.dart
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
import 'dart:io';

import 'package:card_settings_ui/card_settings_ui.dart';
import 'package:flutter/material.dart';
import 'package:flutter_modular/flutter_modular.dart';
import 'package:hive/hive.dart';
import 'package:kazumi/pages/my/my_controller.dart';
import 'package:kazumi/request/api.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:kazumi/bean/appbar/sys_app_bar.dart';
import 'package:path_provider/path_provider.dart';
import 'package:kazumi/bean/dialog/dialog_helper.dart';
import 'package:card_settings_ui/card_settings_ui.dart';
import 'package:kazumi/utils/storage.dart';
import 'package:kazumi/pages/my/my_controller.dart';
import 'package:kazumi/request/api.dart';
import 'package:kazumi/utils/mortis.dart';
import 'package:kazumi/utils/storage.dart';
import 'package:kazumi/utils/utils.dart';
import 'package:path_provider/path_provider.dart';
import 'package:url_launcher/url_launcher.dart';

class AboutPage extends StatefulWidget {
const AboutPage({super.key});
Expand All @@ -20,19 +22,22 @@ class AboutPage extends StatefulWidget {
}

class _AboutPageState extends State<AboutPage> {
final exitBehaviorTitles = <String>['退出 Kazumi', '最小化至托盘', '每次都询问'];

late dynamic defaultDanmakuArea;
late dynamic defaultThemeMode;
late dynamic defaultThemeColor;
Box setting = GStorage.setting;
late int exitBehavior =
setting.get(SettingBoxKey.exitBehavior, defaultValue: 2);
late bool autoUpdate;
double _cacheSizeMB = -1;
final MyController myController = Modular.get<MyController>();

@override
void initState() {
super.initState();
autoUpdate =
setting.get(SettingBoxKey.autoUpdate, defaultValue: true);
autoUpdate = setting.get(SettingBoxKey.autoUpdate, defaultValue: true);
_getCacheSize();
}

Expand Down Expand Up @@ -142,7 +147,9 @@ class _AboutPageState extends State<AboutPage> {
},
title: const Text('开源许可证'),
description: const Text('查看所有开源许可证'),
),],),
),
],
),
SettingsSection(
title: const Text('外部链接'),
tiles: [
Expand Down Expand Up @@ -178,15 +185,52 @@ class _AboutPageState extends State<AboutPage> {
title: const Text('弹幕来源'),
description: Text('ID: ${mortis['id']}'),
value: const Text('DanDanPlay'),
),],),
),
],
),
if (Utils.isDesktop()) // 之后如果有非桌面平台的新选项可以移除
SettingsSection(
title: const Text('默认行为'),
tiles: [
// if (Utils.isDesktop())
SettingsTile.navigation(
title: const Text('关闭时'),
value: Text(exitBehaviorTitles[exitBehavior]),
onPressed: (_) {
KazumiDialog.show(builder: (context) {
return SimpleDialog(
title: const Text('关闭时'),
children: [
for (int i = 0; i < 3; i++)
RadioListTile(
value: i,
groupValue: exitBehavior,
onChanged: (int? value) {
exitBehavior = value ?? 2;
setting.put(
SettingBoxKey.exitBehavior, value);
KazumiDialog.dismiss();
setState(() {});
},
title: Text(exitBehaviorTitles[i]),
),
],
);
});
},
),
],
),
SettingsSection(
tiles: [
SettingsTile.navigation(
onPressed: (_) {
Modular.to.pushNamed('/settings/about/logs');
},
title: const Text('错误日志'),
),],),
),
],
),
SettingsSection(
tiles: [
SettingsTile.navigation(
Expand All @@ -197,7 +241,9 @@ class _AboutPageState extends State<AboutPage> {
value: _cacheSizeMB == -1
? const Text('统计中...')
: Text('${_cacheSizeMB.toStringAsFixed(2)}MB'),
),],),
),
],
),
SettingsSection(
title: const Text('应用更新'),
tiles: [
Expand Down
2 changes: 1 addition & 1 deletion lib/pages/my/my_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import 'package:card_settings_ui/card_settings_ui.dart';
import 'package:flutter/material.dart';
import 'package:flutter_modular/flutter_modular.dart';
import 'package:kazumi/bean/appbar/sys_app_bar.dart';
import 'package:provider/provider.dart';
import 'package:kazumi/pages/menu/menu.dart';
import 'package:kazumi/pages/menu/side_menu.dart';
import 'package:kazumi/utils/utils.dart';
import 'package:provider/provider.dart';

class MyPage extends StatefulWidget {
const MyPage({super.key});
Expand Down
11 changes: 7 additions & 4 deletions lib/utils/storage.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:path_provider/path_provider.dart';
import 'package:kazumi/modules/bangumi/bangumi_item.dart';
import 'package:kazumi/modules/bangumi/bangumi_tag.dart';
import 'package:kazumi/modules/history/history_module.dart';
import 'package:kazumi/modules/collect/collect_module.dart';
import 'package:kazumi/modules/history/history_module.dart';
import 'package:path_provider/path_provider.dart';

class GStorage {
// Don't use favorites box, it's replaced by collectibles.
Expand Down Expand Up @@ -81,7 +82,8 @@ class GStorage {
static Future<void> patchCollectibles(String backupFilePath) async {
final backupFile = File(backupFilePath);
final backupContent = await backupFile.readAsBytes();
final tempBox = await Hive.openBox('tempCollectiblesBox', bytes: backupContent);
final tempBox =
await Hive.openBox('tempCollectiblesBox', bytes: backupContent);
final tempBoxItems = tempBox.toMap().entries;
debugPrint('webDav追番列表长度 ${tempBoxItems.length}');

Expand Down Expand Up @@ -135,5 +137,6 @@ class SettingBoxKey {
webDavPassword = 'webDavPasswd',
lowMemoryMode = 'lowMemoryMode',
useDynamicColor = 'useDynamicColor',
defaultSuperResolutionType = 'defaultSuperResolutionType';
defaultSuperResolutionType = 'defaultSuperResolutionType',
exitBehavior = 'exitBehavior';
}

0 comments on commit f7d34bf

Please sign in to comment.