Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-03-06 10:17:47 +08:00
parent 381c385726
commit 631197e3b9
80 changed files with 987 additions and 3281 deletions

View File

@@ -1,10 +1,9 @@
import 'package:PiliPlus/common/widgets/flutter/dyn/text_button.dart';
import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/pages/dynamics_repost/view.dart';
import 'package:PiliPlus/utils/num_utils.dart';
import 'package:PiliPlus/utils/page_utils.dart';
import 'package:PiliPlus/utils/request_utils.dart';
import 'package:flutter/material.dart' hide TextButton;
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
class ActionPanel extends StatelessWidget {

View File

@@ -1,5 +1,4 @@
import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/common/widgets/flutter/dyn/ink_well.dart';
import 'package:PiliPlus/common/widgets/gesture/tap_gesture_recognizer.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/http/dynamics.dart';
@@ -9,7 +8,7 @@ import 'package:PiliPlus/pages/dynamics/widgets/vote.dart';
import 'package:PiliPlus/utils/app_scheme.dart';
import 'package:PiliPlus/utils/num_utils.dart';
import 'package:flutter/foundation.dart' show kDebugMode;
import 'package:flutter/material.dart' hide InkWell;
import 'package:flutter/material.dart';
import 'package:get/get.dart';
Widget addWidget(

View File

@@ -2,7 +2,6 @@ import 'dart:math';
import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/common/widgets/dialog/report.dart';
import 'package:PiliPlus/common/widgets/flutter/dyn/ink_well.dart';
import 'package:PiliPlus/common/widgets/pendant_avatar.dart';
import 'package:PiliPlus/http/constants.dart';
import 'package:PiliPlus/http/loading_state.dart';
@@ -24,7 +23,7 @@ import 'package:PiliPlus/utils/request_utils.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/foundation.dart' show kDebugMode;
import 'package:flutter/material.dart' hide InkWell;
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';

View File

@@ -7,10 +7,9 @@ Widget blockedItem(
BuildContext context, {
required ThemeData theme,
required ModuleBlocked blocked,
required double maxWidth,
}) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 13, vertical: 1),
child: moduleBlockedItem(context, theme, blocked, maxWidth - 26),
child: moduleBlockedItem(context, theme, blocked),
);
}

View File

