mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
mod: lint
mod: tweaks opt: publish page Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -29,28 +29,28 @@ class Constants {
|
||||
static const urlPattern =
|
||||
r'https?://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]';
|
||||
|
||||
static get goodsUrlPrefix => "https://gaoneng.bilibili.com/tetris";
|
||||
static const goodsUrlPrefix = "https://gaoneng.bilibili.com/tetris";
|
||||
|
||||
// 超分辨率滤镜
|
||||
static List<String> get mpvAnime4KShaders => [
|
||||
'Anime4K_Clamp_Highlights.glsl',
|
||||
'Anime4K_Restore_CNN_VL.glsl',
|
||||
'Anime4K_Upscale_CNN_x2_VL.glsl',
|
||||
'Anime4K_AutoDownscalePre_x2.glsl',
|
||||
'Anime4K_AutoDownscalePre_x4.glsl',
|
||||
'Anime4K_Upscale_CNN_x2_M.glsl'
|
||||
];
|
||||
static const List<String> mpvAnime4KShaders = [
|
||||
'Anime4K_Clamp_Highlights.glsl',
|
||||
'Anime4K_Restore_CNN_VL.glsl',
|
||||
'Anime4K_Upscale_CNN_x2_VL.glsl',
|
||||
'Anime4K_AutoDownscalePre_x2.glsl',
|
||||
'Anime4K_AutoDownscalePre_x4.glsl',
|
||||
'Anime4K_Upscale_CNN_x2_M.glsl'
|
||||
];
|
||||
|
||||
// 超分辨率滤镜 (轻量)
|
||||
static List<String> get mpvAnime4KShadersLite => [
|
||||
'Anime4K_Clamp_Highlights.glsl',
|
||||
'Anime4K_Restore_CNN_M.glsl',
|
||||
'Anime4K_Restore_CNN_S.glsl',
|
||||
'Anime4K_Upscale_CNN_x2_M.glsl',
|
||||
'Anime4K_AutoDownscalePre_x2.glsl',
|
||||
'Anime4K_AutoDownscalePre_x4.glsl',
|
||||
'Anime4K_Upscale_CNN_x2_S.glsl'
|
||||
];
|
||||
static const mpvAnime4KShadersLite = [
|
||||
'Anime4K_Clamp_Highlights.glsl',
|
||||
'Anime4K_Restore_CNN_M.glsl',
|
||||
'Anime4K_Restore_CNN_S.glsl',
|
||||
'Anime4K_Upscale_CNN_x2_M.glsl',
|
||||
'Anime4K_AutoDownscalePre_x2.glsl',
|
||||
'Anime4K_AutoDownscalePre_x4.glsl',
|
||||
'Anime4K_Upscale_CNN_x2_S.glsl'
|
||||
];
|
||||
|
||||
//内容来自 https://passport.bilibili.com/web/generic/country/list
|
||||
static List<Map<String, dynamic>> get internationalDialingPrefix => [
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'skeleton.dart';
|
||||
import 'package:PiliPlus/common/skeleton/skeleton.dart';
|
||||
|
||||
class DynamicCardSkeleton extends StatelessWidget {
|
||||
const DynamicCardSkeleton({super.key});
|
||||
@@ -28,7 +28,7 @@ class DynamicCardSkeleton extends StatelessWidget {
|
||||
height: 40,
|
||||
decoration: BoxDecoration(
|
||||
color: color,
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
borderRadius: const BorderRadius.all(Radius.circular(20)),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:PiliPlus/common/constants.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'skeleton.dart';
|
||||
import 'package:PiliPlus/common/skeleton/skeleton.dart';
|
||||
|
||||
class FavPgcItemSkeleton extends StatelessWidget {
|
||||
const FavPgcItemSkeleton({super.key});
|
||||
@@ -25,7 +25,7 @@ class FavPgcItemSkeleton extends StatelessWidget {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
color: color,
|
||||
borderRadius: BorderRadius.circular(4),
|
||||
borderRadius: const BorderRadius.all(Radius.circular(4)),
|
||||
),
|
||||
width: boxConstraints.maxWidth,
|
||||
height: boxConstraints.maxHeight,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:PiliPlus/common/constants.dart';
|
||||
|
||||
import 'skeleton.dart';
|
||||
import 'package:PiliPlus/common/skeleton/skeleton.dart';
|
||||
|
||||
class MediaBangumiSkeleton extends StatefulWidget {
|
||||
const MediaBangumiSkeleton({super.key});
|
||||
@@ -24,8 +24,9 @@ class _MediaBangumiSkeletonState extends State<MediaBangumiSkeleton> {
|
||||
width: 111,
|
||||
height: 148,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: const BorderRadius.all(Radius.circular(6)),
|
||||
color: bgColor),
|
||||
borderRadius: const BorderRadius.all(Radius.circular(6)),
|
||||
color: bgColor,
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
Expanded(
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'skeleton.dart';
|
||||
import 'package:PiliPlus/common/skeleton/skeleton.dart';
|
||||
|
||||
class MsgFeedSysMsgSkeleton extends StatelessWidget {
|
||||
const MsgFeedSysMsgSkeleton({super.key});
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'skeleton.dart';
|
||||
import 'package:PiliPlus/common/skeleton/skeleton.dart';
|
||||
|
||||
class MsgFeedTopSkeleton extends StatelessWidget {
|
||||
const MsgFeedTopSkeleton({super.key});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:PiliPlus/common/constants.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'skeleton.dart';
|
||||
import 'package:PiliPlus/common/skeleton/skeleton.dart';
|
||||
|
||||
class VideoCardHSkeleton extends StatelessWidget {
|
||||
const VideoCardHSkeleton({super.key});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:PiliPlus/common/constants.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'skeleton.dart';
|
||||
import 'package:PiliPlus/common/skeleton/skeleton.dart';
|
||||
|
||||
class VideoCardVSkeleton extends StatelessWidget {
|
||||
const VideoCardVSkeleton({super.key});
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'skeleton.dart';
|
||||
import 'package:PiliPlus/common/skeleton/skeleton.dart';
|
||||
|
||||
class VideoReplySkeleton extends StatelessWidget {
|
||||
const VideoReplySkeleton({super.key});
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'skeleton.dart';
|
||||
import 'package:PiliPlus/common/skeleton/skeleton.dart';
|
||||
|
||||
class WhisperItemSkeleton extends StatelessWidget {
|
||||
const WhisperItemSkeleton({super.key});
|
||||
|
||||
@@ -5,7 +5,7 @@ import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'image/network_img_layer.dart';
|
||||
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
||||
|
||||
class Avatar extends StatelessWidget {
|
||||
final _BadgeType _badgeType;
|
||||
@@ -73,10 +73,10 @@ class Avatar extends StatelessWidget {
|
||||
Get.toNamed('/liveRoom?roomid=$roomId');
|
||||
},
|
||||
child: Container(
|
||||
padding: EdgeInsets.symmetric(horizontal: 5, vertical: 1),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 1),
|
||||
decoration: BoxDecoration(
|
||||
color: colorScheme.secondaryContainer,
|
||||
borderRadius: BorderRadius.circular(36),
|
||||
borderRadius: const BorderRadius.all(Radius.circular(36)),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
@@ -106,7 +106,7 @@ class Avatar extends StatelessWidget {
|
||||
}
|
||||
|
||||
Widget _buildAvatar(ColorScheme colorScheme) => size == 80
|
||||
? Container(
|
||||
? DecoratedBox(
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(
|
||||
width: 2,
|
||||
@@ -114,11 +114,14 @@ class Avatar extends StatelessWidget {
|
||||
),
|
||||
shape: BoxShape.circle,
|
||||
),
|
||||
child: NetworkImgLayer(
|
||||
src: avatar,
|
||||
width: size,
|
||||
height: size,
|
||||
type: 'avatar',
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(2),
|
||||
child: NetworkImgLayer(
|
||||
src: avatar,
|
||||
width: size,
|
||||
height: size,
|
||||
type: 'avatar',
|
||||
),
|
||||
),
|
||||
)
|
||||
: NetworkImgLayer(
|
||||
|
||||
@@ -64,12 +64,12 @@ class PBadge extends StatelessWidget {
|
||||
late EdgeInsets paddingStyle =
|
||||
const EdgeInsets.symmetric(vertical: 2, horizontal: 3);
|
||||
double fontSize = 11;
|
||||
BorderRadius br = BorderRadius.circular(4);
|
||||
BorderRadius br = const BorderRadius.all(Radius.circular(4));
|
||||
|
||||
if (size == 'small') {
|
||||
paddingStyle = const EdgeInsets.symmetric(vertical: 2, horizontal: 3);
|
||||
fontSize = 11;
|
||||
br = BorderRadius.circular(3);
|
||||
br = const BorderRadius.all(Radius.circular(3));
|
||||
}
|
||||
|
||||
Widget content = Container(
|
||||
|
||||
@@ -17,7 +17,7 @@ class CustomToast extends StatelessWidget {
|
||||
padding: const EdgeInsets.symmetric(horizontal: 17, vertical: 10),
|
||||
decoration: BoxDecoration(
|
||||
color: theme.colorScheme.primaryContainer.withOpacity(toastOpacity),
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
borderRadius: const BorderRadius.all(Radius.circular(20)),
|
||||
),
|
||||
child: Text(
|
||||
msg,
|
||||
@@ -44,7 +44,7 @@ class LoadingWidget extends StatelessWidget {
|
||||
padding: const EdgeInsets.symmetric(horizontal: 30, vertical: 20),
|
||||
decoration: BoxDecoration(
|
||||
color: theme.dialogBackgroundColor,
|
||||
borderRadius: BorderRadius.circular(15),
|
||||
borderRadius: const BorderRadius.all(Radius.circular(15)),
|
||||
),
|
||||
child: Column(mainAxisSize: MainAxisSize.min, children: [
|
||||
//loading animation
|
||||
|
||||
@@ -30,7 +30,7 @@ void showConfirmDialog({
|
||||
Get.back();
|
||||
onConfirm();
|
||||
},
|
||||
child: Text('确认'),
|
||||
child: const Text('确认'),
|
||||
),
|
||||
],
|
||||
);
|
||||
@@ -89,10 +89,10 @@ void showPgcFollowDialog({
|
||||
ListTile(
|
||||
dense: true,
|
||||
title: Padding(
|
||||
padding: EdgeInsets.only(left: 10),
|
||||
padding: const EdgeInsets.only(left: 10),
|
||||
child: Text(
|
||||
'取消$type',
|
||||
style: TextStyle(fontSize: 14),
|
||||
style: const TextStyle(fontSize: 14),
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
|
||||
@@ -7,7 +7,8 @@ import 'package:get/get.dart';
|
||||
void autoWrapReportDialog(
|
||||
BuildContext context,
|
||||
Map<String, Map<int, String>> options,
|
||||
Future<Map> Function(int, String?, bool) onSuccess,
|
||||
Future<Map> Function(int reasonType, String? reasonDesc, bool banUid)
|
||||
onSuccess,
|
||||
) {
|
||||
int? reasonType;
|
||||
String? reasonDesc;
|
||||
@@ -211,7 +212,7 @@ class _CheckBoxTextState extends State<CheckBoxText> {
|
||||
|
||||
class ReportOptions {
|
||||
// from https://s1.hdslb.com/bfs/seed/jinkela/comment-h5/static/js/605.chunks.js
|
||||
static Map<String, Map<int, String>> get commentReport => {
|
||||
static Map<String, Map<int, String>> get commentReport => const {
|
||||
'违反法律法规': {9: '违法违规', 2: '色情', 10: '低俗', 12: '赌博诈骗', 23: '违法信息外链'},
|
||||
'谣言类不实信息': {19: '涉政谣言', 22: '虚假不实信息', 20: '涉社会事件谣言'},
|
||||
'侵犯个人权益': {7: '人身攻击', 15: '侵犯隐私'},
|
||||
@@ -227,7 +228,7 @@ class ReportOptions {
|
||||
'其他': {0: '其他'},
|
||||
};
|
||||
|
||||
static Map<String, Map<int, String>> get dynamicReport => {
|
||||
static Map<String, Map<int, String>> get dynamicReport => const {
|
||||
'': {
|
||||
4: '垃圾广告',
|
||||
8: '引战',
|
||||
|
||||
@@ -71,9 +71,9 @@ class RenderMaskedIcon extends RenderProxyBox {
|
||||
..lineTo(rect.right, rect.bottom - sqrt2Width)
|
||||
..lineTo(rect.left + sqrt2Width, rect.top));
|
||||
|
||||
canvas.save();
|
||||
|
||||
canvas.clipPath(path, doAntiAlias: false);
|
||||
canvas
|
||||
..save()
|
||||
..clipPath(path, doAntiAlias: false);
|
||||
super.paint(context, offset);
|
||||
|
||||
context.canvas.restore();
|
||||
|
||||
@@ -132,7 +132,7 @@ class _DynamicSliverAppBarState extends State<DynamicSliverAppBar> {
|
||||
return SliverToBoxAdapter(
|
||||
child: SizedBox(
|
||||
key: _childKey,
|
||||
child: widget.flexibleSpace ?? SizedBox(height: kToolbarHeight),
|
||||
child: widget.flexibleSpace ?? const SizedBox(height: kToolbarHeight),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ void imageSaveDialog({
|
||||
margin: const EdgeInsets.symmetric(horizontal: StyleString.safeSpace),
|
||||
decoration: BoxDecoration(
|
||||
color: theme.colorScheme.surface,
|
||||
borderRadius: BorderRadius.circular(10.0),
|
||||
borderRadius: StyleString.mdRadius,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
|
||||
@@ -61,32 +61,22 @@ Widget imageView(
|
||||
}
|
||||
final int row = picArr.length == 4 ? 2 : 3;
|
||||
return BorderRadius.only(
|
||||
topLeft: Radius.circular(
|
||||
(index - row >= 0 ||
|
||||
((index - 1) >= 0 && (index - 1) % row < index % row))
|
||||
? 0
|
||||
: 10,
|
||||
),
|
||||
topRight: Radius.circular(
|
||||
(index - row >= 0 ||
|
||||
((index + 1) < picArr.length &&
|
||||
(index + 1) % row > index % row))
|
||||
? 0
|
||||
: 10,
|
||||
),
|
||||
bottomLeft: Radius.circular(
|
||||
(index + row < picArr.length ||
|
||||
((index - 1) >= 0 && (index - 1) % row < index % row))
|
||||
? 0
|
||||
: 10,
|
||||
),
|
||||
bottomRight: Radius.circular(
|
||||
(index + row < picArr.length ||
|
||||
((index + 1) < picArr.length &&
|
||||
(index + 1) % row > index % row))
|
||||
? 0
|
||||
: 10,
|
||||
),
|
||||
topLeft: index - row >= 0 ||
|
||||
((index - 1) >= 0 && (index - 1) % row < index % row)
|
||||
? Radius.zero
|
||||
: StyleString.imgRadius,
|
||||
topRight: index - row >= 0 ||
|
||||
((index + 1) < picArr.length && (index + 1) % row > index % row)
|
||||
? Radius.zero
|
||||
: StyleString.imgRadius,
|
||||
bottomLeft: index + row < picArr.length ||
|
||||
((index - 1) >= 0 && (index - 1) % row < index % row)
|
||||
? Radius.zero
|
||||
: StyleString.imgRadius,
|
||||
bottomRight: index + row < picArr.length ||
|
||||
((index + 1) < picArr.length && (index + 1) % row > index % row)
|
||||
? Radius.zero
|
||||
: StyleString.imgRadius,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -47,9 +47,9 @@ class NetworkImgLayer extends StatelessWidget {
|
||||
: radius == 0 || type == 'emote'
|
||||
? _buildImage(context)
|
||||
: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(
|
||||
radius ?? StyleString.imgRadius.x,
|
||||
),
|
||||
borderRadius: radius != null
|
||||
? BorderRadius.circular(radius!)
|
||||
: StyleString.mdRadius,
|
||||
child: _buildImage(context),
|
||||
)
|
||||
: getPlaceHolder?.call() ?? placeholder(context);
|
||||
@@ -90,9 +90,9 @@ class NetworkImgLayer extends StatelessWidget {
|
||||
color: Theme.of(context).colorScheme.onInverseSurface.withOpacity(0.4),
|
||||
borderRadius: type == 'avatar' || type == 'emote' || radius == 0
|
||||
? null
|
||||
: BorderRadius.circular(
|
||||
radius ?? StyleString.imgRadius.x,
|
||||
),
|
||||
: radius != null
|
||||
? BorderRadius.circular(radius!)
|
||||
: StyleString.mdRadius,
|
||||
),
|
||||
child: type == 'bg'
|
||||
? const SizedBox.shrink()
|
||||
|
||||
@@ -486,7 +486,7 @@ class _ImageUtil {
|
||||
}
|
||||
},
|
||||
);
|
||||
imageStream = image.image.resolve(const ImageConfiguration());
|
||||
imageStream = image.image.resolve(ImageConfiguration.empty);
|
||||
imageStream.addListener(listener);
|
||||
return completer.future;
|
||||
}
|
||||
|
||||
@@ -771,14 +771,16 @@ class _InteractiveViewerState extends State<InteractiveViewer>
|
||||
widget.onInteractionStart?.call(details);
|
||||
|
||||
if (_controller.isAnimating) {
|
||||
_controller.stop();
|
||||
_controller.reset();
|
||||
_controller
|
||||
..stop()
|
||||
..reset();
|
||||
_animation?.removeListener(_onAnimate);
|
||||
_animation = null;
|
||||
}
|
||||
if (_scaleController.isAnimating) {
|
||||
_scaleController.stop();
|
||||
_scaleController.reset();
|
||||
_scaleController
|
||||
..stop()
|
||||
..reset();
|
||||
_scaleAnimation?.removeListener(_onScaleAnimate);
|
||||
_scaleAnimation = null;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'interactive_viewer.dart' as custom;
|
||||
import 'package:PiliPlus/common/widgets/interactiveviewer_gallery/interactive_viewer.dart'
|
||||
as custom;
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// https://github.com/qq326646683/interactiveviewer_gallery
|
||||
|
||||
@@ -11,8 +11,9 @@ import 'package:flutter/services.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:media_kit/media_kit.dart';
|
||||
import 'package:media_kit_video/media_kit_video.dart';
|
||||
import 'interactive_viewer_boundary.dart';
|
||||
import 'interactive_viewer.dart' as custom;
|
||||
import 'package:PiliPlus/common/widgets/interactiveviewer_gallery/interactive_viewer_boundary.dart';
|
||||
import 'package:PiliPlus/common/widgets/interactiveviewer_gallery/interactive_viewer.dart'
|
||||
as custom;
|
||||
|
||||
/// https://github.com/qq326646683/interactiveviewer_gallery
|
||||
|
||||
@@ -136,7 +137,7 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
|
||||
}
|
||||
|
||||
SystemUiMode? mode;
|
||||
setStatusBar() async {
|
||||
Future<void> setStatusBar() async {
|
||||
if (Platform.isIOS || Platform.isAndroid) {
|
||||
SystemChrome.setEnabledSystemUIMode(
|
||||
SystemUiMode.immersiveSticky,
|
||||
@@ -153,8 +154,9 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
|
||||
widget.onClose?.call(true);
|
||||
_player?.dispose();
|
||||
_pageController?.dispose();
|
||||
_animationController.removeListener(listener);
|
||||
_animationController.dispose();
|
||||
_animationController
|
||||
..removeListener(listener)
|
||||
..dispose();
|
||||
if (widget.setStatusBar != false) {
|
||||
if (Platform.isIOS || Platform.isAndroid) {
|
||||
SystemChrome.setEnabledSystemUIMode(
|
||||
@@ -403,7 +405,7 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
|
||||
.toList(),
|
||||
);
|
||||
},
|
||||
child: const Text("保存全部图片"),
|
||||
child: const Text("保存全部"),
|
||||
),
|
||||
if (widget.sources[currentIndex.value].sourceType ==
|
||||
SourceType.livePhoto)
|
||||
@@ -470,7 +472,7 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
|
||||
);
|
||||
}
|
||||
|
||||
onDoubleTap() {
|
||||
void onDoubleTap() {
|
||||
Matrix4 matrix = _transformationController!.value.clone();
|
||||
double currentScale = matrix.row0.x;
|
||||
|
||||
@@ -517,7 +519,7 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
|
||||
.whenComplete(() => _onScaleChanged(targetScale));
|
||||
}
|
||||
|
||||
onLongPress() {
|
||||
void onLongPress() {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
Widget get loadingWidget => Center(child: CircularProgressIndicator());
|
||||
Widget get loadingWidget => const Center(child: CircularProgressIndicator());
|
||||
|
||||
Widget errorWidget({errMsg, onReload}) => HttpError(
|
||||
isSliver: false,
|
||||
|
||||
@@ -320,43 +320,42 @@ class ProgressBar extends LeafRenderObjectWidget {
|
||||
@override
|
||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
|
||||
super.debugFillProperties(properties);
|
||||
properties.add(StringProperty('progress', progress.toString()));
|
||||
properties.add(StringProperty('total', total.toString()));
|
||||
properties.add(StringProperty('buffered', buffered.toString()));
|
||||
properties.add(ObjectFlagProperty<ValueChanged<Duration>>('onSeek', onSeek,
|
||||
ifNull: 'unimplemented'));
|
||||
properties.add(ObjectFlagProperty<ThumbDragStartCallback>(
|
||||
'onDragStart', onDragStart,
|
||||
ifNull: 'unimplemented'));
|
||||
properties.add(ObjectFlagProperty<ThumbDragUpdateCallback>(
|
||||
'onDragUpdate', onDragUpdate,
|
||||
ifNull: 'unimplemented'));
|
||||
properties.add(ObjectFlagProperty<VoidCallback>('onDragEnd', onDragEnd,
|
||||
ifNull: 'unimplemented'));
|
||||
properties.add(DoubleProperty('barHeight', barHeight));
|
||||
properties.add(ColorProperty('baseBarColor', baseBarColor));
|
||||
properties.add(ColorProperty('progressBarColor', progressBarColor));
|
||||
properties.add(ColorProperty('bufferedBarColor', bufferedBarColor));
|
||||
properties.add(StringProperty('barCapShape', barCapShape.toString()));
|
||||
properties.add(DoubleProperty('thumbRadius', thumbRadius));
|
||||
properties.add(ColorProperty('thumbColor', thumbColor));
|
||||
properties.add(ColorProperty('thumbGlowColor', thumbGlowColor));
|
||||
properties.add(DoubleProperty('thumbGlowRadius', thumbGlowRadius));
|
||||
properties.add(
|
||||
FlagProperty(
|
||||
'thumbCanPaintOutsideBar',
|
||||
value: thumbCanPaintOutsideBar,
|
||||
ifTrue: 'true',
|
||||
ifFalse: 'false',
|
||||
showName: true,
|
||||
),
|
||||
);
|
||||
properties
|
||||
.add(StringProperty('timeLabelLocation', timeLabelLocation.toString()));
|
||||
properties.add(StringProperty('timeLabelType', timeLabelType.toString()));
|
||||
properties
|
||||
.add(DiagnosticsProperty('timeLabelTextStyle', timeLabelTextStyle));
|
||||
properties.add(DoubleProperty('timeLabelPadding', timeLabelPadding));
|
||||
..add(StringProperty('progress', progress.toString()))
|
||||
..add(StringProperty('total', total.toString()))
|
||||
..add(StringProperty('buffered', buffered.toString()))
|
||||
..add(ObjectFlagProperty<ValueChanged<Duration>>('onSeek', onSeek,
|
||||
ifNull: 'unimplemented'))
|
||||
..add(ObjectFlagProperty<ThumbDragStartCallback>(
|
||||
'onDragStart', onDragStart,
|
||||
ifNull: 'unimplemented'))
|
||||
..add(ObjectFlagProperty<ThumbDragUpdateCallback>(
|
||||
'onDragUpdate', onDragUpdate,
|
||||
ifNull: 'unimplemented'))
|
||||
..add(ObjectFlagProperty<VoidCallback>('onDragEnd', onDragEnd,
|
||||
ifNull: 'unimplemented'))
|
||||
..add(DoubleProperty('barHeight', barHeight))
|
||||
..add(ColorProperty('baseBarColor', baseBarColor))
|
||||
..add(ColorProperty('progressBarColor', progressBarColor))
|
||||
..add(ColorProperty('bufferedBarColor', bufferedBarColor))
|
||||
..add(StringProperty('barCapShape', barCapShape.toString()))
|
||||
..add(DoubleProperty('thumbRadius', thumbRadius))
|
||||
..add(ColorProperty('thumbColor', thumbColor))
|
||||
..add(ColorProperty('thumbGlowColor', thumbGlowColor))
|
||||
..add(DoubleProperty('thumbGlowRadius', thumbGlowRadius))
|
||||
..add(
|
||||
FlagProperty(
|
||||
'thumbCanPaintOutsideBar',
|
||||
value: thumbCanPaintOutsideBar,
|
||||
ifTrue: 'true',
|
||||
ifFalse: 'false',
|
||||
showName: true,
|
||||
),
|
||||
)
|
||||
..add(StringProperty('timeLabelLocation', timeLabelLocation.toString()))
|
||||
..add(StringProperty('timeLabelType', timeLabelType.toString()))
|
||||
..add(DiagnosticsProperty('timeLabelTextStyle', timeLabelTextStyle))
|
||||
..add(DoubleProperty('timeLabelPadding', timeLabelPadding));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -619,11 +618,10 @@ class _RenderProgressBar extends RenderBox {
|
||||
|
||||
TextPainter _layoutText(String text) {
|
||||
TextPainter textPainter = TextPainter(
|
||||
text: TextSpan(text: text, style: _timeLabelTextStyle),
|
||||
textDirection: TextDirection.ltr,
|
||||
textScaleFactor: textScaleFactor,
|
||||
);
|
||||
textPainter.layout(minWidth: 0, maxWidth: double.infinity);
|
||||
text: TextSpan(text: text, style: _timeLabelTextStyle),
|
||||
textDirection: TextDirection.ltr,
|
||||
textScaler: TextScaler.linear(textScaleFactor))
|
||||
..layout(minWidth: 0, maxWidth: double.infinity);
|
||||
return textPainter;
|
||||
}
|
||||
|
||||
@@ -919,9 +917,9 @@ class _RenderProgressBar extends RenderBox {
|
||||
|
||||
@override
|
||||
void paint(PaintingContext context, Offset offset) {
|
||||
final canvas = context.canvas;
|
||||
canvas.save();
|
||||
canvas.translate(offset.dx, offset.dy);
|
||||
final canvas = context.canvas
|
||||
..save()
|
||||
..translate(offset.dx, offset.dy);
|
||||
|
||||
switch (_timeLabelLocation) {
|
||||
case TimeLabelLocation.above:
|
||||
@@ -1013,8 +1011,9 @@ class _RenderProgressBar extends RenderBox {
|
||||
}
|
||||
|
||||
void _drawProgressBar(Canvas canvas, Offset offset, Size localSize) {
|
||||
canvas.save();
|
||||
canvas.translate(offset.dx, offset.dy);
|
||||
canvas
|
||||
..save()
|
||||
..translate(offset.dx, offset.dy);
|
||||
_drawBaseBar(canvas, localSize);
|
||||
_drawBufferedBar(canvas, localSize);
|
||||
_drawCurrentProgressBar(canvas, localSize);
|
||||
@@ -1109,17 +1108,19 @@ class _RenderProgressBar extends RenderBox {
|
||||
super.describeSemanticsConfiguration(config);
|
||||
|
||||
// description
|
||||
config.textDirection = TextDirection.ltr;
|
||||
config.label = '进度条'; //'Progress bar';
|
||||
config.value = '${(_thumbValue * 100).round()}%';
|
||||
config
|
||||
..textDirection = TextDirection.ltr
|
||||
..label = '进度条' //'Progress bar';
|
||||
..value = '${(_thumbValue * 100).round()}%'
|
||||
|
||||
// increase action
|
||||
config.onIncrease = increaseAction;
|
||||
// increase action
|
||||
..onIncrease = increaseAction;
|
||||
final increased = _thumbValue + _semanticActionUnit;
|
||||
config.increasedValue = '${((increased).clamp(0.0, 1.0) * 100).round()}%';
|
||||
config
|
||||
..increasedValue = '${((increased).clamp(0.0, 1.0) * 100).round()}%'
|
||||
|
||||
// decrease action
|
||||
config.onDecrease = decreaseAction;
|
||||
// decrease action
|
||||
..onDecrease = decreaseAction;
|
||||
final decreased = _thumbValue - _semanticActionUnit;
|
||||
config.decreasedValue = '${((decreased).clamp(0.0, 1.0) * 100).round()}%';
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import 'package:flutter/material.dart';
|
||||
Widget videoProgressIndicator(double progress) => ClipRect(
|
||||
clipper: ProgressClipper(),
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.only(
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: StyleString.imgRadius,
|
||||
bottomRight: StyleString.imgRadius,
|
||||
),
|
||||
|
||||
@@ -534,8 +534,7 @@ class RefreshIndicatorState extends State<RefreshIndicator>
|
||||
_mode = _RefreshIndicatorMode.refresh;
|
||||
});
|
||||
|
||||
final Future<void> refreshResult = widget.onRefresh();
|
||||
refreshResult.whenComplete(() {
|
||||
widget.onRefresh().whenComplete(() {
|
||||
if (mounted && _mode == _RefreshIndicatorMode.refresh) {
|
||||
completer.complete();
|
||||
_dismiss(_RefreshIndicatorMode.done);
|
||||
|
||||
@@ -32,7 +32,7 @@ class VideoCardHGrpc extends StatelessWidget {
|
||||
String type = 'video';
|
||||
final String heroTag = Utils.makeHeroTag(aid);
|
||||
return InkWell(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderRadius: const BorderRadius.all(Radius.circular(12)),
|
||||
onLongPress: () => imageSaveDialog(
|
||||
title: videoItem.smallCoverV5.base.title,
|
||||
cover: videoItem.smallCoverV5.base.cover,
|
||||
|
||||
@@ -86,14 +86,14 @@ class VideoCardHMemberVideo extends StatelessWidget {
|
||||
height: maxHeight,
|
||||
),
|
||||
if (fromViewAid == videoItem.param)
|
||||
Positioned.fill(
|
||||
const Positioned.fill(
|
||||
child: DecoratedBox(
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: StyleString.mdRadius,
|
||||
color: Colors.black54,
|
||||
),
|
||||
child: Center(
|
||||
child: const Text(
|
||||
child: Text(
|
||||
'上次观看',
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
|
||||
@@ -31,7 +31,7 @@ class VideoCardV extends StatelessWidget {
|
||||
return numericRegex.hasMatch(str);
|
||||
}
|
||||
|
||||
void onPushDetail(heroTag) async {
|
||||
Future<void> onPushDetail(heroTag) async {
|
||||
String? goto = videoItem.goto;
|
||||
switch (goto) {
|
||||
case 'bangumi':
|
||||
|
||||
@@ -19,7 +19,7 @@ class VideoCardVMemberHome extends StatelessWidget {
|
||||
required this.videoItem,
|
||||
});
|
||||
|
||||
void onPushDetail(heroTag) async {
|
||||
Future<void> onPushDetail(heroTag) async {
|
||||
String? goto = videoItem.goto;
|
||||
switch (goto) {
|
||||
case 'bangumi':
|
||||
|
||||
@@ -116,7 +116,7 @@ class VideoCustomActions {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
if (tp.dislikeReasons != null) ...[
|
||||
Text('我不想看'),
|
||||
const Text('我不想看'),
|
||||
const SizedBox(height: 5),
|
||||
Wrap(
|
||||
spacing: 8.0,
|
||||
@@ -128,7 +128,7 @@ class VideoCustomActions {
|
||||
],
|
||||
if (tp.feedbacks != null) ...[
|
||||
const SizedBox(height: 5),
|
||||
Text('反馈'),
|
||||
const Text('反馈'),
|
||||
const SizedBox(height: 5),
|
||||
Wrap(
|
||||
spacing: 8.0,
|
||||
@@ -153,10 +153,7 @@ class VideoCustomActions {
|
||||
Get.back();
|
||||
},
|
||||
style: FilledButton.styleFrom(
|
||||
visualDensity: VisualDensity(
|
||||
horizontal: -2,
|
||||
vertical: -2,
|
||||
),
|
||||
visualDensity: VisualDensity.compact,
|
||||
),
|
||||
child: const Text("撤销"),
|
||||
),
|
||||
@@ -197,10 +194,7 @@ class VideoCustomActions {
|
||||
}
|
||||
},
|
||||
style: FilledButton.styleFrom(
|
||||
visualDensity: VisualDensity(
|
||||
horizontal: -2,
|
||||
vertical: -2,
|
||||
),
|
||||
visualDensity: VisualDensity.compact,
|
||||
),
|
||||
child: const Text("点踩"),
|
||||
),
|
||||
@@ -216,10 +210,7 @@ class VideoCustomActions {
|
||||
res['status'] ? "取消踩" : res['msg']);
|
||||
},
|
||||
style: FilledButton.styleFrom(
|
||||
visualDensity: VisualDensity(
|
||||
horizontal: -2,
|
||||
vertical: -2,
|
||||
),
|
||||
visualDensity: VisualDensity.compact,
|
||||
),
|
||||
child: const Text("撤销"),
|
||||
),
|
||||
@@ -288,7 +279,7 @@ class VideoCustomActions {
|
||||
class VideoPopupMenu extends StatelessWidget {
|
||||
final double? size;
|
||||
final double? iconSize;
|
||||
final double menuItemHeight = 45;
|
||||
final double menuItemHeight;
|
||||
final dynamic videoItem;
|
||||
final VoidCallback? onRemove;
|
||||
|
||||
@@ -298,6 +289,7 @@ class VideoPopupMenu extends StatelessWidget {
|
||||
required this.iconSize,
|
||||
required this.videoItem,
|
||||
this.onRemove,
|
||||
this.menuItemHeight = 45,
|
||||
});
|
||||
|
||||
@override
|
||||
|
||||
@@ -319,7 +319,7 @@ class GrpcRepo {
|
||||
required String content,
|
||||
MsgType msgType = MsgType.EN_MSG_TYPE_TEXT,
|
||||
}) async {
|
||||
final devId = Uuid().v4();
|
||||
final devId = const Uuid().v4();
|
||||
return await _request(
|
||||
GrpcUrl.sendMsg,
|
||||
ReqSendMsg(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'constants.dart';
|
||||
import 'package:PiliPlus/http/constants.dart';
|
||||
|
||||
class Api {
|
||||
// 推荐视频
|
||||
|
||||
@@ -63,7 +63,7 @@ class DanmakuHttp {
|
||||
int? pool, // 弹幕池选择(0:普通池 1:字幕池 2:特殊池(代码/BAS弹幕)默认普通池,0)
|
||||
//int? rnd,// 当前时间戳*1000000(若无此项,则发送弹幕冷却时间限制为90s;若有此项,则发送弹幕冷却时间限制为5s)
|
||||
bool? colorful, //60001:专属渐变彩色(需要会员)
|
||||
int? checkbox_type, //是否带 UP 身份标识(0:普通;4:带有标识)
|
||||
int? checkboxType, //是否带 UP 身份标识(0:普通;4:带有标识)
|
||||
// String? csrf,//CSRF Token(位于 Cookie) Cookie 方式必要
|
||||
// String? access_key,// APP 登录 Token APP 方式必要
|
||||
}) async {
|
||||
@@ -84,7 +84,7 @@ class DanmakuHttp {
|
||||
'pool': pool,
|
||||
'rnd': DateTime.now().microsecondsSinceEpoch,
|
||||
'colorful': colorful == true ? 60001 : null,
|
||||
'checkbox_type': checkbox_type,
|
||||
'checkbox_type': checkboxType,
|
||||
'csrf': Accounts.main.csrf,
|
||||
// 'access_key': access_key,
|
||||
}..removeWhere((key, value) => value == null);
|
||||
|
||||
@@ -128,9 +128,10 @@ class Request {
|
||||
..autoUncompress = false; // Http2Adapter没有自动解压, 统一行为
|
||||
// 设置代理
|
||||
if (enableSystemProxy) {
|
||||
client.findProxy = (_) => 'PROXY $systemProxyHost:$systemProxyPort';
|
||||
client.badCertificateCallback =
|
||||
(X509Certificate cert, String host, int port) => true;
|
||||
client
|
||||
..findProxy = ((_) => 'PROXY $systemProxyHost:$systemProxyPort')
|
||||
..badCertificateCallback =
|
||||
(X509Certificate cert, String host, int port) => true;
|
||||
}
|
||||
return client;
|
||||
});
|
||||
|
||||
@@ -86,10 +86,10 @@ class LoginHttp {
|
||||
required String cid,
|
||||
required String tel,
|
||||
// String? deviceTouristId,
|
||||
String? gee_challenge,
|
||||
String? gee_seccode,
|
||||
String? gee_validate,
|
||||
String? recaptcha_token,
|
||||
String? geeChallenge,
|
||||
String? geeSeccode,
|
||||
String? geeValidate,
|
||||
String? recaptchaToken,
|
||||
}) async {
|
||||
int timestamp = DateTime.now().millisecondsSinceEpoch;
|
||||
var data = {
|
||||
@@ -100,16 +100,16 @@ class LoginHttp {
|
||||
'cid': cid,
|
||||
// if (deviceTouristId != null) 'device_tourist_id': deviceTouristId,
|
||||
'disable_rcmd': '0',
|
||||
if (gee_challenge != null) 'gee_challenge': gee_challenge,
|
||||
if (gee_seccode != null) 'gee_seccode': gee_seccode,
|
||||
if (gee_validate != null) 'gee_validate': gee_validate,
|
||||
if (geeChallenge != null) 'gee_challenge': geeChallenge,
|
||||
if (geeSeccode != null) 'gee_seccode': geeSeccode,
|
||||
if (geeValidate != null) 'gee_validate': geeValidate,
|
||||
'local_id': buvid,
|
||||
// https://chinggg.github.io/post/appre/
|
||||
'login_session_id':
|
||||
md5.convert(utf8.encode(buvid + timestamp.toString())).toString(),
|
||||
'mobi_app': 'android_hd',
|
||||
'platform': 'android',
|
||||
if (recaptcha_token != null) 'recaptcha_token': recaptcha_token,
|
||||
if (recaptchaToken != null) 'recaptcha_token': recaptchaToken,
|
||||
's_locale': 'zh_CN',
|
||||
'statistics': Constants.statistics,
|
||||
'tel': tel,
|
||||
@@ -183,10 +183,10 @@ class LoginHttp {
|
||||
required String password,
|
||||
required String key,
|
||||
required String salt,
|
||||
String? gee_challenge,
|
||||
String? gee_seccode,
|
||||
String? gee_validate,
|
||||
String? recaptcha_token,
|
||||
String? geeChallenge,
|
||||
String? geeSeccode,
|
||||
String? geeValidate,
|
||||
String? recaptchaToken,
|
||||
}) async {
|
||||
dynamic publicKey = RSAKeyParser().parse(key);
|
||||
String passwordEncrypted =
|
||||
@@ -209,15 +209,15 @@ class LoginHttp {
|
||||
.base64),
|
||||
'from_pv': 'main.homepage.avatar-nologin.all.click',
|
||||
'from_url': Uri.encodeComponent('bilibili://pegasus/promo'),
|
||||
if (gee_challenge != null) 'gee_challenge': gee_challenge,
|
||||
if (gee_seccode != null) 'gee_seccode': gee_seccode,
|
||||
if (gee_validate != null) 'gee_validate': gee_validate,
|
||||
if (geeChallenge != null) 'gee_challenge': geeChallenge,
|
||||
if (geeSeccode != null) 'gee_seccode': geeSeccode,
|
||||
if (geeValidate != null) 'gee_validate': geeValidate,
|
||||
'local_id': buvid, //LoginUtils.generateBuvid(),
|
||||
'mobi_app': 'android_hd',
|
||||
'password': passwordEncrypted,
|
||||
'permission': 'ALL',
|
||||
'platform': 'android',
|
||||
if (recaptcha_token != null) 'recaptcha_token': recaptcha_token,
|
||||
if (recaptchaToken != null) 'recaptcha_token': recaptchaToken,
|
||||
's_locale': 'zh_CN',
|
||||
'statistics': Constants.statistics,
|
||||
'ts': (DateTime.now().millisecondsSinceEpoch ~/ 1000).toString(),
|
||||
|
||||
@@ -564,6 +564,6 @@ class MsgHttp {
|
||||
}
|
||||
|
||||
static String getDevId() {
|
||||
return Uuid().v4();
|
||||
return const Uuid().v4();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,8 +23,9 @@ class RetryInterceptor extends Interceptor {
|
||||
}
|
||||
(options..path = redirectUrl).maxRedirects--;
|
||||
if (status == 303) {
|
||||
options.data = null;
|
||||
options.method = 'GET';
|
||||
options
|
||||
..data = null
|
||||
..method = 'GET';
|
||||
}
|
||||
Request.dio
|
||||
.fetch(options)
|
||||
|
||||
@@ -605,7 +605,7 @@ class UserHttp {
|
||||
}
|
||||
}
|
||||
|
||||
static videoTags({required String bvid}) async {
|
||||
static Future<Map<String, dynamic>> videoTags({required String bvid}) async {
|
||||
var res =
|
||||
await Request().get(Api.videoTags, queryParameters: {'bvid': bvid});
|
||||
if (res.data['code'] == 0) {
|
||||
|
||||
@@ -950,11 +950,11 @@ class VideoHttp {
|
||||
}
|
||||
|
||||
String processList(List list) {
|
||||
final sb = StringBuffer('WEBVTT\n\n');
|
||||
sb.writeAll(
|
||||
list.map((item) =>
|
||||
'${item?['sid'] ?? 0}\n${subtitleTimecode(item['from'])} --> ${subtitleTimecode(item['to'])}\n${item['content'].trim()}'),
|
||||
'\n\n');
|
||||
final sb = StringBuffer('WEBVTT\n\n')
|
||||
..writeAll(
|
||||
list.map((item) =>
|
||||
'${item?['sid'] ?? 0}\n${subtitleTimecode(item['from'])} --> ${subtitleTimecode(item['to'])}\n${item['content'].trim()}'),
|
||||
'\n\n');
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ import 'package:PiliPlus/utils/storage.dart';
|
||||
import 'package:media_kit/media_kit.dart'; // Provides [Player], [Media], [Playlist] etc.
|
||||
import 'package:PiliPlus/utils/recommend_filter.dart';
|
||||
import 'package:catcher_2/catcher_2.dart';
|
||||
import './services/loggeer.dart';
|
||||
import 'package:PiliPlus/services/loggeer.dart';
|
||||
|
||||
void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
@@ -67,7 +67,7 @@ void main() async {
|
||||
await Request.setCookie();
|
||||
RecommendFilter();
|
||||
// 异常捕获 logo记录
|
||||
final String buildConfig = '''\n
|
||||
const String buildConfig = '''\n
|
||||
Build Time: ${BuildConfig.buildTime}
|
||||
Commit Hash: ${BuildConfig.commitHash}''';
|
||||
final Catcher2Options debugConfig = Catcher2Options(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'pgc_rank_item_model.dart';
|
||||
import 'package:PiliPlus/models/bangumi/pgc_rank/pgc_rank_item_model.dart';
|
||||
|
||||
class Data {
|
||||
List<PgcRankItemModel>? list;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'badge_info.dart';
|
||||
import 'icon_font.dart';
|
||||
import 'new_ep.dart';
|
||||
import 'stat.dart';
|
||||
import 'package:PiliPlus/models/bangumi/pgc_rank/badge_info.dart';
|
||||
import 'package:PiliPlus/models/bangumi/pgc_rank/icon_font.dart';
|
||||
import 'package:PiliPlus/models/bangumi/pgc_rank/new_ep.dart';
|
||||
import 'package:PiliPlus/models/bangumi/pgc_rank/stat.dart';
|
||||
|
||||
class PgcRankItemModel {
|
||||
String? badge;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'icon_font.dart';
|
||||
import 'package:PiliPlus/models/bangumi/pgc_timeline/icon_font.dart';
|
||||
|
||||
class Episode {
|
||||
String? cover;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'result.dart';
|
||||
import 'package:PiliPlus/models/bangumi/pgc_timeline/result.dart';
|
||||
|
||||
class PgcTimeline {
|
||||
int? code;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'episode.dart';
|
||||
import 'package:PiliPlus/models/bangumi/pgc_timeline/episode.dart';
|
||||
|
||||
class Result {
|
||||
String? date;
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
enum AudioNormalization { disable, dynaudnorm, loudnorm, custom }
|
||||
|
||||
extension AudioNormalizationExt on AudioNormalization {
|
||||
String get title => ['禁用', '预设 dynaudnorm', '预设 loudnorm', '自定义参数'][index];
|
||||
String get param => [
|
||||
String get title =>
|
||||
const ['禁用', '预设 dynaudnorm', '预设 loudnorm', '自定义参数'][index];
|
||||
String get param => const [
|
||||
'',
|
||||
// ref https://github.com/KRTirtho/spotube/commit/da10ab2e291d4ba4d3082b9a6ae535639fb8f1b7
|
||||
'dynaudnorm=g=5:f=250:r=0.9:p=0.5',
|
||||
|
||||
@@ -15,9 +15,9 @@ enum BusinessType {
|
||||
|
||||
extension BusinessTypeExtension on BusinessType {
|
||||
String get type =>
|
||||
['archive', 'pgc', 'live', 'article-list', 'article'][index];
|
||||
const ['archive', 'pgc', 'live', 'article-list', 'article'][index];
|
||||
// 隐藏时长
|
||||
List get hiddenDurationType => ['live', 'article-list', 'article'];
|
||||
List get hiddenDurationType => const ['live', 'article-list', 'article'];
|
||||
// 右上
|
||||
List get showBadge => ['pgc', 'article-list', 'article'];
|
||||
List get showBadge => const ['pgc', 'article-list', 'article'];
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
final List<Map<String, dynamic>> colorThemeTypes = [
|
||||
{'color': const Color(0xFF5CB67B), 'label': '默认绿'},
|
||||
{'color': const Color(0xFFFF7299), 'label': '粉红色'},
|
||||
const List<Map<String, dynamic>> colorThemeTypes = [
|
||||
{'color': Color(0xFF5CB67B), 'label': '默认绿'},
|
||||
{'color': Color(0xFFFF7299), 'label': '粉红色'},
|
||||
{'color': Colors.red, 'label': '红色'},
|
||||
{'color': Colors.orange, 'label': '橙色'},
|
||||
{'color': Colors.amber, 'label': '琥珀色'},
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
enum DynamicBadgeMode { hidden, point, number }
|
||||
|
||||
extension DynamicBadgeModeDesc on DynamicBadgeMode {
|
||||
String get description => ['隐藏', '红点', '数字'][index];
|
||||
String get description => const ['隐藏', '红点', '数字'][index];
|
||||
}
|
||||
|
||||
enum MsgUnReadType { pm, reply, at, like, sysMsg }
|
||||
|
||||
extension MsgUnReadTypeExt on MsgUnReadType {
|
||||
String get title => ['私信', '回复我的', '@我', '收到的赞', '系统通知'][index];
|
||||
String get title => const ['私信', '回复我的', '@我', '收到的赞', '系统通知'][index];
|
||||
}
|
||||
|
||||
@@ -7,39 +7,39 @@ enum DynamicsType {
|
||||
}
|
||||
|
||||
extension BusinessTypeExtension on DynamicsType {
|
||||
String get values => ['all', 'video', 'pgc', 'article', 'up'][index];
|
||||
String get labels => ['全部', '投稿', '番剧', '专栏', 'UP'][index];
|
||||
String get values => const ['all', 'video', 'pgc', 'article', 'up'][index];
|
||||
String get labels => const ['全部', '投稿', '番剧', '专栏', 'UP'][index];
|
||||
}
|
||||
|
||||
List get tabsConfig => [
|
||||
{
|
||||
'tag': 'all',
|
||||
'value': DynamicsType.all,
|
||||
'label': '全部',
|
||||
'enabled': true,
|
||||
},
|
||||
{
|
||||
'tag': 'video',
|
||||
'value': DynamicsType.video,
|
||||
'label': '投稿',
|
||||
'enabled': true,
|
||||
},
|
||||
{
|
||||
'tag': 'pgc',
|
||||
'value': DynamicsType.pgc,
|
||||
'label': '番剧',
|
||||
'enabled': true,
|
||||
},
|
||||
{
|
||||
'tag': 'article',
|
||||
'value': DynamicsType.article,
|
||||
'label': '专栏',
|
||||
'enabled': true,
|
||||
},
|
||||
{
|
||||
'tag': 'up',
|
||||
'value': DynamicsType.up,
|
||||
'label': 'UP',
|
||||
'enabled': true,
|
||||
},
|
||||
];
|
||||
const List tabsConfig = [
|
||||
{
|
||||
'tag': 'all',
|
||||
'value': DynamicsType.all,
|
||||
'label': '全部',
|
||||
'enabled': true,
|
||||
},
|
||||
{
|
||||
'tag': 'video',
|
||||
'value': DynamicsType.video,
|
||||
'label': '投稿',
|
||||
'enabled': true,
|
||||
},
|
||||
{
|
||||
'tag': 'pgc',
|
||||
'value': DynamicsType.pgc,
|
||||
'label': '番剧',
|
||||
'enabled': true,
|
||||
},
|
||||
{
|
||||
'tag': 'article',
|
||||
'value': DynamicsType.article,
|
||||
'label': '专栏',
|
||||
'enabled': true,
|
||||
},
|
||||
{
|
||||
'tag': 'up',
|
||||
'value': DynamicsType.up,
|
||||
'label': 'UP',
|
||||
'enabled': true,
|
||||
},
|
||||
];
|
||||
|
||||
@@ -1,43 +1,43 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
List get defaultNavigationBars => [
|
||||
{
|
||||
'id': 0,
|
||||
'icon': const Icon(
|
||||
Icons.home_outlined,
|
||||
size: 23,
|
||||
),
|
||||
'selectIcon': const Icon(
|
||||
Icons.home,
|
||||
size: 23,
|
||||
),
|
||||
'label': "首页",
|
||||
'count': 0,
|
||||
},
|
||||
{
|
||||
'id': 1,
|
||||
'icon': const Icon(
|
||||
Icons.motion_photos_on_outlined,
|
||||
size: 21,
|
||||
),
|
||||
'selectIcon': const Icon(
|
||||
Icons.motion_photos_on,
|
||||
size: 21,
|
||||
),
|
||||
'label': "动态",
|
||||
'count': 0,
|
||||
},
|
||||
{
|
||||
'id': 2,
|
||||
'icon': const Icon(
|
||||
Icons.video_collection_outlined,
|
||||
size: 21,
|
||||
),
|
||||
'selectIcon': const Icon(
|
||||
Icons.video_collection,
|
||||
size: 21,
|
||||
),
|
||||
'label': "媒体库",
|
||||
'count': 0,
|
||||
}
|
||||
];
|
||||
List defaultNavigationBars = [
|
||||
{
|
||||
'id': 0,
|
||||
'icon': const Icon(
|
||||
Icons.home_outlined,
|
||||
size: 23,
|
||||
),
|
||||
'selectIcon': const Icon(
|
||||
Icons.home,
|
||||
size: 23,
|
||||
),
|
||||
'label': "首页",
|
||||
'count': 0,
|
||||
},
|
||||
{
|
||||
'id': 1,
|
||||
'icon': const Icon(
|
||||
Icons.motion_photos_on_outlined,
|
||||
size: 21,
|
||||
),
|
||||
'selectIcon': const Icon(
|
||||
Icons.motion_photos_on,
|
||||
size: 21,
|
||||
),
|
||||
'label': "动态",
|
||||
'count': 0,
|
||||
},
|
||||
{
|
||||
'id': 2,
|
||||
'icon': const Icon(
|
||||
Icons.video_collection_outlined,
|
||||
size: 21,
|
||||
),
|
||||
'selectIcon': const Icon(
|
||||
Icons.video_collection,
|
||||
size: 21,
|
||||
),
|
||||
'label': "媒体库",
|
||||
'count': 0,
|
||||
}
|
||||
];
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
enum ReplySortType { time, like }
|
||||
|
||||
extension ReplySortTypeExtension on ReplySortType {
|
||||
String get title => ['最新评论', '最热评论'][index];
|
||||
String get label => ['最新', '最热'][index];
|
||||
String get title => const ['最新评论', '最热评论'][index];
|
||||
String get label => const ['最新', '最热'][index];
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ enum SearchType {
|
||||
}
|
||||
|
||||
extension SearchTypeExtension on SearchType {
|
||||
String get label => [
|
||||
String get label => const [
|
||||
// '综合',
|
||||
'视频',
|
||||
'番剧',
|
||||
@@ -49,5 +49,5 @@ enum ArchiveFilterType {
|
||||
|
||||
extension ArchiveFilterTypeExtension on ArchiveFilterType {
|
||||
String get description =>
|
||||
['默认排序', '播放多', '新发布', '弹幕多', '收藏多', '评论多', '最多喜欢'][index];
|
||||
const ['默认排序', '播放多', '新发布', '弹幕多', '收藏多', '评论多', '最多喜欢'][index];
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
enum ActionType { skip, mute, full, poi }
|
||||
|
||||
extension ActionTypeExt on ActionType {
|
||||
String get title => ['跳过', '静音', '整个视频', '精彩时刻'][index];
|
||||
String get title => const ['跳过', '静音', '整个视频', '精彩时刻'][index];
|
||||
}
|
||||
|
||||
@@ -47,45 +47,9 @@ enum SegmentType {
|
||||
// };
|
||||
// }
|
||||
|
||||
List<ActionType> segmentType2ActionType(SegmentType segmentType) {
|
||||
return switch (segmentType) {
|
||||
SegmentType.sponsor => [ActionType.skip, ActionType.mute, ActionType.full],
|
||||
SegmentType.selfpromo => [
|
||||
ActionType.skip,
|
||||
ActionType.mute,
|
||||
ActionType.full
|
||||
],
|
||||
SegmentType.interaction => [
|
||||
ActionType.skip,
|
||||
ActionType.mute,
|
||||
],
|
||||
SegmentType.intro => [
|
||||
ActionType.skip,
|
||||
ActionType.mute,
|
||||
],
|
||||
SegmentType.outro => [
|
||||
ActionType.skip,
|
||||
ActionType.mute,
|
||||
],
|
||||
SegmentType.preview => [
|
||||
ActionType.skip,
|
||||
ActionType.mute,
|
||||
],
|
||||
SegmentType.music_offtopic => [
|
||||
ActionType.skip,
|
||||
],
|
||||
SegmentType.poi_highlight => [ActionType.poi],
|
||||
SegmentType.filler => [
|
||||
ActionType.skip,
|
||||
ActionType.mute,
|
||||
],
|
||||
SegmentType.exclusive_access => [ActionType.full],
|
||||
};
|
||||
}
|
||||
|
||||
extension SegmentTypeExt on SegmentType {
|
||||
/// from https://github.com/hanydd/BilibiliSponsorBlock/blob/master/public/_locales/zh_CN/messages.json
|
||||
String get title => [
|
||||
String get title => const [
|
||||
'赞助广告', //sponsor
|
||||
'无偿/自我推广', //selfpromo
|
||||
'三连/订阅提醒', //interaction
|
||||
@@ -98,7 +62,7 @@ extension SegmentTypeExt on SegmentType {
|
||||
'柔性推广/品牌合作', //exclusive_access
|
||||
][index];
|
||||
|
||||
String get shortTitle => [
|
||||
String get shortTitle => const [
|
||||
'赞助广告', //sponsor
|
||||
'推广', //selfpromo
|
||||
'订阅提醒', //interaction
|
||||
@@ -111,7 +75,7 @@ extension SegmentTypeExt on SegmentType {
|
||||
'品牌合作', //exclusive_access
|
||||
][index];
|
||||
|
||||
String get description => [
|
||||
String get description => const [
|
||||
'付费推广、付费推荐和直接广告。不是自我推广或免费提及他们喜欢的商品/创作者/网站/产品。', //sponsor
|
||||
'类似于 “赞助广告” ,但无报酬或是自我推广。包括有关商品、捐赠的部分或合作者的信息。', //selfpromo
|
||||
'视频中间简短提醒观众来一键三连或关注。 如果片段较长,或是有具体内容,则应分类为自我推广。', //interaction
|
||||
@@ -124,7 +88,7 @@ extension SegmentTypeExt on SegmentType {
|
||||
'仅用于对整个视频进行标记。适用于展示UP主免费或获得补贴后使用的产品、服务或场地的视频。', //exclusive_access
|
||||
][index];
|
||||
|
||||
Color get color => [
|
||||
Color get color => const [
|
||||
Color(0xFF00d400), //sponsor
|
||||
Color(0xFFffff00), //selfpromo
|
||||
Color(0xFFcc00ff), //interaction
|
||||
@@ -136,4 +100,44 @@ extension SegmentTypeExt on SegmentType {
|
||||
Color(0xFF7300FF), //filler
|
||||
Color(0xFF008a5c), //exclusive_access
|
||||
][index];
|
||||
|
||||
List<ActionType> get toActionType {
|
||||
return switch (this) {
|
||||
SegmentType.sponsor => const [
|
||||
ActionType.skip,
|
||||
ActionType.mute,
|
||||
ActionType.full
|
||||
],
|
||||
SegmentType.selfpromo => const [
|
||||
ActionType.skip,
|
||||
ActionType.mute,
|
||||
ActionType.full
|
||||
],
|
||||
SegmentType.interaction => const [
|
||||
ActionType.skip,
|
||||
ActionType.mute,
|
||||
],
|
||||
SegmentType.intro => const [
|
||||
ActionType.skip,
|
||||
ActionType.mute,
|
||||
],
|
||||
SegmentType.outro => const [
|
||||
ActionType.skip,
|
||||
ActionType.mute,
|
||||
],
|
||||
SegmentType.preview => const [
|
||||
ActionType.skip,
|
||||
ActionType.mute,
|
||||
],
|
||||
SegmentType.music_offtopic => const [
|
||||
ActionType.skip,
|
||||
],
|
||||
SegmentType.poi_highlight => const [ActionType.poi],
|
||||
SegmentType.filler => const [
|
||||
ActionType.skip,
|
||||
ActionType.mute,
|
||||
],
|
||||
SegmentType.exclusive_access => const [ActionType.full],
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
enum SkipType { alwaysSkip, skipOnce, skipManually, showOnly, disable }
|
||||
|
||||
extension SkipTypeExt on SkipType {
|
||||
String get title => ['总是跳过', '跳过一次', '手动跳过', '仅显示', '禁用'][index];
|
||||
String get title => const ['总是跳过', '跳过一次', '手动跳过', '仅显示', '禁用'][index];
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
enum SuperResolutionType { disable, efficiency, quality }
|
||||
|
||||
extension SuperResolutionTypeExt on SuperResolutionType {
|
||||
String get title => ['禁用', '效率', '画质'][index];
|
||||
String get title => const ['禁用', '效率', '画质'][index];
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ import 'package:material_design_icons_flutter/material_design_icons_flutter.dart
|
||||
enum TabType { live, rcmd, hot, rank, bangumi, cinema }
|
||||
|
||||
extension TabTypeDesc on TabType {
|
||||
String get description => ['直播', '推荐', '热门', '分区', '番剧', '影视'][index];
|
||||
String get description => const ['直播', '推荐', '热门', '分区', '番剧', '影视'][index];
|
||||
}
|
||||
|
||||
List get tabsConfig => [
|
||||
|
||||
@@ -8,7 +8,7 @@ enum ThemeType {
|
||||
}
|
||||
|
||||
extension ThemeTypeExt on ThemeType {
|
||||
String get description => ['浅色', '深色', '跟随系统'][index];
|
||||
String get description => const ['浅色', '深色', '跟随系统'][index];
|
||||
|
||||
int get code => index;
|
||||
|
||||
|
||||
@@ -6,5 +6,5 @@ enum UpPanelPosition {
|
||||
}
|
||||
|
||||
extension UpPanelPositionDesc on UpPanelPosition {
|
||||
String get labels => ['左侧常驻', '右侧常驻', '左侧抽屉', '右侧抽屉'][index];
|
||||
String get labels => const ['左侧常驻', '右侧常驻', '左侧抽屉', '右侧抽屉'][index];
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ import 'dart:convert';
|
||||
import 'package:PiliPlus/common/widgets/avatar.dart';
|
||||
import 'package:PiliPlus/models/model_owner.dart';
|
||||
|
||||
import 'article_content_model.dart';
|
||||
import 'package:PiliPlus/models/dynamics/article_content_model.dart';
|
||||
|
||||
class DynamicsDataModel {
|
||||
bool? hasMore;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'datum.dart';
|
||||
import 'package:PiliPlus/models/live/live_emoticons/datum.dart';
|
||||
|
||||
class LiveEmoteData {
|
||||
int? fansBrand;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'emoticon.dart';
|
||||
import 'top_show.dart';
|
||||
import 'top_show_recent.dart';
|
||||
import 'package:PiliPlus/models/live/live_emoticons/emoticon.dart';
|
||||
import 'package:PiliPlus/models/live/live_emoticons/top_show.dart';
|
||||
import 'package:PiliPlus/models/live/live_emoticons/top_show_recent.dart';
|
||||
|
||||
class LiveEmoteDatum {
|
||||
List<LiveEmoticon>? emoticons;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'data.dart';
|
||||
import 'package:PiliPlus/models/live/live_emoticons/data.dart';
|
||||
|
||||
class LiveEmoticons {
|
||||
int? code;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'top_left.dart';
|
||||
import 'top_right.dart';
|
||||
import 'package:PiliPlus/models/live/live_emoticons/top_left.dart';
|
||||
import 'package:PiliPlus/models/live/live_emoticons/top_right.dart';
|
||||
|
||||
class TopShow {
|
||||
TopLeft? topLeft;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'top_left.dart';
|
||||
import 'top_right.dart';
|
||||
import 'package:PiliPlus/models/live/live_emoticons/top_left.dart';
|
||||
import 'package:PiliPlus/models/live/live_emoticons/top_right.dart';
|
||||
|
||||
class TopShowRecent {
|
||||
TopLeft? topLeft;
|
||||
|
||||
@@ -9,7 +9,7 @@ enum LiveQuality {
|
||||
}
|
||||
|
||||
extension LiveQualityCode on LiveQuality {
|
||||
static final List<int> _codeList = [
|
||||
static const List<int> _codeList = [
|
||||
30000,
|
||||
20000,
|
||||
10000,
|
||||
@@ -27,17 +27,14 @@ extension LiveQualityCode on LiveQuality {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
extension VideoQualityDesc on LiveQuality {
|
||||
static final List<String> _descList = [
|
||||
'杜比',
|
||||
'4K',
|
||||
'原画',
|
||||
'蓝光',
|
||||
'超清',
|
||||
'高清',
|
||||
'流畅',
|
||||
];
|
||||
String get description => _descList[index];
|
||||
String get description => const [
|
||||
'杜比',
|
||||
'4K',
|
||||
'原画',
|
||||
'蓝光',
|
||||
'超清',
|
||||
'高清',
|
||||
'流畅',
|
||||
][index];
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:PiliPlus/utils/utils.dart';
|
||||
|
||||
import '../model_video.dart';
|
||||
import 'package:PiliPlus/models/model_video.dart';
|
||||
|
||||
class MemberArchiveDataModel {
|
||||
MemberArchiveDataModel({
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import '../model_hot_video_item.dart';
|
||||
import 'package:PiliPlus/models/model_hot_video_item.dart';
|
||||
|
||||
class MemberCoinsDataModel extends HotVideoItemModel {
|
||||
String? subtitle;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'package:PiliPlus/pages/common/multi_select_controller.dart'
|
||||
show MultiSelectData;
|
||||
import 'model_owner.dart';
|
||||
import 'model_rec_video_item.dart';
|
||||
import 'model_video.dart';
|
||||
import 'package:PiliPlus/models/model_owner.dart';
|
||||
import 'package:PiliPlus/models/model_rec_video_item.dart';
|
||||
import 'package:PiliPlus/models/model_video.dart';
|
||||
|
||||
// 稍后再看, 排行榜等网页返回也使用该类
|
||||
class HotVideoItemModel extends BaseRecVideoItemModel with MultiSelectData {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:hive/hive.dart';
|
||||
|
||||
import 'model_video.dart';
|
||||
import 'package:PiliPlus/models/model_video.dart';
|
||||
|
||||
part 'model_owner.g.dart';
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import './model_owner.dart';
|
||||
import 'model_video.dart';
|
||||
import 'package:PiliPlus/models/model_owner.dart';
|
||||
import 'package:PiliPlus/models/model_video.dart';
|
||||
|
||||
abstract class BaseRecVideoItemModel extends BaseVideoItemModel {
|
||||
String? goto;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'package:PiliPlus/utils/em.dart';
|
||||
import 'package:PiliPlus/utils/utils.dart';
|
||||
|
||||
import '../model_owner.dart';
|
||||
import '../model_video.dart';
|
||||
import 'package:PiliPlus/models/model_owner.dart';
|
||||
import 'package:PiliPlus/models/model_video.dart';
|
||||
|
||||
abstract class SearchNumData<T> {
|
||||
SearchNumData({
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'episodic_button.dart';
|
||||
import 'item.dart';
|
||||
import 'order.dart';
|
||||
import 'package:PiliPlus/models/space/episodic_button.dart';
|
||||
import 'package:PiliPlus/models/space/item.dart';
|
||||
import 'package:PiliPlus/models/space/order.dart';
|
||||
|
||||
part 'archive.g.dart';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'container_size.dart';
|
||||
import 'fallback_layers.dart';
|
||||
import 'package:PiliPlus/models/space/container_size.dart';
|
||||
import 'package:PiliPlus/models/space/fallback_layers.dart';
|
||||
|
||||
part 'avatar.g.dart';
|
||||
|
||||
|
||||
@@ -2,19 +2,19 @@ import 'package:PiliPlus/models/space/pr_info.dart';
|
||||
import 'package:PiliPlus/models/space/space_tag_bottom.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'achieve.dart';
|
||||
import 'avatar.dart';
|
||||
import 'entrance.dart';
|
||||
import 'honours.dart';
|
||||
import 'level_info.dart';
|
||||
import 'likes.dart';
|
||||
import 'nameplate.dart';
|
||||
import 'nft_certificate.dart';
|
||||
import 'official_verify.dart';
|
||||
import 'pendant.dart';
|
||||
import 'profession_verify.dart';
|
||||
import 'relation.dart';
|
||||
import 'vip.dart';
|
||||
import 'package:PiliPlus/models/space/achieve.dart';
|
||||
import 'package:PiliPlus/models/space/avatar.dart';
|
||||
import 'package:PiliPlus/models/space/entrance.dart';
|
||||
import 'package:PiliPlus/models/space/honours.dart';
|
||||
import 'package:PiliPlus/models/space/level_info.dart';
|
||||
import 'package:PiliPlus/models/space/likes.dart';
|
||||
import 'package:PiliPlus/models/space/nameplate.dart';
|
||||
import 'package:PiliPlus/models/space/nft_certificate.dart';
|
||||
import 'package:PiliPlus/models/space/official_verify.dart';
|
||||
import 'package:PiliPlus/models/space/pendant.dart';
|
||||
import 'package:PiliPlus/models/space/profession_verify.dart';
|
||||
import 'package:PiliPlus/models/space/relation.dart';
|
||||
import 'package:PiliPlus/models/space/vip.dart';
|
||||
|
||||
part 'card.g.dart';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'day.dart';
|
||||
import 'night.dart';
|
||||
import 'package:PiliPlus/models/space/day.dart';
|
||||
import 'package:PiliPlus/models/space/night.dart';
|
||||
|
||||
part 'color_config.g.dart';
|
||||
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
import 'package:PiliPlus/models/space_article/data.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'archive.dart';
|
||||
import 'attention_tip.dart';
|
||||
import 'audios.dart';
|
||||
import 'card.dart';
|
||||
import 'coin_archive.dart';
|
||||
import 'favourite2.dart';
|
||||
import 'images.dart';
|
||||
import 'like_archive.dart';
|
||||
import 'season.dart';
|
||||
import 'series.dart';
|
||||
import 'setting.dart';
|
||||
import 'tab.dart';
|
||||
import 'tab2.dart';
|
||||
import 'package:PiliPlus/models/space/archive.dart';
|
||||
import 'package:PiliPlus/models/space/attention_tip.dart';
|
||||
import 'package:PiliPlus/models/space/audios.dart';
|
||||
import 'package:PiliPlus/models/space/card.dart';
|
||||
import 'package:PiliPlus/models/space/coin_archive.dart';
|
||||
import 'package:PiliPlus/models/space/favourite2.dart';
|
||||
import 'package:PiliPlus/models/space/images.dart';
|
||||
import 'package:PiliPlus/models/space/like_archive.dart';
|
||||
import 'package:PiliPlus/models/space/season.dart';
|
||||
import 'package:PiliPlus/models/space/series.dart';
|
||||
import 'package:PiliPlus/models/space/setting.dart';
|
||||
import 'package:PiliPlus/models/space/tab.dart';
|
||||
import 'package:PiliPlus/models/space/tab2.dart';
|
||||
|
||||
part 'data.g.dart';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'color_config.dart';
|
||||
import 'package:PiliPlus/models/space/color_config.dart';
|
||||
|
||||
part 'draw.g.dart';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'draw.dart';
|
||||
import 'package:PiliPlus/models/space/draw.dart';
|
||||
|
||||
part 'draw_src.g.dart';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'layer.dart';
|
||||
import 'package:PiliPlus/models/space/layer.dart';
|
||||
|
||||
part 'fallback_layers.g.dart';
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'pos_spec.dart';
|
||||
import 'render_spec.dart';
|
||||
import 'size_spec.dart';
|
||||
import 'package:PiliPlus/models/space/pos_spec.dart';
|
||||
import 'package:PiliPlus/models/space/render_spec.dart';
|
||||
import 'package:PiliPlus/models/space/size_spec.dart';
|
||||
|
||||
part 'general_spec.g.dart';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'colour.dart';
|
||||
import 'package:PiliPlus/models/space/colour.dart';
|
||||
|
||||
part 'honours.g.dart';
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'digital_info.dart';
|
||||
import 'entrance_button.dart';
|
||||
import 'purchase_button.dart';
|
||||
import 'package:PiliPlus/models/space/digital_info.dart';
|
||||
import 'package:PiliPlus/models/space/entrance_button.dart';
|
||||
import 'package:PiliPlus/models/space/purchase_button.dart';
|
||||
|
||||
part 'images.g.dart';
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'general_spec.dart';
|
||||
import 'layer_config.dart';
|
||||
import 'resource.dart';
|
||||
import 'package:PiliPlus/models/space/general_spec.dart';
|
||||
import 'package:PiliPlus/models/space/layer_config.dart';
|
||||
import 'package:PiliPlus/models/space/resource.dart';
|
||||
|
||||
part 'layer.g.dart';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'senior_inquiry.dart';
|
||||
import 'package:PiliPlus/models/space/senior_inquiry.dart';
|
||||
|
||||
part 'level_info.g.dart';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'draw_src.dart';
|
||||
import 'package:PiliPlus/models/space/draw_src.dart';
|
||||
|
||||
part 'res_native_draw.g.dart';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'res_native_draw.dart';
|
||||
import 'package:PiliPlus/models/space/res_native_draw.dart';
|
||||
|
||||
part 'resource.g.dart';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'data.dart';
|
||||
import 'package:PiliPlus/models/space/data.dart';
|
||||
|
||||
part 'space.g.dart';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'item.dart';
|
||||
import 'package:PiliPlus/models/space/item.dart';
|
||||
|
||||
part 'tab2.g.dart';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'label.dart';
|
||||
import 'package:PiliPlus/models/space/label.dart';
|
||||
|
||||
part 'vip.g.dart';
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'episodic_button.dart';
|
||||
import 'item.dart';
|
||||
import 'last_watched_locator.dart';
|
||||
import 'order.dart';
|
||||
import 'package:PiliPlus/models/space_archive/episodic_button.dart';
|
||||
import 'package:PiliPlus/models/space_archive/item.dart';
|
||||
import 'package:PiliPlus/models/space_archive/last_watched_locator.dart';
|
||||
import 'package:PiliPlus/models/space_archive/order.dart';
|
||||
|
||||
part 'data.g.dart';
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import '../model_owner.dart';
|
||||
import '../model_video.dart';
|
||||
import 'badge.dart';
|
||||
import 'cursor_attr.dart';
|
||||
import 'three_point.dart';
|
||||
import 'package:PiliPlus/models/model_owner.dart';
|
||||
import 'package:PiliPlus/models/model_video.dart';
|
||||
import 'package:PiliPlus/models/space_archive/badge.dart';
|
||||
import 'package:PiliPlus/models/space_archive/cursor_attr.dart';
|
||||
import 'package:PiliPlus/models/space_archive/three_point.dart';
|
||||
|
||||
class SpaceArchiveItem extends BaseSimpleVideoItemModel {
|
||||
String? subtitle;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'data.dart';
|
||||
import 'package:PiliPlus/models/space_archive/data.dart';
|
||||
|
||||
part 'space_archive.g.dart';
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import '../model_owner.dart';
|
||||
import 'nameplate.dart';
|
||||
import 'official_verify.dart';
|
||||
import 'pendant.dart';
|
||||
import 'vip.dart';
|
||||
import 'package:PiliPlus/models/model_owner.dart';
|
||||
import 'package:PiliPlus/models/space_article/nameplate.dart';
|
||||
import 'package:PiliPlus/models/space_article/official_verify.dart';
|
||||
import 'package:PiliPlus/models/space_article/pendant.dart';
|
||||
import 'package:PiliPlus/models/space_article/vip.dart';
|
||||
|
||||
class Author extends Owner {
|
||||
Pendant? pendant;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'item.dart';
|
||||
import 'list.dart';
|
||||
import 'package:PiliPlus/models/space_article/item.dart';
|
||||
import 'package:PiliPlus/models/space_article/list.dart';
|
||||
|
||||
part 'data.g.dart';
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:PiliPlus/models/dynamics/article_content_model.dart';
|
||||
|
||||
import 'author.dart';
|
||||
import 'category.dart';
|
||||
import 'media.dart';
|
||||
import 'stats.dart';
|
||||
import 'package:PiliPlus/models/space_article/author.dart';
|
||||
import 'package:PiliPlus/models/space_article/category.dart';
|
||||
import 'package:PiliPlus/models/space_article/media.dart';
|
||||
import 'package:PiliPlus/models/space_article/stats.dart';
|
||||
|
||||
class SpaceArticleItem {
|
||||
int? id;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user