From 68ac6eff64fcee25b2249cc15da7f6401f9a7a65 Mon Sep 17 00:00:00 2001 From: niuhuan Date: Sat, 19 Mar 2022 12:12:27 +0800 Subject: [PATCH] Mouse secondary button clieck pop --- lib/basic/Common.dart | 2 +- lib/basic/config/Address.dart | 4 +- lib/basic/config/AndroidDisplayMode.dart | 2 +- lib/basic/config/AndroidSecureFlag.dart | 2 +- lib/basic/config/AutoClean.dart | 4 +- lib/basic/config/AutoFullScreen.dart | 2 +- lib/basic/config/ChooserRoot.dart | 2 +- .../config/ContentFailedReloadAction.dart | 2 +- lib/basic/config/ConvertToPNG.dart | 2 +- lib/basic/config/DownloadAndExportPath.dart | 2 +- lib/basic/config/DownloadThreadCount.dart | 2 +- lib/basic/config/ExportRename.dart | 2 +- lib/basic/config/FullScreenAction.dart | 2 +- lib/basic/config/ImageAddress.dart | 4 +- lib/basic/config/KeyboardController.dart | 2 +- lib/basic/config/NoAnimation.dart | 2 +- lib/basic/config/PagerAction.dart | 2 +- lib/basic/config/Proxy.dart | 2 +- lib/basic/config/Quality.dart | 4 +- lib/basic/config/ReaderDirection.dart | 4 +- lib/basic/config/ReaderSliderPosition.dart | 2 +- lib/basic/config/ReaderType.dart | 4 +- lib/basic/config/ShadowCategories.dart | 8 +- lib/basic/config/Themes.dart | 17 ++-- lib/basic/config/TimeOffsetHour.dart | 2 +- lib/basic/config/Version.dart | 2 +- lib/basic/config/VolumeController.dart | 2 +- lib/basic/config/shadowCategoriesMode.dart | 2 +- lib/main.dart | 4 +- lib/screens/AboutScreen.dart | 52 +++++++------ lib/screens/AccountScreen.dart | 16 ++-- lib/screens/AppScreen.dart | 4 +- lib/screens/CategoriesScreen.dart | 14 ++-- lib/screens/ComicInfoScreen.dart | 25 +++--- lib/screens/ComicReaderScreen.dart | 7 +- lib/screens/ComicsScreen.dart | 9 ++- lib/screens/CommentScreen.dart | 22 ++++-- lib/screens/DownloadConfirmScreen.dart | 27 ++++--- lib/screens/DownloadExportToFileScreen.dart | 10 +-- lib/screens/DownloadExportToSocketScreen.dart | 6 +- lib/screens/DownloadImportScreen.dart | 8 +- lib/screens/DownloadInfoScreen.dart | 6 +- lib/screens/DownloadListScreen.dart | 16 ++-- lib/screens/FavouritePaperScreen.dart | 9 ++- lib/screens/FilePhotoViewScreen.dart | 12 ++- lib/screens/GameDownloadScreen.dart | 11 ++- lib/screens/GameInfoScreen.dart | 29 ++++--- lib/screens/GamesScreen.dart | 15 ++-- lib/screens/InitScreen.dart | 6 +- lib/screens/MigrateScreen.dart | 24 +++--- lib/screens/ModifyPasswordScreen.dart | 23 ++++-- lib/screens/NetworkSettingsScreen.dart | 14 +++- lib/screens/RandomComicsScreen.dart | 9 ++- lib/screens/RankingsScreen.dart | 14 +++- lib/screens/RegisterScreen.dart | 74 ++++++++++-------- lib/screens/SearchScreen.dart | 9 ++- lib/screens/SettingsScreen.dart | 32 ++++---- lib/screens/ViewLogsScreen.dart | 12 +-- lib/screens/components/Avatar.dart | 2 +- lib/screens/components/ComicInfoCard.dart | 78 +++++++++---------- lib/screens/components/ComicList.dart | 4 +- lib/screens/components/ComicPager.dart | 24 +++--- lib/screens/components/ComicTagsCard.dart | 6 +- lib/screens/components/CommentList.dart | 6 +- .../components/ContinueReadButton.dart | 6 +- lib/screens/components/DesktopCropper.dart | 2 +- lib/screens/components/DownloadInfoCard.dart | 4 +- lib/screens/components/GameTitleCard.dart | 2 +- lib/screens/components/ImageReader.dart | 20 ++--- lib/screens/components/Images.dart | 2 +- lib/screens/components/RightClickPop.dart | 15 ++++ 71 files changed, 455 insertions(+), 324 deletions(-) create mode 100644 lib/screens/components/RightClickPop.dart diff --git a/lib/basic/Common.dart b/lib/basic/Common.dart index ce20405..14bb59a 100644 --- a/lib/basic/Common.dart +++ b/lib/basic/Common.dart @@ -172,7 +172,7 @@ Future displayTextInputDialog(BuildContext context, ? [] : [ Container( - padding: EdgeInsets.only(top: 20, bottom: 10), + padding: const EdgeInsets.only(top: 20, bottom: 10), child: Text( desc, style: TextStyle( diff --git a/lib/basic/config/Address.dart b/lib/basic/config/Address.dart index fb1cd10..2ebe385 100644 --- a/lib/basic/config/Address.dart +++ b/lib/basic/config/Address.dart @@ -28,7 +28,7 @@ Future chooseAddress(BuildContext context) async { context: context, builder: (BuildContext context) { return SimpleDialog( - title: Text('选择分流'), + title: const Text('选择分流'), children: [ ..._addresses.entries.map( (e) => SimpleDialogOption( @@ -52,7 +52,7 @@ Widget switchAddressSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("分流"), + title: const Text("分流"), subtitle: Text(currentAddressName()), onTap: () async { await chooseAddress(context); diff --git a/lib/basic/config/AndroidDisplayMode.dart b/lib/basic/config/AndroidDisplayMode.dart index bccb1eb..ca84311 100644 --- a/lib/basic/config/AndroidDisplayMode.dart +++ b/lib/basic/config/AndroidDisplayMode.dart @@ -41,7 +41,7 @@ Widget androidDisplayModeSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("屏幕刷新率(安卓)"), + title: const Text("屏幕刷新率(安卓)"), subtitle: Text(_androidDisplayMode), onTap: () async { await _chooseAndroidDisplayMode(context); diff --git a/lib/basic/config/AndroidSecureFlag.dart b/lib/basic/config/AndroidSecureFlag.dart index 7aa569a..5a31e0d 100644 --- a/lib/basic/config/AndroidSecureFlag.dart +++ b/lib/basic/config/AndroidSecureFlag.dart @@ -37,7 +37,7 @@ Widget androidSecureFlagSetting() { return StatefulBuilder(builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("禁止截图/禁止显示在任务视图"), + title: const Text("禁止截图/禁止显示在任务视图"), subtitle: Text(_androidSecureFlag ? "是" : "否"), onTap: () async { await _chooseAndroidSecureFlag(context); diff --git a/lib/basic/config/AutoClean.dart b/lib/basic/config/AutoClean.dart index 0ae9efa..6a4a0dc 100644 --- a/lib/basic/config/AutoClean.dart +++ b/lib/basic/config/AutoClean.dart @@ -33,7 +33,7 @@ Future _chooseAutoCleanSec(BuildContext context) async { context: context, builder: (BuildContext context) { return SimpleDialog( - title: Text('选择自动清理周期'), + title: const Text('选择自动清理周期'), children: [ ..._autoCleanMap.entries.map( (e) => SimpleDialogOption( @@ -57,7 +57,7 @@ Widget autoCleanSecSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("自动清理缓存"), + title: const Text("自动清理缓存"), subtitle: Text(_currentAutoCleanSec()), onTap: () async { await _chooseAutoCleanSec(context); diff --git a/lib/basic/config/AutoFullScreen.dart b/lib/basic/config/AutoFullScreen.dart index 22fde67..2242b23 100644 --- a/lib/basic/config/AutoFullScreen.dart +++ b/lib/basic/config/AutoFullScreen.dart @@ -31,7 +31,7 @@ Widget autoFullScreenSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("进入阅读器自动全屏"), + title: const Text("进入阅读器自动全屏"), subtitle: Text(_autoFullScreen ? "是" : "否"), onTap: () async { await _chooseAutoFullScreen(context); diff --git a/lib/basic/config/ChooserRoot.dart b/lib/basic/config/ChooserRoot.dart index 28cd908..016f6f4 100644 --- a/lib/basic/config/ChooserRoot.dart +++ b/lib/basic/config/ChooserRoot.dart @@ -66,7 +66,7 @@ Widget chooserRootSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("文件夹选择器默认路径"), + title: const Text("文件夹选择器默认路径"), subtitle: Text(_currentChooserRoot()), onTap: () async { await _inputChooserRoot(context); diff --git a/lib/basic/config/ContentFailedReloadAction.dart b/lib/basic/config/ContentFailedReloadAction.dart index 4d08517..1988e43 100644 --- a/lib/basic/config/ContentFailedReloadAction.dart +++ b/lib/basic/config/ContentFailedReloadAction.dart @@ -58,7 +58,7 @@ Widget contentFailedReloadActionSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("加载失败时"), + title: const Text("加载失败时"), subtitle: Text(_currentContentFailedReloadActionName()), onTap: () async { await _chooseContentFailedReloadAction(context); diff --git a/lib/basic/config/ConvertToPNG.dart b/lib/basic/config/ConvertToPNG.dart index b65fec1..94cf85b 100644 --- a/lib/basic/config/ConvertToPNG.dart +++ b/lib/basic/config/ConvertToPNG.dart @@ -34,7 +34,7 @@ Widget convertToPNGSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("读取到超大图片时进行缩放(防止崩溃)"), + title: const Text("读取到超大图片时进行缩放(防止崩溃)"), subtitle: Text(_convertToPNG ? "是" : "否"), onTap: () async { await _chooseConvertToPNGSetting(context); diff --git a/lib/basic/config/DownloadAndExportPath.dart b/lib/basic/config/DownloadAndExportPath.dart index 9310151..df0ac18 100644 --- a/lib/basic/config/DownloadAndExportPath.dart +++ b/lib/basic/config/DownloadAndExportPath.dart @@ -27,7 +27,7 @@ Widget downloadAndExportPathSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("下载的同时导出到文件系统"), + title: const Text("下载的同时导出到文件系统"), subtitle: Text(_downloadAndExportPath), onTap: () async { if (_downloadAndExportPath == "") { diff --git a/lib/basic/config/DownloadThreadCount.dart b/lib/basic/config/DownloadThreadCount.dart index 823aca7..7642c96 100644 --- a/lib/basic/config/DownloadThreadCount.dart +++ b/lib/basic/config/DownloadThreadCount.dart @@ -15,7 +15,7 @@ Widget downloadThreadCountSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("下载线程数"), + title: const Text("下载线程数"), subtitle: Text("$_downloadThreadCount"), onTap: () async { int? value = await chooseListDialog(context, "选择下载线程数", _values); diff --git a/lib/basic/config/ExportRename.dart b/lib/basic/config/ExportRename.dart index c025f76..822e487 100644 --- a/lib/basic/config/ExportRename.dart +++ b/lib/basic/config/ExportRename.dart @@ -29,7 +29,7 @@ Widget exportRenameSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("导出时进行重命名"), + title: const Text("导出时进行重命名"), subtitle: Text(_exportRename ? "是" : "否"), onTap: () async { await _chooseExportRename(context); diff --git a/lib/basic/config/FullScreenAction.dart b/lib/basic/config/FullScreenAction.dart index 43129f0..1eebc70 100644 --- a/lib/basic/config/FullScreenAction.dart +++ b/lib/basic/config/FullScreenAction.dart @@ -67,7 +67,7 @@ Widget fullScreenActionSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("操控方式"), + title: const Text("操控方式"), subtitle: Text(currentFullScreenActionName()), onTap: () async { await chooseFullScreenAction(context); diff --git a/lib/basic/config/ImageAddress.dart b/lib/basic/config/ImageAddress.dart index 64ab001..2c16dbd 100644 --- a/lib/basic/config/ImageAddress.dart +++ b/lib/basic/config/ImageAddress.dart @@ -27,7 +27,7 @@ Future chooseImageAddress(BuildContext context) async { context: context, builder: (BuildContext context) { return SimpleDialog( - title: Text('选择图片分流'), + title: const Text('选择图片分流'), children: [ ..._imageAddresses.entries.map( (e) => SimpleDialogOption( @@ -51,7 +51,7 @@ Widget imageSwitchAddressSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("图片分流"), + title: const Text("图片分流"), subtitle: Text(currentImageAddressName()), onTap: () async { await chooseImageAddress(context); diff --git a/lib/basic/config/KeyboardController.dart b/lib/basic/config/KeyboardController.dart index 409e163..4345a29 100644 --- a/lib/basic/config/KeyboardController.dart +++ b/lib/basic/config/KeyboardController.dart @@ -31,7 +31,7 @@ Widget keyboardControllerSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("阅读器键盘翻页(仅PC)"), + title: const Text("阅读器键盘翻页(仅PC)"), subtitle: Text(keyboardController ? "是" : "否"), onTap: () async { await _chooseKeyboardController(context); diff --git a/lib/basic/config/NoAnimation.dart b/lib/basic/config/NoAnimation.dart index 5cde441..92765ab 100644 --- a/lib/basic/config/NoAnimation.dart +++ b/lib/basic/config/NoAnimation.dart @@ -29,7 +29,7 @@ Widget noAnimationSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("取消键盘或音量翻页动画"), + title: const Text("取消键盘或音量翻页动画"), subtitle: Text(_noAnimation ? "是" : "否"), onTap: () async { await _chooseNoAnimation(context); diff --git a/lib/basic/config/PagerAction.dart b/lib/basic/config/PagerAction.dart index 5ff136f..4c7359c 100644 --- a/lib/basic/config/PagerAction.dart +++ b/lib/basic/config/PagerAction.dart @@ -58,7 +58,7 @@ Widget pagerActionSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("列表页加载方式"), + title: const Text("列表页加载方式"), subtitle: Text(_currentPagerActionName()), onTap: () async { await _choosePagerAction(context); diff --git a/lib/basic/config/Proxy.dart b/lib/basic/config/Proxy.dart index 0c58cdd..4d769ad 100644 --- a/lib/basic/config/Proxy.dart +++ b/lib/basic/config/Proxy.dart @@ -34,7 +34,7 @@ Widget proxySetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("代理服务器"), + title: const Text("代理服务器"), subtitle: Text(currentProxyName()), onTap: () async { await inputProxy(context); diff --git a/lib/basic/config/Quality.dart b/lib/basic/config/Quality.dart index 91a6b20..dd5d29d 100644 --- a/lib/basic/config/Quality.dart +++ b/lib/basic/config/Quality.dart @@ -46,7 +46,7 @@ Future chooseQuality(BuildContext context) async { context: context, builder: (BuildContext context) { return SimpleDialog( - title: Text("请选择图片质量"), + title: const Text("请选择图片质量"), children: [ ..._qualities.entries.map( (e) => SimpleDialogOption( @@ -70,7 +70,7 @@ Widget qualitySetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("浏览时的图片质量"), + title: const Text("浏览时的图片质量"), subtitle: Text(currentQualityName()), onTap: () async { await chooseQuality(context); diff --git a/lib/basic/config/ReaderDirection.dart b/lib/basic/config/ReaderDirection.dart index d7b1448..8302d7d 100644 --- a/lib/basic/config/ReaderDirection.dart +++ b/lib/basic/config/ReaderDirection.dart @@ -49,7 +49,7 @@ Future choosePagerDirection(BuildContext buildContext) async { context: buildContext, builder: (BuildContext context) { return SimpleDialog( - title: Text("选择翻页方向"), + title: const Text("选择翻页方向"), children: _types.entries .map((e) => SimpleDialogOption( child: Text(e.key), @@ -71,7 +71,7 @@ Widget readerDirectionSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("阅读器方向"), + title: const Text("阅读器方向"), subtitle: Text(_currentReaderDirectionName()), onTap: () async { await choosePagerDirection(context); diff --git a/lib/basic/config/ReaderSliderPosition.dart b/lib/basic/config/ReaderSliderPosition.dart index 93527df..9045073 100644 --- a/lib/basic/config/ReaderSliderPosition.dart +++ b/lib/basic/config/ReaderSliderPosition.dart @@ -49,7 +49,7 @@ Widget readerSliderPositionSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("滚动条的位置"), + title: const Text("滚动条的位置"), subtitle: Text(currentReaderSliderPositionName()), onTap: () async { await chooseReaderSliderPosition(context); diff --git a/lib/basic/config/ReaderType.dart b/lib/basic/config/ReaderType.dart index e4359e5..deb1bb8 100644 --- a/lib/basic/config/ReaderType.dart +++ b/lib/basic/config/ReaderType.dart @@ -52,7 +52,7 @@ Future choosePagerType(BuildContext buildContext) async { context: buildContext, builder: (BuildContext context) { return SimpleDialog( - title: Text("选择阅读模式"), + title: const Text("选择阅读模式"), children: _types.entries .map((e) => SimpleDialogOption( child: Text(e.key), @@ -74,7 +74,7 @@ Widget readerTypeSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("阅读器模式"), + title: const Text("阅读器模式"), subtitle: Text(currentReaderTypeName()), onTap: () async { await choosePagerType(context); diff --git a/lib/basic/config/ShadowCategories.dart b/lib/basic/config/ShadowCategories.dart index a05710b..d5a0db6 100644 --- a/lib/basic/config/ShadowCategories.dart +++ b/lib/basic/config/ShadowCategories.dart @@ -38,10 +38,10 @@ Future _chooseShadowCategories(BuildContext context) async { } } return MultiSelectDialog( - title: Text('封印'), + title: const Text('封印'), searchHint: '搜索', - cancelText: Text('取消'), - confirmText: Text('确定'), + cancelText: const Text('取消'), + confirmText: const Text('确定'), items: storedCategories.map((e) => MultiSelectItem(e, e)).toList(), initialValue: initialValue, onConfirm: (List? value) async { @@ -69,7 +69,7 @@ Widget shadowCategoriesSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("封印"), + title: const Text("封印"), subtitle: Text(jsonEncode(shadowCategories)), onTap: () async { await _chooseShadowCategories(context); diff --git a/lib/basic/config/Themes.dart b/lib/basic/config/Themes.dart index 35716bd..cc71f1f 100644 --- a/lib/basic/config/Themes.dart +++ b/lib/basic/config/Themes.dart @@ -42,7 +42,7 @@ Widget fontSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("字体"), + title: const Text("字体"), subtitle: Text("$_fontFamily"), onTap: () async { await inputFont(context); @@ -170,7 +170,7 @@ class _DarkTheme extends _ThemePackage { colorScheme: ColorScheme.light( secondary: Colors.pink.shade200, ), - appBarTheme: AppBarTheme( + appBarTheme: const AppBarTheme( systemOverlayStyle: SystemUiOverlayStyle.light, color: Color(0xFF1E1E1E), iconTheme: IconThemeData( @@ -207,13 +207,16 @@ class _DustyBlueTheme extends _ThemePackage { ThemeData themeData(ThemeData rawData) => rawData.copyWith( scaffoldBackgroundColor: Color.alphaBlend( - Color(0x11999999), Color(0xff20253b)), - cardColor: Color.alphaBlend(Color(0x11AAAAAA), Color(0xff20253b)), + const Color(0x11999999), const Color(0xff20253b), + ), + cardColor: Color.alphaBlend( + const Color(0x11AAAAAA), const Color(0xff20253b), + ), brightness: Brightness.light, colorScheme: ColorScheme.light( secondary: Colors.blue.shade200, ), - appBarTheme: AppBarTheme( + appBarTheme: const AppBarTheme( systemOverlayStyle: SystemUiOverlayStyle.light, color: Color(0xff20253b), iconTheme: IconThemeData( @@ -339,7 +342,7 @@ Future chooseTheme(BuildContext buildContext) async { onChange(!_androidNightMode); }, child: Container( - margin: EdgeInsets.only(top: 3, bottom: 3), + margin: const EdgeInsets.only(top: 3, bottom: 3), decoration: BoxDecoration( border: Border( top: BorderSide( @@ -362,7 +365,7 @@ Future chooseTheme(BuildContext buildContext) async { value: _androidNightMode, onChanged: onChange, ), - Text("随手机进入黑暗模式"), + const Text("随手机进入黑暗模式"), ], ), ), diff --git a/lib/basic/config/TimeOffsetHour.dart b/lib/basic/config/TimeOffsetHour.dart index 742f6f1..d7c626a 100644 --- a/lib/basic/config/TimeOffsetHour.dart +++ b/lib/basic/config/TimeOffsetHour.dart @@ -43,7 +43,7 @@ Widget timeZoneSetting() { c = "+" + c; } return ListTile( - title: Text("时区"), + title: const Text("时区"), subtitle: Text(c), onTap: () async { await _chooseTimeZone(context); diff --git a/lib/basic/config/Version.dart b/lib/basic/config/Version.dart index 4ce88f8..d2c1d22 100644 --- a/lib/basic/config/Version.dart +++ b/lib/basic/config/Version.dart @@ -140,7 +140,7 @@ Widget autoUpdateCheckSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("自动检查更新"), + title: const Text("自动检查更新"), subtitle: Text(_periodText()), onTap: () async { await _choosePeriod(context); diff --git a/lib/basic/config/VolumeController.dart b/lib/basic/config/VolumeController.dart index bf0aa0b..8c2b828 100644 --- a/lib/basic/config/VolumeController.dart +++ b/lib/basic/config/VolumeController.dart @@ -30,7 +30,7 @@ Widget volumeControllerSetting() { return StatefulBuilder(builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("阅读器音量键翻页"), + title: const Text("阅读器音量键翻页"), subtitle: Text(volumeController ? "是" : "否"), onTap: () async { await _chooseVolumeController(context); diff --git a/lib/basic/config/shadowCategoriesMode.dart b/lib/basic/config/shadowCategoriesMode.dart index 285be21..caf11f7 100644 --- a/lib/basic/config/shadowCategoriesMode.dart +++ b/lib/basic/config/shadowCategoriesMode.dart @@ -61,7 +61,7 @@ Widget shadowCategoriesModeSetting() { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return ListTile( - title: Text("封印模式"), + title: const Text("封印模式"), subtitle: Text(_currentShadowCategoriesMode()), onTap: () async { await _chooseShadowCategoriesMode(context); diff --git a/lib/main.dart b/lib/main.dart index be96da6..990afc1 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -7,7 +7,7 @@ import 'package:pikapika/screens/components/MouseAndTouchScrollBehavior.dart'; import 'basic/config/Themes.dart'; void main() { - runApp(PikapikaApp()); + runApp(const PikapikaApp()); } class PikapikaApp extends StatefulWidget { @@ -41,7 +41,7 @@ class _PikapikaAppState extends State { theme: currentThemeData(), darkTheme: currentDarkTheme(), navigatorObservers: [navigatorObserver, routeObserver], - home: InitScreen(), + home: const InitScreen(), ); } } diff --git a/lib/screens/AboutScreen.dart b/lib/screens/AboutScreen.dart index 196611f..c76abc1 100644 --- a/lib/screens/AboutScreen.dart +++ b/lib/screens/AboutScreen.dart @@ -5,6 +5,8 @@ import 'package:pikapika/basic/Cross.dart'; import 'package:pikapika/basic/config/Version.dart'; import 'package:pikapika/screens/components/Badge.dart'; +import 'components/RightClickPop.dart'; + const _releasesUrl = "https://github.com/niuhuan/pikapika/releases"; // 关于 @@ -33,7 +35,11 @@ class _AboutScreenState extends State { } @override - Widget build(BuildContext context) { + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { var size = MediaQuery.of(context).size; var min = size.width < size.height ? size.width : size.height; var _currentVersion = currentVersion(); @@ -59,21 +65,21 @@ class _AboutScreenState extends State { ), ), Container(height: 20), - Divider(), + const Divider(), Container( - padding: EdgeInsets.only(left: 20, right: 20), + padding: const EdgeInsets.only(left: 20, right: 20), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '软件版本 : $_currentVersion', - style: TextStyle( + style: const TextStyle( height: 1.3, ), ), Row( children: [ - Text( + const Text( "检查更新 : ", style: TextStyle( height: 1.3, @@ -87,12 +93,12 @@ class _AboutScreenState extends State { ], ), ), - Divider(), + const Divider(), autoUpdateCheckSetting(), - Divider(), + const Divider(), Container( - padding: EdgeInsets.all(20), - child: SelectableText( + padding: const EdgeInsets.all(20), + child: const SelectableText( "提示 : \n" "1. 详情页的作者/上传者/分类/标签都可以点击\n" "2. 详情页的作者/上传者/标题长按可以复制\n" @@ -104,7 +110,7 @@ class _AboutScreenState extends State { ), ), ), - Divider(), + const Divider(), ], ), ); @@ -118,16 +124,16 @@ class _AboutScreenState extends State { WidgetSpan( child: Badged( child: Container( - padding: EdgeInsets.only(right: 12), + padding: const EdgeInsets.only(right: 12), child: Text( latestVersion, - style: TextStyle(height: 1.3), + style: const TextStyle(height: 1.3), ), ), badge: "1", ), ), - TextSpan(text: " "), + const TextSpan(text: " "), TextSpan( text: "去下载", style: TextStyle( @@ -144,13 +150,13 @@ class _AboutScreenState extends State { return Text.rich( TextSpan( children: [ - TextSpan(text: "未检测到新版本", style: TextStyle(height: 1.3)), + const TextSpan(text: "未检测到新版本", style: TextStyle(height: 1.3)), WidgetSpan( alignment: PlaceholderAlignment.middle, child: Container( - padding: EdgeInsets.all(4), - margin: EdgeInsets.only(left: 3, right: 3), - decoration: BoxDecoration( + padding: const EdgeInsets.all(4), + margin: const EdgeInsets.only(left: 3, right: 3), + decoration: const BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(20)), ), ), @@ -187,13 +193,13 @@ class _AboutScreenState extends State { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Divider(), - Text("更新内容:"), + const Divider(), + const Text("更新内容:"), Container( - padding: EdgeInsets.all(15), + padding: const EdgeInsets.all(15), child: Text( latestVersionInfo, - style: TextStyle(), + style: const TextStyle(), ), ), ], @@ -202,9 +208,9 @@ class _AboutScreenState extends State { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Divider(), + const Divider(), Container( - padding: EdgeInsets.all(15), + padding: const EdgeInsets.all(15), child: Text.rich( TextSpan( text: "去RELEASE仓库", diff --git a/lib/screens/AccountScreen.dart b/lib/screens/AccountScreen.dart index 1ece2e4..1e22d52 100644 --- a/lib/screens/AccountScreen.dart +++ b/lib/screens/AccountScreen.dart @@ -62,22 +62,22 @@ class _AccountScreenState extends State { onPressed: () { chooseTheme(context); }, - icon: Text('主题'), + icon: const Text('主题'), ), IconButton( onPressed: _toDownloadList, - icon: Icon(Icons.download_rounded), + icon: const Icon(Icons.download_rounded), ), IconButton( onPressed: _logIn, - icon: Icon(Icons.save), + icon: const Icon(Icons.save), ), ], ), body: ListView( children: [ ListTile( - title: Text("账号"), + title: const Text("账号"), subtitle: Text(_username == "" ? "未设置" : _username), onTap: () async { String? input = await displayTextInputDialog( @@ -95,7 +95,7 @@ class _AccountScreenState extends State { }, ), ListTile( - title: Text("密码"), + title: const Text("密码"), subtitle: Text(_password == "" ? "未设置" : '\u2022' * 10), onTap: () async { String? input = await displayTextInputDialog( @@ -113,12 +113,12 @@ class _AccountScreenState extends State { } }, ), - NetworkSetting(), + const NetworkSetting(), Row( children: [ Expanded( child: Container( - padding: EdgeInsets.all(15), + padding: const EdgeInsets.all(15), child: Text.rich(TextSpan( text: '没有账号,我要注册', style: TextStyle( @@ -180,7 +180,7 @@ class _AccountScreenState extends State { _toDownloadList() { Navigator.push( context, - MaterialPageRoute(builder: (context) => DownloadListScreen()), + MaterialPageRoute(builder: (context) => const DownloadListScreen()), ); } } diff --git a/lib/screens/AppScreen.dart b/lib/screens/AppScreen.dart index 9435092..34dbe71 100644 --- a/lib/screens/AppScreen.dart +++ b/lib/screens/AppScreen.dart @@ -52,13 +52,13 @@ class _AppScreenState extends State { ), bottomNavigationBar: BottomNavigationBar( items: [ - BottomNavigationBarItem( + const BottomNavigationBarItem( icon: Icon(Icons.public), label: '浏览', ), BottomNavigationBarItem( icon: Badged( - child: Icon(Icons.face), + child: const Icon(Icons.face), badge: latestVersion() == null ? null : "1", ), label: '我的', diff --git a/lib/screens/CategoriesScreen.dart b/lib/screens/CategoriesScreen.dart index 103ef6b..e9c892a 100644 --- a/lib/screens/CategoriesScreen.dart +++ b/lib/screens/CategoriesScreen.dart @@ -25,7 +25,7 @@ class CategoriesScreen extends StatefulWidget { } class _CategoriesScreenState extends State { - late SearchBar _searchBar = SearchBar( + late final SearchBar _searchBar = SearchBar( hintText: '搜索', inBar: false, setState: setState, @@ -41,7 +41,7 @@ class _CategoriesScreenState extends State { }, buildDefaultAppBar: (BuildContext context) { return AppBar( - title: Text('分类'), + title: const Text('分类'), actions: [ shadowCategoriesActionButton(context), _searchBar.getSearchAction(context), @@ -113,7 +113,7 @@ class _CategoriesScreenState extends State { ); } if (snapshot.connectionState != ConnectionState.done) { - return ContentLoading(label: '加载中'); + return const ContentLoading(label: '加载中'); } return ListView( children: [ @@ -123,7 +123,7 @@ class _CategoriesScreenState extends State { alignment: WrapAlignment.spaceAround, children: _buildChannels(), ), - Divider(), + const Divider(), Wrap( runSpacing: 20, alignment: WrapAlignment.spaceAround, @@ -253,7 +253,7 @@ class _CategoriesScreenState extends State { () { Navigator.push( context, - MaterialPageRoute(builder: (context) => RankingsScreen()), + MaterialPageRoute(builder: (context) => const RankingsScreen()), ); }, ); @@ -265,7 +265,7 @@ class _CategoriesScreenState extends State { () { Navigator.push( context, - MaterialPageRoute(builder: (context) => RandomComicsScreen()), + MaterialPageRoute(builder: (context) => const RandomComicsScreen()), ); }, ); @@ -277,7 +277,7 @@ class _CategoriesScreenState extends State { () { Navigator.push( context, - MaterialPageRoute(builder: (context) => GamesScreen()), + MaterialPageRoute(builder: (context) => const GamesScreen()), ); }, ); diff --git a/lib/screens/ComicInfoScreen.dart b/lib/screens/ComicInfoScreen.dart index b932994..ed54c2a 100644 --- a/lib/screens/ComicInfoScreen.dart +++ b/lib/screens/ComicInfoScreen.dart @@ -17,6 +17,7 @@ import 'components/CommentList.dart'; import 'components/ContentError.dart'; import 'components/ContentLoading.dart'; import 'components/ContinueReadButton.dart'; +import 'components/RightClickPop.dart'; // 漫画详情 class ComicInfoScreen extends StatefulWidget { @@ -73,7 +74,11 @@ class _ComicInfoScreenState extends State with RouteAware { } @override - Widget build(BuildContext context) { + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { return FutureBuilder( future: _comicFuture, builder: (BuildContext context, AsyncSnapshot snapshot) { @@ -94,7 +99,7 @@ class _ComicInfoScreenState extends State with RouteAware { if (snapshot.connectionState != ConnectionState.done) { return Scaffold( appBar: AppBar(), - body: ContentLoading(label: '加载中'), + body: const ContentLoading(label: '加载中'), ); } var _comicInfo = snapshot.data!; @@ -122,7 +127,7 @@ class _ComicInfoScreenState extends State with RouteAware { ComicTagsCard(_comicInfo.tags), ComicDescriptionCard(description: _comicInfo.description), Container( - padding: EdgeInsets.all(10), + padding: const EdgeInsets.all(10), decoration: BoxDecoration( border: Border( bottom: BorderSide( @@ -173,7 +178,7 @@ class _ComicInfoScreenState extends State with RouteAware { TextSpan( text: "( ${formatTimeToDate(_comicInfo.updatedAt)} )", - style: TextStyle( + style: const TextStyle( fontSize: 13, color: Colors.grey, ), @@ -245,11 +250,11 @@ class _ComicInfoScreenState extends State with RouteAware { this._epListFuture = _loadEps(); }); }, - icon: Icon(Icons.sync_problem), + icon: const Icon(Icons.sync_problem), ); } if (snapshot.connectionState != ConnectionState.done) { - return IconButton(onPressed: () {}, icon: Icon(Icons.sync)); + return IconButton(onPressed: () {}, icon: const Icon(Icons.sync)); } var _epList = snapshot.data!; return IconButton( @@ -264,7 +269,7 @@ class _ComicInfoScreenState extends State with RouteAware { ), ); }, - icon: Icon(Icons.download_rounded), + icon: const Icon(Icons.download_rounded), ); }, ); @@ -305,8 +310,10 @@ class _ComicInfoScreenState extends State with RouteAware { _push(_comicInfo, _epList, e.order, null); }, color: Colors.white, - child: - Text(e.title, style: TextStyle(color: Colors.black)), + child: Text( + e.title, + style: const TextStyle(color: Colors.black), + ), ); }), ], diff --git a/lib/screens/ComicReaderScreen.dart b/lib/screens/ComicReaderScreen.dart index 18e0e81..fa99aee 100644 --- a/lib/screens/ComicReaderScreen.dart +++ b/lib/screens/ComicReaderScreen.dart @@ -12,6 +12,7 @@ import 'package:pikapika/screens/components/ContentError.dart'; import 'package:pikapika/screens/components/ContentLoading.dart'; import 'DownloadConfirmScreen.dart'; import 'components/ImageReader.dart'; +import 'components/RightClickPop.dart'; // 在线阅读漫画 class ComicReaderScreen extends StatefulWidget { @@ -142,7 +143,11 @@ class _ComicReaderScreenState extends State { } @override - Widget build(BuildContext context) { + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { return readerKeyboardHolder(_build(context)); } diff --git a/lib/screens/ComicsScreen.dart b/lib/screens/ComicsScreen.dart index ded172c..255b5e4 100644 --- a/lib/screens/ComicsScreen.dart +++ b/lib/screens/ComicsScreen.dart @@ -9,6 +9,7 @@ import 'package:pikapika/basic/Method.dart'; import '../basic/Entities.dart'; import 'SearchScreen.dart'; import 'components/ComicPager.dart'; +import 'components/RightClickPop.dart'; // 漫画列表 class ComicsScreen extends StatefulWidget { @@ -96,7 +97,7 @@ class _ComicsScreenState extends State { )); } }, - icon: Icon(Icons.category), + icon: const Icon(Icons.category), ); Future _load(String _currentSort, int _currentPage) { @@ -111,7 +112,11 @@ class _ComicsScreenState extends State { } @override - Widget build(BuildContext context) { + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { PreferredSizeWidget? appBar; if (widget.tag == null && widget.creatorId == null && diff --git a/lib/screens/CommentScreen.dart b/lib/screens/CommentScreen.dart index 33937de..784f8e9 100644 --- a/lib/screens/CommentScreen.dart +++ b/lib/screens/CommentScreen.dart @@ -7,6 +7,8 @@ import 'package:pikapika/screens/components/CommentItem.dart'; import 'package:pikapika/screens/components/CommentMainType.dart'; import 'package:pikapika/screens/components/ContentBuilder.dart'; +import 'components/RightClickPop.dart'; + class _CommentChildPage extends e.Page { late List docs; @@ -76,10 +78,14 @@ class _CommentScreenState extends State { } @override - Widget build(BuildContext context) { + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text('评论'), + title: const Text('评论'), ), body: Column( children: [ @@ -138,8 +144,8 @@ class _CommentScreenState extends State { ), ), ), - padding: EdgeInsets.all(30), - child: Center( + padding: const EdgeInsets.all(30), + child: const Center( child: Text('我有话要讲'), ), ), @@ -156,8 +162,8 @@ class _CommentScreenState extends State { }); }, child: Container( - padding: EdgeInsets.all(30), - child: Center( + padding: const EdgeInsets.all(30), + child: const Center( child: Text('上一页'), ), ), @@ -176,8 +182,8 @@ class _CommentScreenState extends State { }); }, child: Container( - padding: EdgeInsets.all(30), - child: Center( + padding: const EdgeInsets.all(30), + child: const Center( child: Text('下一页'), ), ), diff --git a/lib/screens/DownloadConfirmScreen.dart b/lib/screens/DownloadConfirmScreen.dart index 095b499..897cae8 100644 --- a/lib/screens/DownloadConfirmScreen.dart +++ b/lib/screens/DownloadConfirmScreen.dart @@ -7,6 +7,7 @@ import 'package:pikapika/screens/components/ContentLoading.dart'; import 'package:pikapika/basic/Method.dart'; import 'components/ComicInfoCard.dart'; +import 'components/RightClickPop.dart'; // 确认下载 class DownloadConfirmScreen extends StatefulWidget { @@ -99,7 +100,11 @@ class _DownloadConfirmScreenState extends State { } @override - Widget build(BuildContext context) { + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("下载 - ${widget.comicInfo.title}"), @@ -110,10 +115,10 @@ class _DownloadConfirmScreenState extends State { if (snapshot.hasError) { print(snapshot.error); print(snapshot.stackTrace); - return Text('error'); + return const Text('error'); } if (snapshot.connectionState != ConnectionState.done) { - return ContentLoading(label: '加载中'); + return const ContentLoading(label: '加载中'); } return ListView( children: [ @@ -126,7 +131,7 @@ class _DownloadConfirmScreenState extends State { children: [ ...widget.epList.map((e) { return Container( - padding: EdgeInsets.all(5), + padding: const EdgeInsets.all(5), child: MaterialButton( onPressed: () { _clickOfEp(e); @@ -141,7 +146,7 @@ class _DownloadConfirmScreenState extends State { width: 10, ), Text(e.title, - style: TextStyle(color: Colors.black)), + style: const TextStyle(color: Colors.black)), ], ), ), @@ -159,7 +164,7 @@ class _DownloadConfirmScreenState extends State { Widget _buildButtons() { var theme = Theme.of(context); return Container( - padding: EdgeInsets.all(5), + padding: const EdgeInsets.all(5), decoration: BoxDecoration( border: Border( bottom: BorderSide( @@ -176,13 +181,13 @@ class _DownloadConfirmScreenState extends State { color: theme.colorScheme.secondary, textColor: Colors.white, onPressed: _selectAll, - child: Text('全选'), + child: const Text('全选'), ), MaterialButton( color: theme.colorScheme.secondary, textColor: Colors.white, onPressed: _download, - child: Text('确定下载'), + child: const Text('确定下载'), ), ], ), @@ -201,12 +206,12 @@ class _DownloadConfirmScreenState extends State { Icon _iconOfEp(Ep e) { if (_taskedEps.contains(e.order)) { - return Icon(Icons.download_rounded, color: Colors.black); + return const Icon(Icons.download_rounded, color: Colors.black); } if (_selectedEps.contains(e.order)) { - return Icon(Icons.check_box, color: Colors.black); + return const Icon(Icons.check_box, color: Colors.black); } - return Icon(Icons.check_box_outline_blank, color: Colors.black); + return const Icon(Icons.check_box_outline_blank, color: Colors.black); } void _clickOfEp(Ep e) { diff --git a/lib/screens/DownloadExportToFileScreen.dart b/lib/screens/DownloadExportToFileScreen.dart index ee26551..fd36919 100644 --- a/lib/screens/DownloadExportToFileScreen.dart +++ b/lib/screens/DownloadExportToFileScreen.dart @@ -85,18 +85,18 @@ class _DownloadExportToFileScreenState }); } if (snapshot.connectionState != ConnectionState.done) { - return ContentLoading(label: '加载中'); + return const ContentLoading(label: '加载中'); } return ListView( children: [ DownloadInfoCard(task: _task), Container( - padding: EdgeInsets.all(8), + padding: const EdgeInsets.all(8), child: exportResult != "" ? Text(exportResult) : Container(), ), Container( - padding: EdgeInsets.all(8), - child: Text('TIPS : 选择一个目录'), + padding: const EdgeInsets.all(8), + child: const Text('TIPS : 选择一个目录'), ), ..._buildExportToFileButtons(), MaterialButton( @@ -280,7 +280,7 @@ class _DownloadExportToFileScreenState builder: (BuildContext context, BoxConstraints constraints) { return Container( width: constraints.maxWidth, - padding: EdgeInsets.only(top: 15, bottom: 15), + padding: const EdgeInsets.only(top: 15, bottom: 15), color: (Theme.of(context).textTheme.bodyText1?.color ?? Colors.black) .withOpacity(.05), child: Text( diff --git a/lib/screens/DownloadExportToSocketScreen.dart b/lib/screens/DownloadExportToSocketScreen.dart index 4f78616..5a02f24 100644 --- a/lib/screens/DownloadExportToSocketScreen.dart +++ b/lib/screens/DownloadExportToSocketScreen.dart @@ -74,16 +74,16 @@ class _DownloadExportToSocketScreenState }); } if (snapshot.connectionState != ConnectionState.done) { - return ContentLoading(label: '加载中'); + return const ContentLoading(label: '加载中'); } return ListView( children: [ DownloadInfoCard(task: widget.task), Container( - padding: EdgeInsets.all(8), + padding: const EdgeInsets.all(8), child: Column( children: [ - Text( + const Text( 'TIPS : 传输成功之前请不要退出页面, 一次只能导出到一个设备, 两台设备需要在同一网段或无限局域网中, 请另外一台设备输入 IP:端口 , 有一个IP时请选择无限局域网的IP, 通常是192.168开头'), FutureBuilder( future: _ipFuture, diff --git a/lib/screens/DownloadImportScreen.dart b/lib/screens/DownloadImportScreen.dart index 2fe6497..effb094 100644 --- a/lib/screens/DownloadImportScreen.dart +++ b/lib/screens/DownloadImportScreen.dart @@ -62,12 +62,12 @@ class _DownloadImportScreenState extends State { return Scaffold( appBar: AppBar( - title: Text('导入'), + title: const Text('导入'), ), body: ListView( children: [ Container( - padding: EdgeInsets.all(10), + padding: const EdgeInsets.all(10), child: Text(_importMessage), ), ...actions, @@ -116,7 +116,7 @@ class _DownloadImportScreenState extends State { } } }, - child: Text('选择zip文件进行导入'), + child: const Text('选择zip文件进行导入'), ); } @@ -146,7 +146,7 @@ class _DownloadImportScreenState extends State { } } }, - child: Text('从其他设备导入'), + child: const Text('从其他设备导入'), ); } } diff --git a/lib/screens/DownloadInfoScreen.dart b/lib/screens/DownloadInfoScreen.dart index 7da579e..f1d6d2a 100644 --- a/lib/screens/DownloadInfoScreen.dart +++ b/lib/screens/DownloadInfoScreen.dart @@ -82,7 +82,7 @@ class _DownloadInfoScreenState extends State ), ); }, - icon: Icon(Icons.add_to_home_screen), + icon: const Icon(Icons.add_to_home_screen), ), IconButton( onPressed: () { @@ -95,7 +95,7 @@ class _DownloadInfoScreenState extends State ), ); }, - icon: Icon(Icons.settings_ethernet_outlined), + icon: const Icon(Icons.settings_ethernet_outlined), ), ], ), @@ -113,7 +113,7 @@ class _DownloadInfoScreenState extends State }); } if (snapshot.connectionState != ConnectionState.done) { - return ContentLoading(label: '加载中'); + return const ContentLoading(label: '加载中'); } List tagsDynamic = json.decode(_task.tags); List tags = tagsDynamic.map((e) => "$e").toList(); diff --git a/lib/screens/DownloadListScreen.dart b/lib/screens/DownloadListScreen.dart index 3ebef74..2b43c41 100644 --- a/lib/screens/DownloadListScreen.dart +++ b/lib/screens/DownloadListScreen.dart @@ -10,6 +10,7 @@ import 'DownloadImportScreen.dart'; import 'DownloadInfoScreen.dart'; import 'components/ContentLoading.dart'; import 'components/DownloadInfoCard.dart'; +import 'components/RightClickPop.dart'; // 下载列表 class DownloadListScreen extends StatefulWidget { @@ -54,9 +55,9 @@ class _DownloadListScreenState extends State { @override Widget build(BuildContext context) { - return Scaffold( + final screen = Scaffold( appBar: AppBar( - title: Text('下载列表'), + title: const Text('下载列表'), actions: [ importButton(), pauseButton(), @@ -68,13 +69,13 @@ class _DownloadListScreenState extends State { builder: (BuildContext context, AsyncSnapshot> snapshot) { if (snapshot.connectionState != ConnectionState.done) { - return ContentLoading(label: '加载中'); + return const ContentLoading(label: '加载中'); } if (snapshot.hasError) { print("${snapshot.error}"); print("${snapshot.stackTrace}"); - return Center(child: Text('加载失败')); + return const Center(child: Text('加载失败')); } var data = snapshot.data!; @@ -106,6 +107,7 @@ class _DownloadListScreenState extends State { }, ), ); + return RightClickPop(screen); } Widget downloadWidget(DownloadComic e) { @@ -155,12 +157,12 @@ class _DownloadListScreenState extends State { child: Column( children: [ Expanded(child: Container()), - Icon( + const Icon( Icons.label_important, size: 18, color: Colors.white, ), - Text( + const Text( '导入', style: TextStyle(fontSize: 14, color: Colors.white), ), @@ -197,7 +199,7 @@ class _DownloadListScreenState extends State { _downloadRunning = to; }); }, - child: Text('确认'), + child: const Text('确认'), ), ], ); diff --git a/lib/screens/FavouritePaperScreen.dart b/lib/screens/FavouritePaperScreen.dart index 1113a83..dd35d79 100644 --- a/lib/screens/FavouritePaperScreen.dart +++ b/lib/screens/FavouritePaperScreen.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:pikapika/basic/Method.dart'; import '../basic/Entities.dart'; import 'components/ComicPager.dart'; +import 'components/RightClickPop.dart'; // 收藏的漫画 class FavouritePaperScreen extends StatefulWidget { @@ -17,10 +18,14 @@ class _FavouritePaperScreen extends State { } @override - Widget build(BuildContext context) { + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text('收藏'), + title: const Text('收藏'), ), body: ComicPager( fetchPage: _fetch, diff --git a/lib/screens/FilePhotoViewScreen.dart b/lib/screens/FilePhotoViewScreen.dart index 74460a5..dd0c9bb 100644 --- a/lib/screens/FilePhotoViewScreen.dart +++ b/lib/screens/FilePhotoViewScreen.dart @@ -4,6 +4,8 @@ import 'package:pikapika/basic/Common.dart'; import 'package:pikapika/basic/Cross.dart'; import 'package:pikapika/screens/components/Images.dart'; +import 'components/RightClickPop.dart'; + // 预览图片 class FilePhotoViewScreen extends StatelessWidget { final String filePath; @@ -11,7 +13,11 @@ class FilePhotoViewScreen extends StatelessWidget { const FilePhotoViewScreen(this.filePath, {Key? key}) : super(key: key); @override - Widget build(BuildContext context) => Scaffold( + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) => Scaffold( body: Stack( children: [ GestureDetector( @@ -31,8 +37,8 @@ class FilePhotoViewScreen extends StatelessWidget { InkWell( onTap: () => Navigator.of(context).pop(), child: Container( - margin: EdgeInsets.only(top: 30), - padding: EdgeInsets.only(left: 4, right: 4), + margin: const EdgeInsets.only(top: 30), + padding: const EdgeInsets.only(left: 4, right: 4), decoration: BoxDecoration( color: Colors.black.withOpacity(.75), borderRadius: BorderRadius.only( diff --git a/lib/screens/GameDownloadScreen.dart b/lib/screens/GameDownloadScreen.dart index 0621198..b8d04be 100644 --- a/lib/screens/GameDownloadScreen.dart +++ b/lib/screens/GameDownloadScreen.dart @@ -5,6 +5,7 @@ import 'package:pikapika/basic/Method.dart'; import 'package:pikapika/screens/components/ItemBuilder.dart'; import 'components/GameTitleCard.dart'; +import 'components/RightClickPop.dart'; // 游戏下载地址列表页 class GameDownloadScreen extends StatefulWidget { @@ -21,7 +22,11 @@ class _GameDownloadScreenState extends State { method.downloadGame(widget.info.androidLinks[0]); @override - Widget build(BuildContext context) { + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("下载 - ${widget.info.title}"), @@ -64,8 +69,8 @@ class _GameDownloadScreenState extends State { children: [ Expanded( child: Container( - margin: EdgeInsets.all(10), - padding: EdgeInsets.all(10), + margin: const EdgeInsets.all(10), + padding: const EdgeInsets.all(10), decoration: BoxDecoration( border: Border.all( color: Colors.grey.shade500, diff --git a/lib/screens/GameInfoScreen.dart b/lib/screens/GameInfoScreen.dart index 156bdea..1c80d42 100644 --- a/lib/screens/GameInfoScreen.dart +++ b/lib/screens/GameInfoScreen.dart @@ -9,6 +9,7 @@ import 'package:pikapika/screens/components/Images.dart'; import 'GameDownloadScreen.dart'; import 'components/CommentList.dart'; import 'components/GameTitleCard.dart'; +import 'components/RightClickPop.dart'; // 游戏详情 class GameInfoScreen extends StatefulWidget { @@ -24,14 +25,18 @@ class _GameInfoScreenState extends State { late var _future = method.game(widget.gameId); @override - Widget build(BuildContext context) { + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { return FutureBuilder( future: _future, builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.hasError) { return Scaffold( appBar: AppBar( - title: Text('加载出错'), + title: const Text('加载出错'), ), body: ContentError( error: snapshot.error, @@ -46,16 +51,16 @@ class _GameInfoScreenState extends State { if (snapshot.connectionState != ConnectionState.done) { return Scaffold( appBar: AppBar( - title: Text('加载中'), + title: const Text('加载中'), ), - body: ContentLoading(label: '加载中'), + body: const ContentLoading(label: '加载中'), ); } - BorderRadius iconRadius = BorderRadius.all(Radius.circular(6)); + BorderRadius iconRadius = const BorderRadius.all(Radius.circular(6)); double screenShootMargin = 10; double screenShootHeight = 200; - TextStyle descriptionStyle = TextStyle(); + TextStyle descriptionStyle = const TextStyle(); return LayoutBuilder( builder: (BuildContext context, BoxConstraints constraints) { @@ -70,14 +75,14 @@ class _GameInfoScreenState extends State { children: [ GameTitleCard(info), Container( - padding: EdgeInsets.only( + padding: const EdgeInsets.only( left: 20, right: 20, top: 5, bottom: 10, ), child: ClipRRect( - borderRadius: BorderRadius.all(Radius.circular(5)), + borderRadius: const BorderRadius.all(Radius.circular(5)), child: MaterialButton( color: Theme.of(context).colorScheme.secondary, textColor: Colors.white, @@ -90,8 +95,8 @@ class _GameInfoScreenState extends State { ); }, child: Container( - padding: EdgeInsets.all(5), - child: Text('下载'), + padding: const EdgeInsets.all(5), + child: const Text('下载'), ), ), ), @@ -137,7 +142,7 @@ class _GameInfoScreenState extends State { .withOpacity(.025), child: TabBar( tabs: [ - Tab(text: '详情 '), + const Tab(text: '详情 '), Tab(text: '评论 (${info.commentsCount})'), ], indicatorColor: @@ -155,7 +160,7 @@ class _GameInfoScreenState extends State { ), _tabIndex == 0 ? Container( - padding: EdgeInsets.all(20), + padding: const EdgeInsets.all(20), child: Text(info.description, style: descriptionStyle), ) diff --git a/lib/screens/GamesScreen.dart b/lib/screens/GamesScreen.dart index 80521c2..a977c0d 100644 --- a/lib/screens/GamesScreen.dart +++ b/lib/screens/GamesScreen.dart @@ -6,6 +6,7 @@ import 'package:pikapika/screens/components/ContentBuilder.dart'; import 'GameInfoScreen.dart'; import 'components/Images.dart'; +import 'components/RightClickPop.dart'; // 游戏列表 class GamesScreen extends StatefulWidget { @@ -31,10 +32,14 @@ class _GamesScreenState extends State { } @override - Widget build(BuildContext context) { + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text('游戏'), + title: const Text('游戏'), ), body: ContentBuilder( future: _future, @@ -64,9 +69,9 @@ class _GamesScreenState extends State { } return Scaffold( appBar: PreferredSize( - preferredSize: Size.fromHeight(40), + preferredSize: const Size.fromHeight(40), child: Container( - padding: EdgeInsets.only(left: 10, right: 10), + padding: const EdgeInsets.only(left: 10, right: 10), decoration: BoxDecoration( border: Border( bottom: BorderSide( @@ -168,7 +173,7 @@ class _GamesScreenState extends State { _onPageChange(page.page + 1); }, child: Container( - padding: EdgeInsets.only(top: 30, bottom: 30), + padding: const EdgeInsets.only(top: 30, bottom: 30), child: Text('下一页'), ), ), diff --git a/lib/screens/InitScreen.dart b/lib/screens/InitScreen.dart index d28b576..c5721c5 100644 --- a/lib/screens/InitScreen.dart +++ b/lib/screens/InitScreen.dart @@ -95,7 +95,7 @@ class _InitScreenState extends State { // 否则跳转到登录页 Navigator.pushReplacement( context, - MaterialPageRoute(builder: (context) => AccountScreen()), + MaterialPageRoute(builder: (context) => const AccountScreen()), ); } } @@ -103,9 +103,9 @@ class _InitScreenState extends State { @override Widget build(BuildContext context) { return Scaffold( - backgroundColor: Color(0xfffffced), + backgroundColor: const Color(0xfffffced), body: ConstrainedBox( - constraints: BoxConstraints.expand(), + constraints: const BoxConstraints.expand(), child: Image.asset( "lib/assets/init.jpg", fit: BoxFit.contain, diff --git a/lib/screens/MigrateScreen.dart b/lib/screens/MigrateScreen.dart index 2cadb6d..007c856 100644 --- a/lib/screens/MigrateScreen.dart +++ b/lib/screens/MigrateScreen.dart @@ -6,6 +6,8 @@ import 'package:pikapika/basic/Method.dart'; import 'package:pikapika/screens/components/ContentBuilder.dart'; import 'package:pikapika/screens/components/ContentLoading.dart'; +import 'components/RightClickPop.dart'; + // 数据迁移页面 class MigrateScreen extends StatefulWidget { const MigrateScreen({Key? key}) : super(key: key); @@ -31,10 +33,14 @@ class _MigrateScreenState extends State { } @override - Widget build(BuildContext context) { + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text('数据迁移'), + title: const Text('数据迁移'), ), body: ContentBuilder( future: _future, @@ -46,8 +52,8 @@ class _MigrateScreenState extends State { return ListView( children: [ Container( - padding: EdgeInsets.all(10), - child: Text( + padding: const EdgeInsets.all(10), + child: const Text( "1. 为了手机数据存储空间不足, 且具有内存卡的安卓手机设计, 可将数据迁移到内存卡上。\n\n" "2. 您在迁移之前, 请确保您的下载处于暂停状态, 或下载均已完成, 以保证您的数据完整性。\n\n" "3. 如果迁移中断, 迁移失败, 或其他原因导致程序无法启动, 图片失效等问题, 您可在程序管理中清除本应用程序的数据, 以回复正常使用。\n\n" @@ -58,18 +64,18 @@ class _MigrateScreenState extends State { ), ), Container( - padding: EdgeInsets.all(10), + padding: const EdgeInsets.all(10), child: Text("当前文件储存路径 : $_current"), ), ...paths.map((e) => Container( - padding: EdgeInsets.all(10), + padding: const EdgeInsets.all(10), child: MaterialButton( color: Theme.of(context).accentColor, textColor: Theme.of(context) .accentTextTheme .subtitle1 ?.color, - padding: EdgeInsets.all(10), + padding: const EdgeInsets.all(10), onPressed: () async { if (!await confirmDialog(context, "文件迁移", "您将要迁移到$e, 迁移过程中一定《 不 要 关 闭 程 序 》")) { @@ -96,9 +102,9 @@ class _MigrateScreenState extends State { ], ); case 1: - return ContentLoading(label: "迁移中"); + return const ContentLoading(label: "迁移中"); case 2: - return Center(child: Text("迁移成功 您需要关闭应用程序重新启动")); + return const Center(child: Text("迁移成功 您需要关闭应用程序重新启动")); case 3: return Center(child: Text("迁移失败\n$_message")); default: diff --git a/lib/screens/ModifyPasswordScreen.dart b/lib/screens/ModifyPasswordScreen.dart index 336d096..99c6863 100644 --- a/lib/screens/ModifyPasswordScreen.dart +++ b/lib/screens/ModifyPasswordScreen.dart @@ -3,8 +3,11 @@ import 'package:pikapika/basic/Method.dart'; import 'package:pikapika/screens/components/ContentLoading.dart'; import '../basic/Common.dart'; +import 'components/RightClickPop.dart'; class ModifyPasswordScreen extends StatefulWidget { + const ModifyPasswordScreen({Key? key}) : super(key: key); + @override State createState() => _ModifyPasswordScreenState(); } @@ -16,15 +19,19 @@ class _ModifyPasswordScreenState extends State { late String _newPasswordRep = ""; @override - Widget build(BuildContext context) { + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text("修改密码"), + title: const Text("修改密码"), ), body: _loading ? Stack( children: [ - ContentLoading(label: "请稍后"), + const ContentLoading(label: "请稍后"), WillPopScope( child: Container(), onWillPop: () async { @@ -42,7 +49,7 @@ class _ModifyPasswordScreenState extends State { children: [ const Divider(), ListTile( - title: Text("旧密码"), + title: const Text("旧密码"), subtitle: Text(_oldPassword == "" ? "未填写" : '\u2022' * 10), onTap: () async { String? input = await displayTextInputDialog( @@ -61,7 +68,7 @@ class _ModifyPasswordScreenState extends State { ), const Divider(), ListTile( - title: Text("新密码"), + title: const Text("新密码"), subtitle: Text(_newPassword == "" ? "未填写" : '\u2022' * 10), onTap: () async { String? input = await displayTextInputDialog( @@ -80,7 +87,7 @@ class _ModifyPasswordScreenState extends State { ), const Divider(), ListTile( - title: Text("重复输入新密码"), + title: const Text("重复输入新密码"), subtitle: Text(_newPasswordRep == "" ? "未填写" : '\u2022' * 10), onTap: () async { String? input = await displayTextInputDialog( @@ -99,7 +106,7 @@ class _ModifyPasswordScreenState extends State { ), const Divider(), Container( - margin: EdgeInsets.all(10), + margin: const EdgeInsets.all(10), child: MaterialButton( textColor: Colors.white, color: Theme.of(context).appBarTheme.backgroundColor, @@ -122,7 +129,7 @@ class _ModifyPasswordScreenState extends State { }); } }, - child: Text("确认"), + child: const Text("确认"), ), ), ], diff --git a/lib/screens/NetworkSettingsScreen.dart b/lib/screens/NetworkSettingsScreen.dart index 44469ab..e4577b0 100644 --- a/lib/screens/NetworkSettingsScreen.dart +++ b/lib/screens/NetworkSettingsScreen.dart @@ -1,12 +1,20 @@ import 'package:flutter/material.dart'; import 'package:pikapika/screens/components/NetworkSetting.dart'; +import 'components/RightClickPop.dart'; + class NetworkSettingsScreen extends StatelessWidget { + const NetworkSettingsScreen({Key? key}) : super(key: key); + @override - Widget build(BuildContext context) => Scaffold( - appBar: AppBar(title: Text('网络设置')), + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) => Scaffold( + appBar: AppBar(title: const Text('网络设置')), body: ListView( - children: [ + children: const [ NetworkSetting(), ], ), diff --git a/lib/screens/RandomComicsScreen.dart b/lib/screens/RandomComicsScreen.dart index 10c51e4..8e8496e 100644 --- a/lib/screens/RandomComicsScreen.dart +++ b/lib/screens/RandomComicsScreen.dart @@ -5,9 +5,12 @@ import 'package:pikapika/basic/config/ListLayout.dart'; import 'package:pikapika/basic/config/ShadowCategories.dart'; import 'components/ComicListBuilder.dart'; +import 'components/RightClickPop.dart'; // 随机漫画页面 class RandomComicsScreen extends StatefulWidget { + const RandomComicsScreen({Key? key}) : super(key: key); + @override State createState() => _RandomComicsScreenState(); } @@ -22,7 +25,11 @@ class _RandomComicsScreenState extends State { } @override - Widget build(BuildContext context) { + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('随机本子'), diff --git a/lib/screens/RankingsScreen.dart b/lib/screens/RankingsScreen.dart index 1918da8..033e4c1 100644 --- a/lib/screens/RankingsScreen.dart +++ b/lib/screens/RankingsScreen.dart @@ -5,16 +5,22 @@ import 'package:pikapika/basic/config/ListLayout.dart'; import 'package:pikapika/basic/config/ShadowCategories.dart'; import 'components/ComicListBuilder.dart'; +import 'components/RightClickPop.dart'; // 排行榜 class RankingsScreen extends StatelessWidget { + const RankingsScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { var theme = Theme.of(context); return Scaffold( appBar: AppBar( - title: Text('排行榜'), + title: const Text('排行榜'), actions: [ shadowCategoriesActionButton(context), chooseLayoutActionButton(context), @@ -30,14 +36,14 @@ class RankingsScreen extends StatelessWidget { child: TabBar( indicatorColor: theme.colorScheme.secondary, labelColor: theme.colorScheme.secondary, - tabs: [ + tabs: const [ Tab(text: '天'), Tab(text: '周'), Tab(text: '月'), ], ), ), - Expanded( + const Expanded( child: TabBarView( children: [ _Leaderboard("H24"), @@ -56,7 +62,7 @@ class RankingsScreen extends StatelessWidget { class _Leaderboard extends StatefulWidget { final String type; - _Leaderboard(this.type); + const _Leaderboard(this.type); @override State createState() => _LeaderboardState(); diff --git a/lib/screens/RegisterScreen.dart b/lib/screens/RegisterScreen.dart index 7bce3a5..69871c9 100644 --- a/lib/screens/RegisterScreen.dart +++ b/lib/screens/RegisterScreen.dart @@ -3,11 +3,14 @@ import 'package:flutter_datetime_picker/flutter_datetime_picker.dart'; import 'package:pikapika/basic/Common.dart'; import 'package:pikapika/basic/Method.dart'; import 'package:pikapika/screens/components/NetworkSetting.dart'; +import 'package:pikapika/screens/components/RightClickPop.dart'; import 'components/ContentLoading.dart'; /// 注册页面 class RegisterScreen extends StatefulWidget { + const RegisterScreen({Key? key}) : super(key: key); + @override State createState() => _RegisterScreenState(); } @@ -86,23 +89,25 @@ class _RegisterScreenState extends State { @override Widget build(BuildContext context) { + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { if (_registerOver) { return Scaffold( appBar: AppBar( title: const Text('注册成功'), ), body: Center( - child: Container( - child: Column( - children: [ - Expanded(child: Container()), - const Text('您已经注册成功, 请返回登录'), - Text('账号 : $_email'), - Text('昵称 : $_name'), - Expanded(child: Container()), - Expanded(child: Container()), - ], - ), + child: Column( + children: [ + Expanded(child: Container()), + const Text('您已经注册成功, 请返回登录'), + Text('账号 : $_email'), + Text('昵称 : $_name'), + Expanded(child: Container()), + Expanded(child: Container()), + ], ), ), ); @@ -110,18 +115,19 @@ class _RegisterScreenState extends State { if (_registering) { return Scaffold( appBar: AppBar(), - body: ContentLoading(label: '注册中'), + body: const ContentLoading(label: '注册中'), ); } return Scaffold( - appBar: AppBar(title: Text('注册'), actions: [ - IconButton(onPressed: () => _register(), icon: Icon(Icons.check),), + appBar: AppBar(title: const Text('注册'), actions: [ + IconButton( + onPressed: () => _register(), icon: const Icon(Icons.check),), ],), body: ListView( children: [ - Divider(), + const Divider(), ListTile( - title: Text("账号 (不一定是邮箱/登录使用)"), + title: const Text("账号 (不一定是邮箱/登录使用)"), subtitle: Text(_email == "" ? "未设置" : _email), onTap: () async { String? input = await displayTextInputDialog( @@ -138,7 +144,7 @@ class _RegisterScreenState extends State { }, ), ListTile( - title: Text("密码 (8位以上)"), + title: const Text("密码 (8位以上)"), subtitle: Text(_password == "" ? "未设置" : '\u2022' * 10), onTap: () async { String? input = await displayTextInputDialog( @@ -156,7 +162,7 @@ class _RegisterScreenState extends State { }, ), ListTile( - title: Text("昵称 (2-50字)"), + title: const Text("昵称 (2-50字)"), subtitle: Text(_name == "" ? "未设置" : _name), onTap: () async { String? input = await displayTextInputDialog( @@ -173,29 +179,29 @@ class _RegisterScreenState extends State { }, ), ListTile( - title: Text("性别"), + title: const Text("性别"), subtitle: Text(_genderText(_gender)), onTap: () async { String? result = await showDialog( context: context, builder: (BuildContext context) { return SimpleDialog( - title: Text('选择您的性别'), + title: const Text('选择您的性别'), children: [ SimpleDialogOption( - child: Text('扶她'), + child: const Text('扶她'), onPressed: () { Navigator.pop(context, 'bot'); }, ), SimpleDialogOption( - child: Text('公'), + child: const Text('公'), onPressed: () { Navigator.pop(context, 'm'); }, ), SimpleDialogOption( - child: Text('母'), + child: const Text('母'), onPressed: () { Navigator.pop(context, 'f'); }, @@ -212,7 +218,7 @@ class _RegisterScreenState extends State { }, ), ListTile( - title: Text("生日"), + title: const Text("生日"), subtitle: Text(_birthday), onTap: () async { DatePicker.showDatePicker( @@ -227,9 +233,9 @@ class _RegisterScreenState extends State { ); }, ), - Divider(), + const Divider(), ListTile( - title: Text("问题1"), + title: const Text("问题1"), subtitle: Text(_question1 == "" ? "未设置" : _question1), onTap: () async { String? input = await displayTextInputDialog( @@ -246,7 +252,7 @@ class _RegisterScreenState extends State { }, ), ListTile( - title: Text("回答1"), + title: const Text("回答1"), subtitle: Text(_answer1 == "" ? "未设置" : _answer1), onTap: () async { String? input = await displayTextInputDialog( @@ -263,7 +269,7 @@ class _RegisterScreenState extends State { }, ), ListTile( - title: Text("问题2"), + title: const Text("问题2"), subtitle: Text(_question2 == "" ? "未设置" : _question2), onTap: () async { String? input = await displayTextInputDialog( @@ -280,7 +286,7 @@ class _RegisterScreenState extends State { }, ), ListTile( - title: Text("回答2"), + title: const Text("回答2"), subtitle: Text(_answer2 == "" ? "未设置" : _answer2), onTap: () async { String? input = await displayTextInputDialog( @@ -297,7 +303,7 @@ class _RegisterScreenState extends State { }, ), ListTile( - title: Text("问题3"), + title: const Text("问题3"), subtitle: Text(_question3 == "" ? "未设置" : _question3), onTap: () async { String? input = await displayTextInputDialog( @@ -314,7 +320,7 @@ class _RegisterScreenState extends State { }, ), ListTile( - title: Text("回答3"), + title: const Text("回答3"), subtitle: Text(_answer3 == "" ? "未设置" : _answer3), onTap: () async { String? input = await displayTextInputDialog( @@ -330,9 +336,9 @@ class _RegisterScreenState extends State { } }, ), - Divider(), - NetworkSetting(), - Divider(), + const Divider(), + const NetworkSetting(), + const Divider(), ], ), ); diff --git a/lib/screens/SearchScreen.dart b/lib/screens/SearchScreen.dart index c020d78..706322a 100644 --- a/lib/screens/SearchScreen.dart +++ b/lib/screens/SearchScreen.dart @@ -5,6 +5,7 @@ import 'package:pikapika/basic/config/ShadowCategories.dart'; import 'package:pikapika/basic/store/Categories.dart'; import 'package:pikapika/basic/config/ListLayout.dart'; import 'package:pikapika/basic/Method.dart'; +import 'package:pikapika/screens/components/RightClickPop.dart'; import '../basic/Entities.dart'; import 'components/ComicPager.dart'; @@ -80,7 +81,7 @@ class _SearchScreenState extends State { )); } }, - icon: Icon(Icons.category), + icon: const Icon(Icons.category), ); Future _fetch(String _currentSort, int _currentPage) { @@ -97,7 +98,11 @@ class _SearchScreenState extends State { } @override - Widget build(BuildContext context) { + Widget build(BuildContext context){ + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) { return Scaffold( appBar: _searchBar.build(context), body: ComicPager( diff --git a/lib/screens/SettingsScreen.dart b/lib/screens/SettingsScreen.dart index a04be13..1943d5d 100644 --- a/lib/screens/SettingsScreen.dart +++ b/lib/screens/SettingsScreen.dart @@ -28,6 +28,7 @@ import 'package:pikapika/basic/config/Version.dart'; import 'package:pikapika/basic/config/VolumeController.dart'; import 'package:pikapika/basic/config/shadowCategoriesMode.dart'; import 'package:pikapika/screens/components/NetworkSetting.dart'; +import 'package:pikapika/screens/components/RightClickPop.dart'; import 'CleanScreen.dart'; import 'MigrateScreen.dart'; @@ -37,7 +38,11 @@ class SettingsScreen extends StatelessWidget { const SettingsScreen({Key? key}) : super(key: key); @override - Widget build(BuildContext context) => Scaffold( + Widget build(BuildContext context) { + return RightClickPop(buildScreen(context)); + } + + Widget buildScreen(BuildContext context) => Scaffold( appBar: AppBar(title: const Text('设置')), body: ListView( children: [ @@ -47,7 +52,7 @@ class SettingsScreen extends StatelessWidget { Navigator.push( context, MaterialPageRoute( - builder: (context) => ModifyPasswordScreen()), + builder: (context) => const ModifyPasswordScreen()), ); }, title: const Text('修改密码'), @@ -72,31 +77,31 @@ class SettingsScreen extends StatelessWidget { fullScreenUISetting(), contentFailedReloadActionSetting(), timeZoneSetting(), - Divider(), + const Divider(), autoCleanSecSetting(), ListTile( onTap: () { Navigator.push( context, - MaterialPageRoute(builder: (context) => CleanScreen()), + MaterialPageRoute(builder: (context) => const CleanScreen()), ); }, - title: Text('清除缓存'), + title: const Text('清除缓存'), ), - Divider(), + const Divider(), androidDisplayModeSetting(), androidSecureFlagSetting(), - Divider(), + const Divider(), chooserRootSetting(), downloadThreadCountSetting(), downloadAndExportPathSetting(), exportRenameSetting(), fontSetting(), - Divider(), + const Divider(), migrate(context), - Divider(), + const Divider(), autoUpdateCheckSetting(), - Divider(), + const Divider(), ], ), ); @@ -104,15 +109,15 @@ class SettingsScreen extends StatelessWidget { Widget migrate(BuildContext context) { if (Platform.isAndroid) { return ListTile( - title: Text("文件迁移"), - subtitle: Text("更换您的数据文件夹"), + title: const Text("文件迁移"), + subtitle: const Text("更换您的数据文件夹"), onTap: () async { var f = await confirmDialog(context, "文件迁移", "此功能菜单保存后, 需要重启程序, 您确认吗"); if (f) { Navigator.of(context).pushAndRemoveUntil( MaterialPageRoute(builder: (BuildContext context) { - return MigrateScreen(); + return const MigrateScreen(); }), (route) => false, ); @@ -122,4 +127,5 @@ class SettingsScreen extends StatelessWidget { } return Container(); } + } diff --git a/lib/screens/ViewLogsScreen.dart b/lib/screens/ViewLogsScreen.dart index fa9c1a8..910cf4e 100644 --- a/lib/screens/ViewLogsScreen.dart +++ b/lib/screens/ViewLogsScreen.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:pikapika/basic/Common.dart'; import 'package:pikapika/basic/Method.dart'; +import 'package:pikapika/screens/components/RightClickPop.dart'; import 'ComicInfoScreen.dart'; import 'components/Images.dart'; @@ -105,12 +106,12 @@ class _ViewLogsScreenState extends State { @override Widget build(BuildContext context) { - return NotificationListener( + final screen = NotificationListener( child: Scaffold( appBar: AppBar( - title: Text('浏览记录'), + title: const Text('浏览记录'), actions: [ - IconButton(onPressed: _clearAll, icon: Icon(Icons.auto_delete)), + IconButton(onPressed: _clearAll, icon: const Icon(Icons.auto_delete)), ], ), body: ListView( @@ -133,6 +134,7 @@ class _ViewLogsScreenState extends State { return true; }, ); + return RightClickPop(screen); } void _chooseComic(String comicId) { @@ -190,8 +192,8 @@ class ViewLogWrap extends StatelessWidget { e.title + '\n', maxLines: 2, overflow: TextOverflow.ellipsis, - style: TextStyle(height: 1.4), - strutStyle: StrutStyle(height: 1.4), + style: const TextStyle(height: 1.4), + strutStyle: const StrutStyle(height: 1.4), ), ], ), diff --git a/lib/screens/components/Avatar.dart b/lib/screens/components/Avatar.dart index c10f02a..598d2ff 100644 --- a/lib/screens/components/Avatar.dart +++ b/lib/screens/components/Avatar.dart @@ -16,7 +16,7 @@ class Avatar extends StatelessWidget { Widget build(BuildContext context) { var theme = Theme.of(context); return Container( - margin: EdgeInsets.all(_avatarMargin), + margin: const EdgeInsets.all(_avatarMargin), decoration: BoxDecoration( shape: BoxShape.circle, border: Border.all( diff --git a/lib/screens/components/ComicInfoCard.dart b/lib/screens/components/ComicInfoCard.dart index f7f4fcf..a318605 100644 --- a/lib/screens/components/ComicInfoCard.dart +++ b/lib/screens/components/ComicInfoCard.dart @@ -32,7 +32,7 @@ class _ComicInfoCard extends State { bool? like = info is ComicInfo ? info.isLiked : null; bool? favourite = info is ComicInfo ? (info).isFavourite : null; return Container( - padding: EdgeInsets.all(5), + padding: const EdgeInsets.all(5), decoration: BoxDecoration( border: Border( bottom: BorderSide( @@ -43,7 +43,7 @@ class _ComicInfoCard extends State { child: Row( children: [ Container( - padding: EdgeInsets.only(right: 10), + padding: const EdgeInsets.only(right: 10), child: RemoteImage( fileServer: info.thumb.fileServer, path: info.thumb.path, @@ -86,11 +86,11 @@ class _ComicInfoCard extends State { widget.linkItem ? TextSpan( children: [ - TextSpan(text: '分类 :'), + const TextSpan(text: '分类 :'), ...info.categories.map( (e) => TextSpan( children: [ - TextSpan(text: ' '), + const TextSpan(text: ' '), TextSpan( text: e, recognizer: TapGestureRecognizer() @@ -149,7 +149,7 @@ class _ComicInfoCard extends State { ...(info.epsCount > 0 ? [ Text.rich(TextSpan(children: [ - WidgetSpan(child: iconPage), + const WidgetSpan(child: iconPage), WidgetSpan(child: iconSpacing), WidgetSpan( child: Text( @@ -184,21 +184,21 @@ class _ComicInfoCard extends State { height: 26, child: _likeLoading ? IconButton( - color: Colors.pink[400], - onPressed: () {}, - icon: Icon( - Icons.sync, - ), - ) + color: Colors.pink[400], + onPressed: () {}, + icon: const Icon( + Icons.sync, + ), + ) : IconButton( - color: Colors.pink[400], - onPressed: _changeLike, - icon: Icon( - like - ? Icons.favorite - : Icons.favorite_border, - ), - ), + color: Colors.pink[400], + onPressed: _changeLike, + icon: Icon( + like + ? Icons.favorite + : Icons.favorite_border, + ), + ), ), ]), ...(favourite == null @@ -209,21 +209,21 @@ class _ComicInfoCard extends State { height: 26, child: _favouriteLoading ? IconButton( - color: Colors.pink[400], - onPressed: () {}, - icon: Icon( - Icons.sync, - ), - ) + color: Colors.pink[400], + onPressed: () {}, + icon: const Icon( + Icons.sync, + ), + ) : IconButton( - color: Colors.pink[400], - onPressed: _changeFavourite, - icon: Icon( - favourite - ? Icons.bookmark - : Icons.bookmark_border, - ), - ), + color: Colors.pink[400], + onPressed: _changeFavourite, + icon: Icon( + favourite + ? Icons.bookmark + : Icons.bookmark_border, + ), + ), ), ]), Container(height: 10), @@ -277,12 +277,12 @@ double imageHeight = 315 / 3.15; Widget buildFinished(bool comicFinished) { if (comicFinished) { return Container( - padding: EdgeInsets.only(left: 8, right: 8), + padding: const EdgeInsets.only(left: 8, right: 8), decoration: BoxDecoration( color: Colors.orange.shade800, borderRadius: BorderRadius.circular(30), ), - child: Text( + child: const Text( "完结", style: TextStyle( fontSize: 10, @@ -313,13 +313,13 @@ final iconLabelStyle = TextStyle( color: Colors.pink.shade400, height: 1.2, ); -final iconLabelStrutStyle = StrutStyle( +const iconLabelStrutStyle = StrutStyle( height: 1.2, ); -final iconPage = +const iconPage = Icon(Icons.ballot_outlined, size: _iconSize, color: Colors.grey); -final countLabelStyle = TextStyle( +const countLabelStyle = TextStyle( fontSize: 13, color: Colors.grey, height: 1.2, @@ -328,7 +328,7 @@ final countLabelStyle = TextStyle( final iconMargin = Container(width: 20); final iconSpacing = Container(width: 5); -final titleStyle = TextStyle(fontWeight: FontWeight.bold); +const titleStyle = TextStyle(fontWeight: FontWeight.bold); final authorStyle = TextStyle( fontSize: 13, color: Colors.pink.shade300, diff --git a/lib/screens/components/ComicList.dart b/lib/screens/components/ComicList.dart index a0ccdde..0a9da03 100644 --- a/lib/screens/components/ComicList.dart +++ b/lib/screens/components/ComicList.dart @@ -85,7 +85,7 @@ class _ComicListState extends State { return InkWell( onTap: () {}, child: Container( - padding: EdgeInsets.all(10), + padding: const EdgeInsets.all(10), decoration: BoxDecoration( border: Border( bottom: BorderSide( @@ -311,7 +311,7 @@ class _ComicListState extends State { fontSize: titleFontSize, height: 1.2, ), - strutStyle: StrutStyle(height: 1.2), + strutStyle: const StrutStyle(height: 1.2), maxLines: 1, overflow: TextOverflow.ellipsis, ), diff --git a/lib/screens/components/ComicPager.dart b/lib/screens/components/ComicPager.dart index 28b8f92..81688d1 100644 --- a/lib/screens/components/ComicPager.dart +++ b/lib/screens/components/ComicPager.dart @@ -14,14 +14,13 @@ import 'ContentLoading.dart'; class ComicPager extends StatefulWidget { final Future Function(String sort, int page) fetchPage; - const ComicPager({required this.fetchPage}); + const ComicPager({required this.fetchPage, Key? key}) : super(key: key); @override State createState() => _ComicPagerState(); } class _ComicPagerState extends State { - @override void initState() { shadowCategoriesEvent.subscribe(_onShadowChange); @@ -35,8 +34,7 @@ class _ComicPagerState extends State { } void _onShadowChange(EventArgs? args) { - setState(() { - }); + setState(() {}); } @override @@ -89,10 +87,10 @@ class _ControllerComicPagerState extends State { future: _pageFuture, builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.connectionState == ConnectionState.none) { - return Text('初始化'); + return const Text('初始化'); } if (snapshot.connectionState != ConnectionState.done) { - return ContentLoading(label: '加载中'); + return const ContentLoading(label: '加载中'); } if (snapshot.hasError) { return ContentError( @@ -115,7 +113,7 @@ class _ControllerComicPagerState extends State { PreferredSize _buildAppBar(ComicsPage comicsPage, BuildContext context) { return PreferredSize( - preferredSize: Size.fromHeight(40), + preferredSize: const Size.fromHeight(40), child: Container( decoration: BoxDecoration( border: Border( @@ -169,7 +167,7 @@ class _ControllerComicPagerState extends State { onPressed: () { Navigator.pop(context); }, - child: Text('取消'), + child: const Text('取消'), ), MaterialButton( onPressed: () { @@ -185,7 +183,7 @@ class _ControllerComicPagerState extends State { _currentPage = num; _load(); }, - child: Text('确定'), + child: const Text('确定'), ), ], ); @@ -208,7 +206,7 @@ class _ControllerComicPagerState extends State { _load(); } }, - child: Text('上一页'), + child: const Text('上一页'), ), MaterialButton( minWidth: 0, @@ -218,7 +216,7 @@ class _ControllerComicPagerState extends State { _load(); } }, - child: Text('下一页'), + child: const Text('下一页'), ) ], ), @@ -298,7 +296,7 @@ class _StreamComicPagerState extends State { } catch (e, s) { _error = true; print("$e\n$s"); - throw e; + rethrow; } finally { setState(() { _loading = false; @@ -334,7 +332,7 @@ class _StreamComicPagerState extends State { PreferredSize _buildAppBar(BuildContext context) { return PreferredSize( - preferredSize: Size.fromHeight(40), + preferredSize: const Size.fromHeight(40), child: Container( decoration: BoxDecoration( border: Border( diff --git a/lib/screens/components/ComicTagsCard.dart b/lib/screens/components/ComicTagsCard.dart index 027e206..788420a 100644 --- a/lib/screens/components/ComicTagsCard.dart +++ b/lib/screens/components/ComicTagsCard.dart @@ -12,7 +12,7 @@ class ComicTagsCard extends StatelessWidget { Widget build(BuildContext context) { var theme = Theme.of(context); return Container( - padding: EdgeInsets.only(top: 5, bottom: 5), + padding: const EdgeInsets.only(top: 5, bottom: 5), decoration: BoxDecoration( border: Border( bottom: BorderSide( @@ -27,13 +27,13 @@ class ComicTagsCard extends StatelessWidget { navPushOrReplace(context, (context) => ComicsScreen(tag: e)); }, child: Container( - padding: EdgeInsets.only( + padding: const EdgeInsets.only( left: 10, right: 10, top: 3, bottom: 3, ), - margin: EdgeInsets.only( + margin: const EdgeInsets.only( left: 5, right: 5, top: 3, diff --git a/lib/screens/components/CommentList.dart b/lib/screens/components/CommentList.dart index f740d6e..a009dba 100644 --- a/lib/screens/components/CommentList.dart +++ b/lib/screens/components/CommentList.dart @@ -129,7 +129,7 @@ class _CommentListState extends State { ), ), ), - padding: EdgeInsets.all(30), + padding: const EdgeInsets.all(30), child: Center( child: Text('我有话要讲'), ), @@ -147,7 +147,7 @@ class _CommentListState extends State { }); }, child: Container( - padding: EdgeInsets.all(30), + padding: const EdgeInsets.all(30), child: Center( child: Text('上一页'), ), @@ -167,7 +167,7 @@ class _CommentListState extends State { }); }, child: Container( - padding: EdgeInsets.all(30), + padding: const EdgeInsets.all(30), child: Center( child: Text('下一页'), ), diff --git a/lib/screens/components/ContinueReadButton.dart b/lib/screens/components/ContinueReadButton.dart index 748bfe6..2cb9935 100644 --- a/lib/screens/components/ContinueReadButton.dart +++ b/lib/screens/components/ContinueReadButton.dart @@ -43,8 +43,8 @@ class _ContinueReadButtonState extends State { text = '开始阅读'; } return Container( - padding: EdgeInsets.only(left: 10, right: 10), - margin: EdgeInsets.only(bottom: 10), + padding: const EdgeInsets.only(left: 10, right: 10), + margin: const EdgeInsets.only(bottom: 10), width: width, child: MaterialButton( onPressed: onPressed, @@ -57,7 +57,7 @@ class _ContinueReadButtonState extends State { .bodyText1! .color! .withOpacity(.05), - padding: EdgeInsets.all(10), + padding: const EdgeInsets.all(10), child: Text( text, textAlign: TextAlign.center, diff --git a/lib/screens/components/DesktopCropper.dart b/lib/screens/components/DesktopCropper.dart index bdc162e..a037df3 100644 --- a/lib/screens/components/DesktopCropper.dart +++ b/lib/screens/components/DesktopCropper.dart @@ -63,7 +63,7 @@ class _DesktopCropperState extends State { baseSizeImage = image.copyResize(baseSizeImage, height: 200, width: 200); } - var f = image.encodeJpg(baseSizeImage!); + var f = image.encodeJpg(baseSizeImage); Navigator.of(context).pop(f); } } diff --git a/lib/screens/components/DownloadInfoCard.dart b/lib/screens/components/DownloadInfoCard.dart index e4e68c4..86694c4 100644 --- a/lib/screens/components/DownloadInfoCard.dart +++ b/lib/screens/components/DownloadInfoCard.dart @@ -46,7 +46,7 @@ class DownloadInfoCard extends StatelessWidget { List categories = json.decode(task.categories); var categoriesString = categories.map((e) => "$e").join(" "); return Container( - padding: EdgeInsets.all(5), + padding: const EdgeInsets.all(5), decoration: BoxDecoration( border: Border( bottom: BorderSide( @@ -57,7 +57,7 @@ class DownloadInfoCard extends StatelessWidget { child: Row( children: [ Container( - padding: EdgeInsets.only(right: 10), + padding: const EdgeInsets.only(right: 10), child: task.thumbLocalPath == "" ? RemoteImage( fileServer: task.thumbFileServer, diff --git a/lib/screens/components/GameTitleCard.dart b/lib/screens/components/GameTitleCard.dart index c9465ef..2ae8c1e 100644 --- a/lib/screens/components/GameTitleCard.dart +++ b/lib/screens/components/GameTitleCard.dart @@ -63,7 +63,7 @@ class GameTitleCard extends StatelessWidget { ), Container( margin: EdgeInsets.only(right: iconMargin), - // padding: EdgeInsets.only( + // padding: const EdgeInsets.only( // left: platformMargin, // right: platformMargin, // ), diff --git a/lib/screens/components/ImageReader.dart b/lib/screens/components/ImageReader.dart index d4ea653..065d986 100644 --- a/lib/screens/components/ImageReader.dart +++ b/lib/screens/components/ImageReader.dart @@ -417,7 +417,7 @@ abstract class _ImageReaderContentState extends State<_ImageReaderContent> { bottomRight: Radius.circular(10), ), ), - padding: EdgeInsets.only(top: 10, bottom: 10, left: 6, right: 5), + padding: const EdgeInsets.only(top: 10, bottom: 10, left: 6, right: 5), child: Center( child: _buildSliderWidget(Axis.vertical), ), @@ -441,7 +441,7 @@ abstract class _ImageReaderContentState extends State<_ImageReaderContent> { bottomLeft: Radius.circular(10), ), ), - padding: EdgeInsets.only(top: 10, bottom: 10, left: 5, right: 6), + padding: const EdgeInsets.only(top: 10, bottom: 10, left: 5, right: 6), child: Center( child: _buildSliderWidget(Axis.vertical), ), @@ -481,7 +481,7 @@ abstract class _ImageReaderContentState extends State<_ImageReaderContent> { tooltip: FlutterSliderTooltip(custom: (value) { double a = value + 1; return Container( - padding: EdgeInsets.all(8), + padding: const EdgeInsets.all(8), decoration: ShapeDecoration( color: Colors.black.withAlpha(0xCC), shape: RoundedRectangleBorder( @@ -526,8 +526,8 @@ abstract class _ImageReaderContentState extends State<_ImageReaderContent> { child: Material( color: Colors.transparent, child: Container( - padding: EdgeInsets.only(left: 10, right: 10, top: 4, bottom: 4), - margin: EdgeInsets.only(bottom: 10), + padding: const EdgeInsets.only(left: 10, right: 10, top: 4, bottom: 4), + margin: const EdgeInsets.only(bottom: 10), decoration: BoxDecoration( borderRadius: BorderRadius.only( topRight: Radius.circular(10), @@ -1082,7 +1082,7 @@ class _WebToonReaderState extends _ImageReaderContentState { }, textColor: Colors.white, child: Container( - padding: EdgeInsets.only(top: 40, bottom: 40), + padding: const EdgeInsets.only(top: 40, bottom: 40), child: Text(super._hasNextEp() ? '下一章' : '结束阅读'), ), ), @@ -1379,7 +1379,7 @@ class _ListViewReaderState extends _ImageReaderContentState return Container(); } return Container( - padding: EdgeInsets.all(20), + padding: const EdgeInsets.all(20), child: MaterialButton( onPressed: () { if (super._hasNextEp()) { @@ -1390,7 +1390,7 @@ class _ListViewReaderState extends _ImageReaderContentState }, textColor: Colors.white, child: Container( - padding: EdgeInsets.only(top: 40, bottom: 40), + padding: const EdgeInsets.only(top: 40, bottom: 40), child: Text(super._hasNextEp() ? '下一章' : '结束阅读'), ), ), @@ -1571,8 +1571,8 @@ class _GalleryReaderState extends _ImageReaderContentState { child: Material( color: Colors.transparent, child: Container( - margin: EdgeInsets.only(bottom: 10), - padding: EdgeInsets.only(left: 10, right: 10, top: 4, bottom: 4), + margin: const EdgeInsets.only(bottom: 10), + padding: const EdgeInsets.only(left: 10, right: 10, top: 4, bottom: 4), decoration: BoxDecoration( borderRadius: BorderRadius.only( topLeft: Radius.circular(10), diff --git a/lib/screens/components/Images.dart b/lib/screens/components/Images.dart index a344850..4971753 100644 --- a/lib/screens/components/Images.dart +++ b/lib/screens/components/Images.dart @@ -293,7 +293,7 @@ Widget buildMock(double? width, double? height) { var widget = Container( width: width, height: height, - padding: EdgeInsets.all(10), + padding: const EdgeInsets.all(10), child: Center( child: SvgPicture.asset( 'lib/assets/unknown.svg', diff --git a/lib/screens/components/RightClickPop.dart b/lib/screens/components/RightClickPop.dart new file mode 100644 index 0000000..7b65468 --- /dev/null +++ b/lib/screens/components/RightClickPop.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class RightClickPop extends StatelessWidget { + final Widget child; + + const RightClickPop(this.child, {Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onSecondaryTap: () => Navigator.of(context).pop(), + child: child, + ); + } +}