@@ -15,16 +15,11 @@ Widget content(
required DynamicItemModel item,
required bool isSave,
required bool isDetail,
required double maxWidth,
}) {
if (floor == 1) {
maxWidth -= 24;
}
TextSpan? richNodes = richNode(
context,
theme: theme,
item: item,
maxWidth: maxWidth,
);
final moduleDynamic = item.modules.moduleDynamic;
final pics = moduleDynamic?.major?.opus?.pics;

View File

@@ -12,7 +12,6 @@ List<Widget> dynContent(
required DynamicItemModel item,
required bool isSave,
required bool isDetail,
required double maxWidth,
}) {
final moduleDynamic = item.modules.moduleDynamic;
return [
@@ -24,7 +23,6 @@ List<Widget> dynContent(
isDetail: isDetail,
item: item,
floor: floor,
maxWidth: maxWidth,
),
module(
context,
@@ -33,7 +31,6 @@ List<Widget> dynContent(
isDetail: isDetail,
item: item,
floor: floor,
maxWidth: maxWidth,
),
if (moduleDynamic?.additional case final additional?)
addWidget(
@@ -44,6 +41,6 @@ List<Widget> dynContent(
floor: floor,
),
if (moduleDynamic?.major?.blocked case final blocked?)
blockedItem(context, theme: theme, blocked: blocked, maxWidth: maxWidth),
blockedItem(context, theme: theme, blocked: blocked),
];
}

View File

@@ -1,5 +1,4 @@
import 'package:PiliPlus/common/widgets/avatars.dart';
import 'package:PiliPlus/common/widgets/flutter/dyn/ink_well.dart';
import 'package:PiliPlus/common/widgets/image/image_save.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/dynamics/result.dart';
@@ -10,11 +9,10 @@ import 'package:PiliPlus/pages/dynamics/widgets/interaction.dart';
import 'package:PiliPlus/utils/extension/theme_ext.dart';
import 'package:PiliPlus/utils/page_utils.dart';
import 'package:PiliPlus/utils/platform_utils.dart';
import 'package:flutter/material.dart' hide InkWell;
import 'package:flutter/material.dart';
class DynamicPanel extends StatelessWidget {
final DynamicItemModel item;
final double maxWidth;
final bool isDetail;
final ValueChanged<Object>? onRemove;
final bool isSave;
@@ -30,7 +28,6 @@ class DynamicPanel extends StatelessWidget {
const DynamicPanel({
super.key,
required this.item,
required this.maxWidth,
this.isDetail = false,
this.onRemove,
this.isSave = false,
@@ -99,7 +96,6 @@ class DynamicPanel extends StatelessWidget {
isDetail: isDetail,
item: item,
floor: 1,
maxWidth: maxWidth,
),
const SizedBox(height: 2),
if (!isDetail) ...[

View File

@@ -1,4 +1,3 @@
import 'package:PiliPlus/common/widgets/flutter/dyn/ink_well.dart';
import 'package:PiliPlus/common/widgets/image/image_save.dart';
import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/pages/dynamics/widgets/dyn_content.dart';
@@ -6,7 +5,7 @@ import 'package:PiliPlus/pages/dynamics/widgets/module_panel.dart';
import 'package:PiliPlus/utils/date_utils.dart';
import 'package:PiliPlus/utils/page_utils.dart';
import 'package:PiliPlus/utils/platform_utils.dart';
import 'package:flutter/material.dart' hide InkWell;
import 'package:flutter/material.dart';
import 'package:get/get.dart';
Widget forwardPanel(
@@ -16,7 +15,6 @@ Widget forwardPanel(
required DynamicItemModel orig,
required bool isSave,
required bool isDetail,
required double maxWidth,
}) {
final moduleDynamic = orig.modules.moduleDynamic;
final major = moduleDynamic?.major;
@@ -44,7 +42,6 @@ Widget forwardPanel(
isDetail: isDetail,
item: orig,
floor: floor + 1,
maxWidth: maxWidth - 30,
),
],
);

View File

@@ -8,7 +8,6 @@ Widget livePanel(
required ThemeData theme,
required DynamicItemModel item,
required bool isDetail,
required double maxWidth,
Function(List<String>, int)? callback,
}) {
DynamicLive2Model? live = item.modules.moduleDynamic!.major!.live;

View File

@@ -1,10 +1,11 @@
import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/common/widgets/badge.dart';
import 'package:PiliPlus/common/widgets/flutter/layout_builder.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/models/common/badge_type.dart';
import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/utils/extension/num_ext.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart' hide LayoutBuilder;
Widget livePanelSub(
BuildContext context, {
@@ -12,7 +13,6 @@ Widget livePanelSub(
required ThemeData theme,
required DynamicItemModel item,
required bool isDetail,
required double maxWidth,
}) {
LivePlayInfo? live = item
.modules
@@ -27,7 +27,6 @@ Widget livePanelSub(
}
EdgeInsets padding;
if (floor == 1) {
maxWidth -= 24;
padding = const EdgeInsets.symmetric(horizontal: 12);
} else {
padding = EdgeInsets.zero;
@@ -40,11 +39,13 @@ Widget livePanelSub(
Stack(
clipBehavior: Clip.none,
children: [
NetworkImgLayer(
width: maxWidth,
height: maxWidth / StyleString.aspectRatio,
src: live.cover,
quality: 40,
LayoutBuilder(
builder: (context, constraints) => NetworkImgLayer(
width: constraints.maxWidth,
height: constraints.maxWidth / StyleString.aspectRatio,
src: live.cover,
quality: 40,
),
),
PBadge(
text: live.watchedShow?.textLarge,

View File

@@ -1,10 +1,11 @@
import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/common/widgets/badge.dart';
import 'package:PiliPlus/common/widgets/flutter/layout_builder.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/models/common/badge_type.dart';
import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/utils/extension/num_ext.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart' hide LayoutBuilder;
Widget liveRcmdPanel(
BuildContext context, {
@@ -12,7 +13,6 @@ Widget liveRcmdPanel(
required ThemeData theme,
required DynamicItemModel item,
required bool isDetail,
required double maxWidth,
Function(List<String>, int)? callback,
}) {
DynamicLiveModel? liveRcmd = item.modules.moduleDynamic?.major?.liveRcmd;
@@ -21,7 +21,6 @@ Widget liveRcmdPanel(
}
EdgeInsets padding;
if (floor == 1) {
maxWidth -= 24;
padding = const EdgeInsets.symmetric(horizontal: 12);
} else {
padding = EdgeInsets.zero;
@@ -34,11 +33,13 @@ Widget liveRcmdPanel(
Stack(
clipBehavior: Clip.none,
children: [
NetworkImgLayer(
width: maxWidth,
height: maxWidth / StyleString.aspectRatio,
src: liveRcmd.cover,
quality: 40,
LayoutBuilder(
builder: (context, constraints) => NetworkImgLayer(
width: constraints.maxWidth,
height: constraints.maxWidth / StyleString.aspectRatio,
src: liveRcmd.cover,
quality: 40,
),
),
PBadge(
text: liveRcmd.watchedShow?.textLarge,

View File

@@ -1,6 +1,5 @@
import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/common/widgets/badge.dart';
import 'package:PiliPlus/common/widgets/flutter/dyn/ink_well.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/grpc/bilibili/app/listener/v1.pbenum.dart'
show PlaylistSource;
@@ -15,7 +14,7 @@ import 'package:PiliPlus/utils/extension/num_ext.dart';
import 'package:PiliPlus/utils/image_utils.dart';
import 'package:PiliPlus/utils/page_utils.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart' hide InkWell;
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
Widget noneWidget(ThemeData theme, String? tips) => Row(
@@ -40,7 +39,6 @@ Widget module(
required DynamicItemModel item,
required bool isSave,
required bool isDetail,
required double maxWidth,
}) {
final moduleDynamic = item.modules.moduleDynamic;
final major = moduleDynamic?.major;
@@ -77,7 +75,6 @@ Widget module(
floor: floor,
isSave: isSave,
isDetail: isDetail,
maxWidth: maxWidth,
);
// 转发
case 'DYNAMIC_TYPE_FORWARD':
@@ -88,7 +85,6 @@ Widget module(
orig: item.orig!,
isDetail: isDetail,
floor: floor + 1,
maxWidth: maxWidth,
);
// 直播
case 'DYNAMIC_TYPE_LIVE_RCMD':
@@ -98,7 +94,6 @@ Widget module(
isDetail: isDetail,
item: item,
floor: floor,
maxWidth: maxWidth,
);
// 直播
case 'DYNAMIC_TYPE_LIVE':
@@ -108,7 +103,6 @@ Widget module(
item: item,
floor: floor,
isDetail: isDetail,
maxWidth: maxWidth,
);
// 活动
case 'DYNAMIC_TYPE_COMMON_SQUARE':
@@ -315,7 +309,6 @@ Widget module(
isDetail: isDetail,
item: item,
floor: floor,
maxWidth: maxWidth,
);
default:

View File

@@ -22,7 +22,6 @@ TextSpan? richNode(
BuildContext context, {
required ThemeData theme,
required DynamicItemModel item,
required double maxWidth,
}) {
try {
late final style = TextStyle(color: theme.colorScheme.primary);

View File

@@ -1,4 +1,3 @@
import 'package:PiliPlus/common/widgets/flutter/dyn/ink_well.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/models/common/dynamic/up_panel_position.dart';
import 'package:PiliPlus/models/common/image_type.dart';
@@ -10,7 +9,7 @@ import 'package:PiliPlus/utils/extension/num_ext.dart';
import 'package:PiliPlus/utils/feed_back.dart';
import 'package:PiliPlus/utils/page_utils.dart';
import 'package:PiliPlus/utils/platform_utils.dart';
import 'package:flutter/material.dart' hide InkWell;
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class UpPanel extends StatefulWidget {

View File

@@ -1,12 +1,13 @@
// 视频or合集
import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/common/widgets/badge.dart';
import 'package:PiliPlus/common/widgets/flutter/layout_builder.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/models/common/badge_type.dart';
import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/utils/extension/num_ext.dart';
import 'package:PiliPlus/utils/num_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart' hide LayoutBuilder;
Widget videoSeasonWidget(
BuildContext context, {
@@ -15,7 +16,6 @@ Widget videoSeasonWidget(
required DynamicItemModel item,
required bool isSave,
required bool isDetail,
required double maxWidth,
}) {
// type archive ugcSeason
// archive 视频/显示发布人
@@ -36,7 +36,6 @@ Widget videoSeasonWidget(
EdgeInsets padding;
if (floor == 1) {
maxWidth -= 24;
padding = const EdgeInsets.symmetric(horizontal: 12);
} else {
padding = EdgeInsets.zero;
@@ -51,11 +50,13 @@ Widget videoSeasonWidget(
Stack(
clipBehavior: Clip.none,
children: [
NetworkImgLayer(
width: maxWidth,
height: maxWidth / StyleString.aspectRatio,
src: cover,
quality: 40,
LayoutBuilder(
builder: (context, constraints) => NetworkImgLayer(
width: constraints.maxWidth,
height: constraints.maxWidth / StyleString.aspectRatio,
src: cover,
quality: 40,
),
),
if (video.badge?.text case final badge?)
PBadge(

View File

@@ -4,6 +4,7 @@ import 'dart:math';
import 'package:PiliPlus/common/widgets/avatars.dart';
import 'package:PiliPlus/common/widgets/badge.dart';
import 'package:PiliPlus/common/widgets/dialog/report.dart';
import 'package:PiliPlus/common/widgets/flutter/layout_builder.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/http/dynamics.dart';
import 'package:PiliPlus/http/loading_state.dart';
@@ -15,7 +16,7 @@ import 'package:PiliPlus/utils/date_utils.dart';
import 'package:PiliPlus/utils/extension/iterable_ext.dart';
import 'package:PiliPlus/utils/grid.dart';
import 'package:PiliPlus/utils/num_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart' hide LayoutBuilder;
import 'package:get/get.dart';
class VotePanel extends StatefulWidget {