diff --git a/lib/common/constants.dart b/lib/common/constants.dart index b018cfb03..01cdbcb7e 100644 --- a/lib/common/constants.dart +++ b/lib/common/constants.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -class StyleString { +abstract final class StyleString { static const double cardSpace = 8; static const double safeSpace = 12; static const BorderRadius mdRadius = BorderRadius.all(imgRadius); @@ -9,9 +9,13 @@ class StyleString { static const bottomSheetRadius = BorderRadius.vertical( top: Radius.circular(18), ); + static const dialogFixedConstraints = BoxConstraints( + minWidth: 420, + maxWidth: 420, + ); } -class Constants { +abstract final class Constants { static const appName = 'PiliPlus'; static const sourceCodeUrl = 'https://github.com/bggRGjQaUbCoE/PiliPlus'; diff --git a/lib/common/widgets/dialog/report.dart b/lib/common/widgets/dialog/report.dart index 1da1dd78c..1c7f4f698 100644 --- a/lib/common/widgets/dialog/report.dart +++ b/lib/common/widgets/dialog/report.dart @@ -20,7 +20,6 @@ Future autoWrapReportDialog( context: context, builder: (context) { return AlertDialog( - constraints: const BoxConstraints(minWidth: 280, maxWidth: 420), title: const Text('举报'), titlePadding: const .only(left: 22, top: 16, right: 22), contentPadding: const .symmetric(vertical: 5), diff --git a/lib/common/widgets/video_popup_menu.dart b/lib/common/widgets/video_popup_menu.dart index 4667a4ce1..5634597a7 100644 --- a/lib/common/widgets/video_popup_menu.dart +++ b/lib/common/widgets/video_popup_menu.dart @@ -116,21 +116,13 @@ class VideoPopupMenu extends StatelessWidget { context: context, builder: (context) { return Dialog( - child: ConstrainedBox( - constraints: const BoxConstraints( - minWidth: 280, - maxWidth: 420, - ), - child: Padding( - padding: const EdgeInsets.symmetric( - vertical: 14, - ), - child: AiConclusionPanel.buildContent( - context, - Theme.of(context), - res, - tap: false, - ), + child: Padding( + padding: const .symmetric(vertical: 14), + child: AiConclusionPanel.buildContent( + context, + Theme.of(context), + res, + tap: false, ), ), ); @@ -201,8 +193,7 @@ class VideoPopupMenu extends StatelessWidget { return AlertDialog( content: SingleChildScrollView( child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, + crossAxisAlignment: .start, children: [ if (tp.dislikeReasons != null) ...[ const Text('我不想看'), diff --git a/lib/grpc/audio.dart b/lib/grpc/audio.dart index 1d36efaf6..09d8eb6cf 100644 --- a/lib/grpc/audio.dart +++ b/lib/grpc/audio.dart @@ -6,7 +6,7 @@ import 'package:PiliPlus/grpc/url.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:fixnum/fixnum.dart'; -class AudioGrpc { +abstract final class AudioGrpc { static Future> audioPlayUrl({ required Int64 oid, required List subId, diff --git a/lib/grpc/dm.dart b/lib/grpc/dm.dart index 535a13c66..8cc73eaf8 100644 --- a/lib/grpc/dm.dart +++ b/lib/grpc/dm.dart @@ -4,7 +4,7 @@ import 'package:PiliPlus/grpc/url.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:fixnum/fixnum.dart'; -class DmGrpc { +abstract final class DmGrpc { static Future> dmSegMobile({ required int cid, required int segmentIndex, diff --git a/lib/grpc/dyn.dart b/lib/grpc/dyn.dart index 573d5764d..cc525a991 100644 --- a/lib/grpc/dyn.dart +++ b/lib/grpc/dyn.dart @@ -7,7 +7,7 @@ import 'package:PiliPlus/grpc/url.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:fixnum/fixnum.dart'; -class DynGrpc { +abstract final class DynGrpc { // static Future dynSpace({ // required int uid, // required int page, diff --git a/lib/grpc/grpc_req.dart b/lib/grpc/grpc_req.dart index bb5fb6d7b..8cb331cf6 100644 --- a/lib/grpc/grpc_req.dart +++ b/lib/grpc/grpc_req.dart @@ -20,7 +20,7 @@ import 'package:dio/dio.dart'; import 'package:flutter/foundation.dart' show kDebugMode; import 'package:protobuf/protobuf.dart' show GeneratedMessage; -class GrpcReq { +abstract final class GrpcReq { static String? _accessKey = Accounts.main.accessKey; static const _build = 2001100; static const _versionName = '2.0.1'; diff --git a/lib/grpc/im.dart b/lib/grpc/im.dart index b5e1454cd..9a0a47418 100644 --- a/lib/grpc/im.dart +++ b/lib/grpc/im.dart @@ -8,7 +8,7 @@ import 'package:fixnum/fixnum.dart'; import 'package:protobuf/protobuf.dart' show PbMap; import 'package:uuid/uuid.dart'; -class ImGrpc { +abstract final class ImGrpc { static Future> sendMsg({ required int senderUid, required int receiverId, diff --git a/lib/grpc/reply.dart b/lib/grpc/reply.dart index f265a5559..c2634a580 100644 --- a/lib/grpc/reply.dart +++ b/lib/grpc/reply.dart @@ -7,7 +7,7 @@ import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:fixnum/fixnum.dart'; -class ReplyGrpc { +abstract final class ReplyGrpc { static bool antiGoodsReply = Pref.antiGoodsReply; static RegExp replyRegExp = RegExp( Pref.banWordForReply, diff --git a/lib/grpc/space.dart b/lib/grpc/space.dart index ec27ff366..e81ae17af 100644 --- a/lib/grpc/space.dart +++ b/lib/grpc/space.dart @@ -5,7 +5,7 @@ import 'package:PiliPlus/grpc/url.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:fixnum/fixnum.dart'; -class SpaceGrpc { +abstract final class SpaceGrpc { static Future> opusSpaceFlow({ required int hostMid, String? next, diff --git a/lib/grpc/url.dart b/lib/grpc/url.dart index 485b54399..0bbdc6b3b 100644 --- a/lib/grpc/url.dart +++ b/lib/grpc/url.dart @@ -1,4 +1,4 @@ -class GrpcUrl { +abstract final class GrpcUrl { // static const playerOnline = // '/bilibili.app.playeronline.v1.PlayerOnline/PlayerOnline'; // static const popular = '/bilibili.app.show.v1.Popular/Index'; diff --git a/lib/grpc/view.dart b/lib/grpc/view.dart index 99f7a5fd8..e8de15f06 100644 --- a/lib/grpc/view.dart +++ b/lib/grpc/view.dart @@ -4,7 +4,7 @@ import 'package:PiliPlus/grpc/grpc_req.dart'; import 'package:PiliPlus/grpc/url.dart'; import 'package:PiliPlus/http/loading_state.dart'; -class ViewGrpc { +abstract final class ViewGrpc { static Future> view({ required String bvid, }) { diff --git a/lib/http/api.dart b/lib/http/api.dart index 14311292a..9c76382a2 100644 --- a/lib/http/api.dart +++ b/lib/http/api.dart @@ -1,6 +1,6 @@ import 'package:PiliPlus/http/constants.dart'; -class Api { +abstract final class Api { // 推荐视频 static const String recommendListApp = '${HttpString.appBaseUrl}/x/v2/feed/index'; diff --git a/lib/http/black.dart b/lib/http/black.dart index 766b0b8de..b1001765a 100644 --- a/lib/http/black.dart +++ b/lib/http/black.dart @@ -4,7 +4,7 @@ import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/blacklist/data.dart'; import 'package:PiliPlus/utils/accounts.dart'; -class BlackHttp { +abstract final class BlackHttp { static Future> blackList({ required int pn, int ps = 50, diff --git a/lib/http/constants.dart b/lib/http/constants.dart index 0f1f06975..cbd3dbbbd 100644 --- a/lib/http/constants.dart +++ b/lib/http/constants.dart @@ -1,4 +1,4 @@ -class HttpString { +abstract final class HttpString { static const String baseUrl = 'https://www.bilibili.com'; static const String apiBaseUrl = 'https://api.bilibili.com'; static const String tUrl = 'https://api.vc.bilibili.com'; diff --git a/lib/http/dynamics.dart b/lib/http/dynamics.dart index 58e7472dd..6e7ee3ab5 100644 --- a/lib/http/dynamics.dart +++ b/lib/http/dynamics.dart @@ -25,7 +25,7 @@ import 'package:PiliPlus/utils/utils.dart'; import 'package:PiliPlus/utils/wbi_sign.dart'; import 'package:dio/dio.dart'; -class DynamicsHttp { +abstract final class DynamicsHttp { @pragma('vm:notify-debugger-on-exception') static Future> followDynamic({ DynamicsTabType type = DynamicsTabType.all, diff --git a/lib/http/login.dart b/lib/http/login.dart index cc7070425..542af8d57 100644 --- a/lib/http/login.dart +++ b/lib/http/login.dart @@ -15,7 +15,7 @@ import 'package:crypto/crypto.dart'; import 'package:dio/dio.dart'; import 'package:encrypt/encrypt.dart'; -class LoginHttp { +abstract final class LoginHttp { static final String deviceId = LoginUtils.genDeviceId(); static String get buvid => LoginUtils.buvid; static final Map headers = { diff --git a/lib/http/music.dart b/lib/http/music.dart index 9e0fc15eb..74d37d94c 100644 --- a/lib/http/music.dart +++ b/lib/http/music.dart @@ -7,7 +7,7 @@ import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/wbi_sign.dart'; import 'package:dio/dio.dart'; -class MusicHttp { +abstract final class MusicHttp { static Future> bgmDetail(String musicId) async { final res = await Request().get( Api.bgmDetail, diff --git a/lib/http/search.dart b/lib/http/search.dart index 702a43dfd..66cbe6f83 100644 --- a/lib/http/search.dart +++ b/lib/http/search.dart @@ -17,7 +17,7 @@ import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; -class SearchHttp { +abstract final class SearchHttp { // 获取搜索建议 static Future> searchSuggest({ required String term, diff --git a/lib/http/user.dart b/lib/http/user.dart index 3d23e06fc..2acf7cd06 100644 --- a/lib/http/user.dart +++ b/lib/http/user.dart @@ -20,7 +20,7 @@ import 'package:PiliPlus/utils/global_data.dart'; import 'package:PiliPlus/utils/wbi_sign.dart'; import 'package:dio/dio.dart'; -class UserHttp { +abstract final class UserHttp { static Future userStat({required int mid}) async { var res = await Request().get(Api.userStat, queryParameters: {'vmid': mid}); if (res.data['code'] == 0) { diff --git a/lib/http/validate.dart b/lib/http/validate.dart index 69530ca0f..bbc5f30c9 100644 --- a/lib/http/validate.dart +++ b/lib/http/validate.dart @@ -3,7 +3,7 @@ import 'package:PiliPlus/http/init.dart'; import 'package:PiliPlus/utils/accounts.dart'; import 'package:dio/dio.dart'; -class ValidateHttp { +abstract final class ValidateHttp { static Future gaiaVgateRegister(String vVoucher) async { final res = await Request().post( Api.gaiaVgateRegister, diff --git a/lib/pages/about/view.dart b/lib/pages/about/view.dart index a5b4b014a..f24e26a29 100644 --- a/lib/pages/about/view.dart +++ b/lib/pages/about/view.dart @@ -91,8 +91,11 @@ class _AboutPageState extends State { context: context, builder: (context) { return AlertDialog( + constraints: StyleString.dialogFixedConstraints, content: TextField( autofocus: true, + minLines: 1, + maxLines: 4, onSubmitted: (value) { Get.back(); if (value.isNotEmpty) { @@ -451,10 +454,7 @@ Future showImportExportDialog( builder: (context) { return AlertDialog( title: Text('输入$title'), - constraints: const BoxConstraints( - minWidth: 420, - maxWidth: 420, - ), + constraints: StyleString.dialogFixedConstraints, content: TextFormField( key: key, minLines: 4, diff --git a/lib/pages/dynamics/widgets/vote.dart b/lib/pages/dynamics/widgets/vote.dart index a174a91ef..d5bc61897 100644 --- a/lib/pages/dynamics/widgets/vote.dart +++ b/lib/pages/dynamics/widgets/vote.dart @@ -205,10 +205,6 @@ class _VotePanelState extends State { clipBehavior: .hardEdge, title: const Text('关注的人的投票'), contentPadding: const .only(top: 10, bottom: 12), - constraints: const BoxConstraints( - minWidth: 280, - maxWidth: 420, - ), content: SingleChildScrollView( child: Column( mainAxisSize: .min, diff --git a/lib/pages/fav_create/view.dart b/lib/pages/fav_create/view.dart index 494c86ff9..bdb3752ec 100644 --- a/lib/pages/fav_create/view.dart +++ b/lib/pages/fav_create/view.dart @@ -191,9 +191,7 @@ class _CreateFavPageState extends State { builder: (_) { return AlertDialog( clipBehavior: Clip.hardEdge, - contentPadding: const EdgeInsets.symmetric( - vertical: 12, - ), + contentPadding: const .symmetric(vertical: 12), content: Column( mainAxisSize: MainAxisSize.min, children: [ diff --git a/lib/pages/setting/models/extra_settings.dart b/lib/pages/setting/models/extra_settings.dart index d5cc8b865..979d8bc31 100644 --- a/lib/pages/setting/models/extra_settings.dart +++ b/lib/pages/setting/models/extra_settings.dart @@ -426,7 +426,7 @@ List get extraSettings => [ setKey: SettingBoxKey.continuePlayingPart, defaultVal: true, ), - getBanwordModel( + getBanWordModel( title: '评论关键词过滤', key: SettingBoxKey.banWordForReply, onChanged: (value) { @@ -434,7 +434,7 @@ List get extraSettings => [ ReplyGrpc.enableFilter = value.pattern.isNotEmpty; }, ), - getBanwordModel( + getBanWordModel( title: '动态关键词过滤', key: SettingBoxKey.banWordForDyn, onChanged: (value) { diff --git a/lib/pages/setting/models/model.dart b/lib/pages/setting/models/model.dart index 6ab147e62..06ec1d5f3 100644 --- a/lib/pages/setting/models/model.dart +++ b/lib/pages/setting/models/model.dart @@ -1,3 +1,4 @@ +import 'package:PiliPlus/common/constants.dart'; import 'package:PiliPlus/pages/setting/widgets/normal_item.dart'; import 'package:PiliPlus/pages/setting/widgets/select_dialog.dart'; import 'package:PiliPlus/pages/setting/widgets/switch_item.dart'; @@ -108,7 +109,7 @@ class SwitchModel extends SettingsModel { ); } -SettingsModel getBanwordModel({ +SettingsModel getBanWordModel({ required String title, required String key, required ValueChanged onChanged, @@ -119,10 +120,12 @@ SettingsModel getBanwordModel({ title: title, getSubtitle: () => banWord.isEmpty ? "点击添加" : banWord, onTap: (context, setState) { + String editValue = banWord; showDialog( context: context, builder: (context) { return AlertDialog( + constraints: StyleString.dialogFixedConstraints, title: Text(title), content: Column( mainAxisSize: MainAxisSize.min, @@ -131,11 +134,11 @@ SettingsModel getBanwordModel({ const Text('使用|隔开,如:尝试|测试'), TextFormField( autofocus: true, - initialValue: banWord, + initialValue: editValue, textInputAction: TextInputAction.newline, minLines: 1, maxLines: 4, - onChanged: (value) => banWord = value, + onChanged: (value) => editValue = value, ), ], ), @@ -153,6 +156,7 @@ SettingsModel getBanwordModel({ child: const Text('保存'), onPressed: () { Get.back(); + banWord = editValue; setState(); onChanged(RegExp(banWord, caseSensitive: false)); SmartDialog.showToast('已保存'); diff --git a/lib/pages/setting/models/recommend_settings.dart b/lib/pages/setting/models/recommend_settings.dart index 4a86e6510..d60dd7089 100644 --- a/lib/pages/setting/models/recommend_settings.dart +++ b/lib/pages/setting/models/recommend_settings.dart @@ -55,7 +55,7 @@ List get recommendSettings => [ values: [0, 1, 2, 3, 4], onChanged: (value) => RecommendFilter.minLikeRatioForRecommend = value, ), - getBanwordModel( + getBanWordModel( title: '标题关键词过滤', key: SettingBoxKey.banWordForRecommend, onChanged: (value) { @@ -63,7 +63,7 @@ List get recommendSettings => [ RecommendFilter.enableFilter = value.pattern.isNotEmpty; }, ), - getBanwordModel( + getBanWordModel( title: 'App推荐/热门/排行榜: 视频分区关键词过滤', key: SettingBoxKey.banWordForZone, onChanged: (value) { diff --git a/lib/pages/video/controller.dart b/lib/pages/video/controller.dart index 49bca99a1..1f34d1553 100644 --- a/lib/pages/video/controller.dart +++ b/lib/pages/video/controller.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:math' show min; import 'dart:ui'; +import 'package:PiliPlus/common/constants.dart'; import 'package:PiliPlus/common/widgets/pair.dart'; import 'package:PiliPlus/common/widgets/progress_bar/segment_progress_bar.dart'; import 'package:PiliPlus/grpc/bilibili/app/listener/v1.pbenum.dart' @@ -1942,7 +1943,7 @@ class VideoDetailController extends GetxController showDialog( context: Get.context!, builder: (context) => AlertDialog( - constraints: const BoxConstraints(maxWidth: 425, minWidth: 425), + constraints: StyleString.dialogFixedConstraints, title: const Text('播放地址'), content: Column( spacing: 20, diff --git a/lib/pages/video/reply/widgets/reply_item_grpc.dart b/lib/pages/video/reply/widgets/reply_item_grpc.dart index c49d414d2..b1798adf4 100644 --- a/lib/pages/video/reply/widgets/reply_item_grpc.dart +++ b/lib/pages/video/reply/widgets/reply_item_grpc.dart @@ -984,15 +984,8 @@ class ReplyItemGrpc extends StatelessWidget { context: context, builder: (context) { return Dialog( - constraints: const BoxConstraints( - minWidth: 280, - maxWidth: 425, - ), child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 20, - vertical: 16, - ), + padding: const .symmetric(horizontal: 20, vertical: 16), child: SelectableText( message, style: const TextStyle(fontSize: 15, height: 1.7), diff --git a/lib/pages/video/widgets/header_control.dart b/lib/pages/video/widgets/header_control.dart index 240a7ab41..ff1778888 100644 --- a/lib/pages/video/widgets/header_control.dart +++ b/lib/pages/video/widgets/header_control.dart @@ -1440,10 +1440,6 @@ class HeaderControlState extends State return AlertDialog( title: const Text('播放信息'), contentPadding: const EdgeInsets.only(top: 16), - constraints: const BoxConstraints( - minWidth: 280, - maxWidth: 425, - ), content: Material( type: MaterialType.transparency, child: ListTileTheme( diff --git a/lib/utils/accounts.dart b/lib/utils/accounts.dart index 6179e948b..03ee9c583 100644 --- a/lib/utils/accounts.dart +++ b/lib/utils/accounts.dart @@ -5,7 +5,7 @@ import 'package:PiliPlus/utils/accounts/account.dart'; import 'package:PiliPlus/utils/login_utils.dart'; import 'package:hive/hive.dart'; -abstract class Accounts { +abstract final class Accounts { static late final Box account; static final List accountMode = List.filled( AccountType.values.length, diff --git a/lib/utils/app_sign.dart b/lib/utils/app_sign.dart index 518c671b0..8e8106324 100644 --- a/lib/utils/app_sign.dart +++ b/lib/utils/app_sign.dart @@ -3,7 +3,7 @@ import 'dart:convert'; import 'package:PiliPlus/common/constants.dart'; import 'package:crypto/crypto.dart'; -abstract class AppSign { +abstract final class AppSign { static void appSign( Map params, { String appkey = Constants.appKey, diff --git a/lib/utils/cache_manager.dart b/lib/utils/cache_manager.dart index d4555eaf1..a8e327b1b 100644 --- a/lib/utils/cache_manager.dart +++ b/lib/utils/cache_manager.dart @@ -6,7 +6,7 @@ import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:path_provider/path_provider.dart'; -abstract class CacheManager { +abstract final class CacheManager { // 获取缓存目录 @pragma('vm:notify-debugger-on-exception') static Future loadApplicationCache([ diff --git a/lib/utils/date_utils.dart b/lib/utils/date_utils.dart index c9833ff82..66c24e0d9 100644 --- a/lib/utils/date_utils.dart +++ b/lib/utils/date_utils.dart @@ -1,6 +1,6 @@ import 'package:intl/intl.dart' show DateFormat; -abstract class DateFormatUtils { +abstract final class DateFormatUtils { static final shortFormat = DateFormat('MM-dd'); static final longFormat = DateFormat('yyyy-MM-dd'); static final _shortFormatD = DateFormat('MM-dd HH:mm'); diff --git a/lib/utils/em.dart b/lib/utils/em.dart index 5febcc82f..40a96dac1 100644 --- a/lib/utils/em.dart +++ b/lib/utils/em.dart @@ -1,4 +1,4 @@ -abstract class Em { +abstract final class Em { static final _exp = RegExp('<[^>]*>([^<]*)]*>'); static final _htmlRegExp = RegExp(r'&(lt|gt|quot|apos|nbsp|amp);'); diff --git a/lib/utils/fav_utils.dart b/lib/utils/fav_utils.dart index 238c778d5..c01318181 100644 --- a/lib/utils/fav_utils.dart +++ b/lib/utils/fav_utils.dart @@ -1,4 +1,4 @@ -abstract class FavUtils { +abstract final class FavUtils { static bool isDefaultFav(int? attr) { if (attr == null) { return false; diff --git a/lib/utils/grid.dart b/lib/utils/grid.dart index 2764866f7..b41caa482 100644 --- a/lib/utils/grid.dart +++ b/lib/utils/grid.dart @@ -16,7 +16,7 @@ mixin GridMixin on State { ); } -abstract class Grid { +abstract final class Grid { static final double smallCardWidth = Pref.smallCardWidth; static SliverGridDelegateWithExtentAndRatio videoCardHDelegate( diff --git a/lib/utils/id_utils.dart b/lib/utils/id_utils.dart index 6ed01486b..5166593ed 100644 --- a/lib/utils/id_utils.dart +++ b/lib/utils/id_utils.dart @@ -5,7 +5,7 @@ import 'dart:convert'; import 'package:PiliPlus/utils/utils.dart'; import 'package:uuid/v4.dart'; -abstract class IdUtils { +abstract final class IdUtils { static const XOR_CODE = 23442827791579; static const MASK_CODE = 2251799813685247; static const MAX_AID = 1 << 51; diff --git a/lib/utils/image_utils.dart b/lib/utils/image_utils.dart index 05ffff1ad..398c26323 100644 --- a/lib/utils/image_utils.dart +++ b/lib/utils/image_utils.dart @@ -21,7 +21,7 @@ import 'package:live_photo_maker/live_photo_maker.dart'; import 'package:saver_gallery/saver_gallery.dart'; import 'package:share_plus/share_plus.dart'; -abstract class ImageUtils { +abstract final class ImageUtils { static String get time => DateFormat('yyyy-MM-dd_HH-mm-ss').format(DateTime.now()); static bool silentDownImg = Pref.silentDownImg; diff --git a/lib/utils/page_utils.dart b/lib/utils/page_utils.dart index 20cd4ec0a..2d5eca8f0 100644 --- a/lib/utils/page_utils.dart +++ b/lib/utils/page_utils.dart @@ -35,7 +35,7 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart' hide ContextExtensionss; import 'package:url_launcher/url_launcher.dart'; -abstract class PageUtils { +abstract final class PageUtils { static final RouteObserver routeObserver = RouteObserver(); diff --git a/lib/utils/recommend_filter.dart b/lib/utils/recommend_filter.dart index 756c3d0ab..4239342bf 100644 --- a/lib/utils/recommend_filter.dart +++ b/lib/utils/recommend_filter.dart @@ -1,7 +1,7 @@ import 'package:PiliPlus/models/model_video.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; -class RecommendFilter { +abstract final class RecommendFilter { static int minDurationForRcmd = Pref.minDurationForRcmd; static int minPlayForRcmd = Pref.minPlayForRcmd; static int minLikeRatioForRecommend = Pref.minLikeRatioForRecommend; diff --git a/lib/utils/reply_utils.dart b/lib/utils/reply_utils.dart index 4d19cb32c..475b06512 100644 --- a/lib/utils/reply_utils.dart +++ b/lib/utils/reply_utils.dart @@ -17,7 +17,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; -class ReplyUtils { +abstract final class ReplyUtils { static void onCheckReply({ required ReplyInfo replyInfo, required bool biliSendCommAntifraud, diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index 8986adb85..dc0b77cc3 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -13,7 +13,7 @@ import 'package:PiliPlus/utils/utils.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:path/path.dart' as path; -abstract class GStorage { +abstract final class GStorage { static late final Box userInfo; static late final Box historyWord; static late final Box localCache; diff --git a/lib/utils/storage_key.dart b/lib/utils/storage_key.dart index 030e34745..41f83d211 100644 --- a/lib/utils/storage_key.dart +++ b/lib/utils/storage_key.dart @@ -1,6 +1,6 @@ // ignore_for_file: constant_identifier_names -abstract class SettingBoxKey { +abstract final class SettingBoxKey { static const String btmProgressBehavior = 'btmProgressBehavior', defaultVideoQa = 'defaultVideoQa', defaultVideoQaCellular = 'defaultVideoQaCellular', @@ -224,7 +224,7 @@ abstract class SettingBoxKey { liveCdnUrl = 'liveCdnUrl'; } -abstract class LocalCacheKey { +abstract final class LocalCacheKey { static const String historyPause = 'historyPause', blackMids = 'blackMids', danmakuFilterRules = 'danmakuFilterRules', @@ -233,7 +233,7 @@ abstract class LocalCacheKey { buvid = 'buvid'; } -abstract class VideoBoxKey { +abstract final class VideoBoxKey { static const String playRepeat = 'playRepeat', playSpeedDefault = 'playSpeedDefault', longPressSpeedDefault = 'longPressSpeedDefault', diff --git a/lib/utils/storage_pref.dart b/lib/utils/storage_pref.dart index e2ebb0957..2f2b48831 100644 --- a/lib/utils/storage_pref.dart +++ b/lib/utils/storage_pref.dart @@ -37,7 +37,7 @@ import 'package:get/get.dart' hide ContextExtensionss; import 'package:hive/hive.dart'; import 'package:uuid/uuid.dart'; -abstract class Pref { +abstract final class Pref { static final Box _setting = GStorage.setting; static final Box _video = GStorage.video; static final Box _localCache = GStorage.localCache; diff --git a/lib/utils/theme_utils.dart b/lib/utils/theme_utils.dart index 2614611a7..103be2951 100644 --- a/lib/utils/theme_utils.dart +++ b/lib/utils/theme_utils.dart @@ -5,7 +5,7 @@ import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -abstract class ThemeUtils { +abstract final class ThemeUtils { static ThemeData getThemeData({ required ColorScheme colorScheme, required bool isDynamic, @@ -91,6 +91,7 @@ abstract class ThemeUtils { fontWeight: fontWeight, ), backgroundColor: colorScheme.surface, + constraints: const BoxConstraints(minWidth: 280, maxWidth: 420), ), bottomSheetTheme: BottomSheetThemeData( backgroundColor: colorScheme.surface, diff --git a/lib/utils/update.dart b/lib/utils/update.dart index 308b9e96a..63b345d84 100644 --- a/lib/utils/update.dart +++ b/lib/utils/update.dart @@ -15,7 +15,7 @@ import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; -abstract class Update { +abstract final class Update { // 检查更新 static Future checkUpdate([bool isAuto = true]) async { if (kDebugMode) return; diff --git a/lib/utils/url_utils.dart b/lib/utils/url_utils.dart index a6155bf99..67f9fce9a 100644 --- a/lib/utils/url_utils.dart +++ b/lib/utils/url_utils.dart @@ -8,7 +8,7 @@ import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; -abstract class UrlUtils { +abstract final class UrlUtils { // 302重定向路由截取 static Future parseRedirectUrl( String url, [ diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index fa613bcfa..d4c050a11 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -14,7 +14,7 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:share_plus/share_plus.dart'; -abstract class Utils { +abstract final class Utils { static final random = Random(); static const channel = MethodChannel(Constants.appName); diff --git a/lib/utils/wbi_sign.dart b/lib/utils/wbi_sign.dart index 8ab53b7ec..bd6e76d09 100644 --- a/lib/utils/wbi_sign.dart +++ b/lib/utils/wbi_sign.dart @@ -13,7 +13,7 @@ import 'package:crypto/crypto.dart'; import 'package:hive/hive.dart'; import 'package:synchronized/synchronized.dart'; -abstract class WbiSign { +abstract final class WbiSign { static Box localCache = GStorage.localCache; static final Lock lock = Lock(); static final RegExp chrFilter = RegExp(r"[!\'\(\)\*]");