From 6dc77199de623ddcf7b608dda13c8491e6fe8cbf Mon Sep 17 00:00:00 2001 From: niuhuan Date: Tue, 19 Oct 2021 14:28:12 +0800 Subject: [PATCH] Add time zone setting, modify default zone +8. --- lib/basic/Common.dart | 6 ++- lib/basic/config/KeyboardController.dart | 6 +-- lib/basic/config/TimeOffsetHour.dart | 54 ++++++++++++++++++++++++ lib/screens/InitScreen.dart | 2 + lib/screens/SettingsScreen.dart | 2 + 5 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 lib/basic/config/TimeOffsetHour.dart diff --git a/lib/basic/Common.dart b/lib/basic/Common.dart index a6bcd75..3bfdf78 100644 --- a/lib/basic/Common.dart +++ b/lib/basic/Common.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_styled_toast/flutter_styled_toast.dart'; +import 'config/TimeOffsetHour.dart'; + double coverWidth = 210; double coverHeight = 315; @@ -208,7 +210,7 @@ String add0(int num, int len) { /// 格式化时间 2012-34-56 String formatTimeToDate(String str) { try { - var c = DateTime.parse(str); + var c = DateTime.parse(str).add(Duration(hours: currentTimeOffsetHour())); return "${add0(c.year, 4)}-${add0(c.month, 2)}-${add0(c.day, 2)}"; } catch (e) { return "-"; @@ -218,7 +220,7 @@ String formatTimeToDate(String str) { /// 格式化时间 2012-34-56 12:34:56 String formatTimeToDateTime(String str) { try { - var c = DateTime.parse(str); + var c = DateTime.parse(str).add(Duration(hours: currentTimeOffsetHour())); return "${add0(c.year, 4)}-${add0(c.month, 2)}-${add0(c.day, 2)} ${add0(c.hour, 2)}:${add0(c.minute, 2)}"; } catch (e) { return "-"; diff --git a/lib/basic/config/KeyboardController.dart b/lib/basic/config/KeyboardController.dart index a24c077..fba7225 100644 --- a/lib/basic/config/KeyboardController.dart +++ b/lib/basic/config/KeyboardController.dart @@ -7,13 +7,13 @@ import 'package:flutter/material.dart'; import '../Common.dart'; import '../Method.dart'; -const propertyName = "keyboardController"; +const _propertyName = "keyboardController"; late bool keyboardController; Future initKeyboardController() async { keyboardController = - (await method.loadProperty(propertyName, "false")) == "true"; + (await method.loadProperty(_propertyName, "false")) == "true"; } String keyboardControllerName() { @@ -25,7 +25,7 @@ Future chooseKeyboardController(BuildContext context) async { await chooseListDialog(context, "键盘控制翻页", ["是", "否"]); if (result != null) { var target = result == "是"; - await method.saveProperty(propertyName, "$target"); + await method.saveProperty(_propertyName, "$target"); keyboardController = target; } } diff --git a/lib/basic/config/TimeOffsetHour.dart b/lib/basic/config/TimeOffsetHour.dart new file mode 100644 index 0000000..eeda064 --- /dev/null +++ b/lib/basic/config/TimeOffsetHour.dart @@ -0,0 +1,54 @@ +import 'package:flutter/material.dart'; + +import '../Common.dart'; +import '../Method.dart'; + +int _timeOffsetHour = 8; + +int currentTimeOffsetHour() { + return _timeOffsetHour; +} + +const _propertyName = "timeOffsetHour"; + +Future initTimeZone() async { + _timeOffsetHour = int.parse(await method.loadProperty(_propertyName, "8")); +} + +Future chooseTimeZone(BuildContext context) async { + List timeZones = []; + for (var i = -12; i <= 12; i++) { + var str = i.toString(); + if (!str.startsWith("-")) { + str = "+" + str; + } + timeZones.add(str); + } + String? result = await chooseListDialog(context, "时区选择", timeZones); + if (result != null) { + if (result.startsWith("+")) { + result = result.substring(1); + } + _timeOffsetHour = int.parse(result); + await method.saveProperty(_propertyName, "$result"); + } +} + +Widget timeZoneSetting() { + return StatefulBuilder( + builder: (BuildContext context, void Function(void Function()) setState) { + var c = "$_timeOffsetHour"; + if (!c.startsWith("-")) { + c = "+" + c; + } + return ListTile( + title: Text("时区"), + subtitle: Text(c), + onTap: () async { + await chooseTimeZone(context); + setState(() {}); + }, + ); + }, + ); +} diff --git a/lib/screens/InitScreen.dart b/lib/screens/InitScreen.dart index fc54d5a..7f4d252 100644 --- a/lib/screens/InitScreen.dart +++ b/lib/screens/InitScreen.dart @@ -18,6 +18,7 @@ import 'package:pikapi/basic/config/ShadowCategories.dart'; import 'package:pikapi/basic/config/Themes.dart'; import 'package:pikapi/basic/Method.dart'; import 'package:pikapi/basic/config/ListLayout.dart'; +import 'package:pikapi/basic/config/TimeOffsetHour.dart'; import 'package:pikapi/basic/config/VolumeController.dart'; import 'AccountScreen.dart'; @@ -59,6 +60,7 @@ class _InitScreenState extends State { await initKeyboardController(); await initAndroidDisplayMode(); await initChooserRoot(); + await initTimeZone(); // 登录, 如果token失效重新登录, 网络不好的时候可能需要1分钟 if (await method.preLogin()) { // 如果token或username+password有效则直接进入登录好的界面 diff --git a/lib/screens/SettingsScreen.dart b/lib/screens/SettingsScreen.dart index 3d80ba9..98e3d02 100644 --- a/lib/screens/SettingsScreen.dart +++ b/lib/screens/SettingsScreen.dart @@ -17,6 +17,7 @@ import 'package:pikapi/basic/config/ReaderType.dart'; import 'package:pikapi/basic/config/Quality.dart'; import 'package:pikapi/basic/config/ShadowCategories.dart'; import 'package:pikapi/basic/config/Themes.dart'; +import 'package:pikapi/basic/config/TimeOffsetHour.dart'; import 'package:pikapi/basic/config/VolumeController.dart'; import 'package:pikapi/screens/components/NetworkSetting.dart'; @@ -112,6 +113,7 @@ class _SettingsScreenState extends State { setState(() {}); }, ), + timeZoneSetting(), Divider(), ListTile( title: Text("自动清理缓存"),