opt dyn detail

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-05-20 22:29:51 +08:00
parent 12eb430d8c
commit 43d71bb368
4 changed files with 129 additions and 219 deletions

View File

@@ -320,16 +320,16 @@ Widget forWard(
); );
// 课堂 // 课堂
case 'DYNAMIC_TYPE_COURSES_SEASON': case 'DYNAMIC_TYPE_COURSES_SEASON':
return Row( return SizedBox(
children: [ width: double.infinity,
Expanded( child: Padding(
child: Text( padding: floor == 1
"课堂💪:${item.modules.moduleDynamic!.major!.courses!['title']}", ? const EdgeInsets.symmetric(horizontal: 12)
maxLines: 1, : EdgeInsets.zero,
overflow: TextOverflow.ellipsis, child: Text(
), "课堂:${item.modules.moduleDynamic!.major!.courses!['title']}",
) ),
], ),
); );
// 活动 // 活动
case 'DYNAMIC_TYPE_COMMON_SQUARE': case 'DYNAMIC_TYPE_COMMON_SQUARE':

View File

@@ -1,7 +1,6 @@
import 'package:PiliPlus/grpc/bilibili/main/community/reply/v1.pb.dart' import 'package:PiliPlus/grpc/bilibili/main/community/reply/v1.pb.dart'
show MainListReply, ReplyInfo; show MainListReply, ReplyInfo;
import 'package:PiliPlus/grpc/reply.dart'; import 'package:PiliPlus/grpc/reply.dart';
import 'package:PiliPlus/http/dynamics.dart';
import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/dynamics/result.dart'; import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/pages/common/reply_controller.dart'; import 'package:PiliPlus/pages/common/reply_controller.dart';
@@ -10,40 +9,23 @@ import 'package:PiliPlus/utils/storage.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
class DynamicDetailController extends ReplyController<MainListReply> { class DynamicDetailController extends ReplyController<MainListReply> {
DynamicDetailController(this.oid, this.type); late int oid;
int oid; late int replyType;
int type; late DynamicItemModel dynItem;
late DynamicItemModel item;
int? floor;
late final horizontalPreview = GStorage.horizontalPreview; late final horizontalPreview = GStorage.horizontalPreview;
late final showDynActionBar = GStorage.showDynActionBar; late final showDynActionBar = GStorage.showDynActionBar;
@override @override
dynamic get sourceId => type == 1 ? IdUtils.av2bv(oid) : oid; dynamic get sourceId => replyType == 1 ? IdUtils.av2bv(oid) : oid;
@override @override
void onInit() { void onInit() {
super.onInit(); super.onInit();
item = Get.arguments['item']; dynItem = Get.arguments['item'];
floor = Get.arguments['floor']; oid = int.parse(dynItem.basic!.commentIdStr!);
if (floor == 1) { replyType = dynItem.basic!.commentType!;
count.value = item.modules.moduleStat?.comment?.count ?? 0; queryData();
}
if (oid != 0) {
queryData();
}
}
Future<void> getCommentParams(int id) async {
var res = await DynamicsHttp.opusDetail(opusId: id);
if (res is Success) {
final data = (res as Success<DynamicItemModel>).response;
type = data.basic!.commentType!;
oid = int.parse(data.basic!.commentIdStr!);
queryData();
}
} }
@override @override
@@ -53,7 +35,7 @@ class DynamicDetailController extends ReplyController<MainListReply> {
@override @override
Future<LoadingState<MainListReply>> customGetData() => ReplyGrpc.mainList( Future<LoadingState<MainListReply>> customGetData() => ReplyGrpc.mainList(
type: type, type: replyType,
oid: oid, oid: oid,
mode: mode.value, mode: mode.value,
cursorNext: cursorNext, cursorNext: cursorNext,

View File

@@ -39,23 +39,20 @@ class DynamicDetailPage extends StatefulWidget {
class _DynamicDetailPageState extends State<DynamicDetailPage> class _DynamicDetailPageState extends State<DynamicDetailPage>
with TickerProviderStateMixin { with TickerProviderStateMixin {
late DynamicDetailController _dynamicDetailController; final _controller =
Get.put(DynamicDetailController(), tag: Utils.generateRandomString(8));
late final AnimationController _fabAnimationCtr; late final AnimationController _fabAnimationCtr;
late final Animation<Offset> _anim; late final Animation<Offset> _anim;
final RxBool _visibleTitle = false.obs; final RxBool _visibleTitle = false.obs;
// 回复类型
late int replyType;
bool _isFabVisible = true; bool _isFabVisible = true;
bool? _imageStatus; bool? _imageStatus;
int oid = 0;
int? opusId;
bool isOpusId = false;
late final List<double> _ratio = GStorage.dynamicDetailRatio; late final List<double> _ratio = GStorage.dynamicDetailRatio;
bool get _horizontalPreview => bool get _horizontalPreview =>
context.orientation == Orientation.landscape && context.orientation == Orientation.landscape &&
_dynamicDetailController.horizontalPreview; _controller.horizontalPreview;
late final _key = GlobalKey<ScaffoldState>(); late final _key = GlobalKey<ScaffoldState>();
@@ -103,9 +100,6 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
@override @override
void initState() { void initState() {
super.initState(); super.initState();
// floor 1原创 2转发
init();
_fabAnimationCtr = AnimationController( _fabAnimationCtr = AnimationController(
vsync: this, vsync: this,
duration: const Duration(milliseconds: 300), duration: const Duration(milliseconds: 300),
@@ -118,50 +112,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
curve: Curves.easeInOut, curve: Curves.easeInOut,
)); ));
_fabAnimationCtr.forward(); _fabAnimationCtr.forward();
_dynamicDetailController.scrollController.addListener(listener); _controller.scrollController.addListener(listener);
}
// 页面初始化
Future<void> init() async {
Map args = Get.arguments;
// 楼层
int floor = args['floor'];
// 评论类型
final item = args['item'] as DynamicItemModel;
int commentType = item.basic?.commentType ?? 11;
replyType = (commentType == 0) ? 11 : commentType;
if (floor == 1) {
oid = int.parse(item.basic!.commentIdStr!);
} else {
try {
final moduleDynamic = item.modules.moduleDynamic!;
String majorType = moduleDynamic.major!.type!;
if (majorType == 'MAJOR_TYPE_OPUS') {
// 转发的动态
String jumpUrl = moduleDynamic.major!.opus!.jumpUrl!;
opusId = int.parse(jumpUrl.split('/').last);
if (opusId != null) {
isOpusId = true;
_dynamicDetailController = Get.put(
DynamicDetailController(oid, replyType),
tag: Utils.makeHeroTag(opusId),
);
await _dynamicDetailController.getCommentParams(opusId!);
setState(() {});
}
} else {
oid = moduleDynamic.major!.draw!.id!;
}
} catch (_) {}
}
if (!isOpusId) {
_dynamicDetailController = Get.put(
DynamicDetailController(oid, replyType),
tag: Utils.makeHeroTag(oid),
);
}
} }
// 查看二级评论 // 查看二级评论
@@ -189,7 +140,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
oid: oid, oid: oid,
rpid: rpid, rpid: rpid,
source: 'dynamic', source: 'dynamic',
replyType: replyType, replyType: _controller.replyType,
firstFloor: replyItem, firstFloor: replyItem,
onDispose: onDispose, onDispose: onDispose,
), ),
@@ -200,7 +151,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
replyReplyPage, replyReplyPage,
routeName: 'dynamicDetail-Copy', routeName: 'dynamicDetail-Copy',
arguments: { arguments: {
'item': _dynamicDetailController.item, 'item': _controller.dynItem,
}, },
); );
} else { } else {
@@ -230,7 +181,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
replyReplyPage, replyReplyPage,
routeName: 'dynamicDetail-Copy', routeName: 'dynamicDetail-Copy',
arguments: { arguments: {
'item': _dynamicDetailController.item, 'item': _controller.dynItem,
}, },
); );
} }
@@ -242,10 +193,9 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
void didChangeDependencies() { void didChangeDependencies() {
super.didChangeDependencies(); super.didChangeDependencies();
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
if (_dynamicDetailController.scrollController.hasClients) { if (_controller.scrollController.hasClients) {
_visibleTitle.value = _visibleTitle.value =
_dynamicDetailController.scrollController.positions.first.pixels > _controller.scrollController.positions.first.pixels > 55;
55;
} }
}); });
} }
@@ -253,13 +203,13 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
void listener() { void listener() {
// 标题 // 标题
_visibleTitle.value = _visibleTitle.value =
_dynamicDetailController.scrollController.positions.first.pixels > 55; _controller.scrollController.positions.first.pixels > 55;
// fab按钮 // fab按钮
final ScrollDirection direction1 = _dynamicDetailController final ScrollDirection direction1 =
.scrollController.positions.first.userScrollDirection; _controller.scrollController.positions.first.userScrollDirection;
late final ScrollDirection direction2 = _dynamicDetailController late final ScrollDirection direction2 =
.scrollController.positions.last.userScrollDirection; _controller.scrollController.positions.last.userScrollDirection;
if (direction1 == ScrollDirection.forward || if (direction1 == ScrollDirection.forward ||
direction2 == ScrollDirection.forward) { direction2 == ScrollDirection.forward) {
_showFab(); _showFab();
@@ -286,7 +236,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
@override @override
void dispose() { void dispose() {
_fabAnimationCtr.dispose(); _fabAnimationCtr.dispose();
_dynamicDetailController.scrollController.removeListener(listener); _controller.scrollController.removeListener(listener);
super.dispose(); super.dispose();
} }
@@ -304,7 +254,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
opacity: _visibleTitle.value ? 1 : 0, opacity: _visibleTitle.value ? 1 : 0,
duration: const Duration(milliseconds: 300), duration: const Duration(milliseconds: 300),
child: AuthorPanel( child: AuthorPanel(
item: _dynamicDetailController.item, item: _controller.dynItem,
source: 'detail', //to remove tag source: 'detail', //to remove tag
), ),
); );
@@ -364,7 +314,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
bottom: false, bottom: false,
child: context.orientation == Orientation.portrait child: context.orientation == Orientation.portrait
? refreshIndicator( ? refreshIndicator(
onRefresh: _dynamicDetailController.onRefresh, onRefresh: _controller.onRefresh,
child: _buildBody(context.orientation, theme), child: _buildBody(context.orientation, theme),
) )
: _buildBody(context.orientation, theme), : _buildBody(context.orientation, theme),
@@ -380,20 +330,19 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
double padding = max(context.width / 2 - Grid.smallCardWidth, 0); double padding = max(context.width / 2 - Grid.smallCardWidth, 0);
if (orientation == Orientation.portrait) { if (orientation == Orientation.portrait) {
return CustomScrollView( return CustomScrollView(
controller: _dynamicDetailController.scrollController, controller: _controller.scrollController,
physics: const AlwaysScrollableScrollPhysics(), physics: const AlwaysScrollableScrollPhysics(),
slivers: [ slivers: [
SliverToBoxAdapter( SliverToBoxAdapter(
child: DynamicPanel( child: DynamicPanel(
item: _dynamicDetailController.item, item: _controller.dynItem,
source: 'detail', source: 'detail',
callback: _getImageCallback, callback: _getImageCallback,
), ),
), ),
replyPersistentHeader(theme), replyPersistentHeader(theme),
Obx( Obx(
() => replyList( () => replyList(theme, _controller.loadingState.value),
theme, _dynamicDetailController.loadingState.value),
), ),
] ]
.map<Widget>((e) => SliverPadding( .map<Widget>((e) => SliverPadding(
@@ -407,7 +356,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
Expanded( Expanded(
flex: _ratio[0].toInt(), flex: _ratio[0].toInt(),
child: CustomScrollView( child: CustomScrollView(
controller: _dynamicDetailController.scrollController, controller: _controller.scrollController,
physics: const AlwaysScrollableScrollPhysics(), physics: const AlwaysScrollableScrollPhysics(),
slivers: [ slivers: [
SliverPadding( SliverPadding(
@@ -417,7 +366,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
), ),
sliver: SliverToBoxAdapter( sliver: SliverToBoxAdapter(
child: DynamicPanel( child: DynamicPanel(
item: _dynamicDetailController.item, item: _controller.dynItem,
source: 'detail', source: 'detail',
callback: _getImageCallback, callback: _getImageCallback,
), ),
@@ -432,10 +381,9 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
key: _key, key: _key,
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
body: refreshIndicator( body: refreshIndicator(
onRefresh: _dynamicDetailController.onRefresh, onRefresh: _controller.onRefresh,
child: CustomScrollView( child: CustomScrollView(
controller: controller: _controller.scrollController,
_dynamicDetailController.scrollController,
physics: const AlwaysScrollableScrollPhysics(), physics: const AlwaysScrollableScrollPhysics(),
slivers: [ slivers: [
SliverPadding( SliverPadding(
@@ -446,9 +394,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
padding: EdgeInsets.only(right: padding / 4), padding: EdgeInsets.only(right: padding / 4),
sliver: Obx( sliver: Obx(
() => replyList( () => replyList(
theme, theme, _controller.loadingState.value),
_dynamicDetailController
.loadingState.value),
), ),
), ),
], ],
@@ -473,16 +419,16 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
heroTag: null, heroTag: null,
onPressed: () { onPressed: () {
feedBack(); feedBack();
_dynamicDetailController.onReply( _controller.onReply(
context, context,
oid: _dynamicDetailController.oid, oid: _controller.oid,
replyType: replyType, replyType: _controller.replyType,
); );
}, },
tooltip: '评论动态', tooltip: '评论动态',
child: const Icon(Icons.reply), child: const Icon(Icons.reply),
); );
return _dynamicDetailController.showDynActionBar.not return _controller.showDynActionBar.not
? Align( ? Align(
alignment: Alignment.bottomRight, alignment: Alignment.bottomRight,
child: Padding( child: Padding(
@@ -527,27 +473,25 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
isScrollControlled: true, isScrollControlled: true,
useSafeArea: true, useSafeArea: true,
builder: (context) => RepostPanel( builder: (context) => RepostPanel(
item: item: _controller.dynItem,
_dynamicDetailController.item,
callback: () { callback: () {
int count = int count = _controller
_dynamicDetailController .dynItem
.item .modules
.modules .moduleStat
.moduleStat ?.forward
?.forward ?.count ??
?.count ?? 0;
0; _controller.dynItem.modules
_dynamicDetailController.item .moduleStat ??=
.modules.moduleStat ??=
ModuleStatModel(); ModuleStatModel();
_dynamicDetailController _controller
.item .dynItem
.modules .modules
.moduleStat .moduleStat
?.forward ??= DynamicStat(); ?.forward ??= DynamicStat();
_dynamicDetailController _controller
.item .dynItem
.modules .modules
.moduleStat! .moduleStat!
.forward! .forward!
@@ -573,20 +517,15 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
theme.colorScheme.outline, theme.colorScheme.outline,
), ),
label: Text( label: Text(
_dynamicDetailController _controller.dynItem.modules.moduleStat
.item ?.forward?.count !=
.modules
.moduleStat
?.forward
?.count !=
null null
? Utils.numFormat( ? Utils.numFormat(_controller
_dynamicDetailController .dynItem
.item .modules
.modules .moduleStat!
.moduleStat! .forward!
.forward! .count)
.count)
: '转发', : '转发',
), ),
), ),
@@ -596,7 +535,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
child: TextButton.icon( child: TextButton.icon(
onPressed: () { onPressed: () {
Utils.shareText( Utils.shareText(
'${HttpString.dynamicShareBaseUrl}/${_dynamicDetailController.item.idStr}'); '${HttpString.dynamicShareBaseUrl}/${_controller.dynItem.idStr}');
}, },
icon: Icon( icon: Icon(
CustomIcon.share_node, CustomIcon.share_node,
@@ -618,7 +557,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
builder: (context) => TextButton.icon( builder: (context) => TextButton.icon(
onPressed: () => onPressed: () =>
RequestUtils.onLikeDynamic( RequestUtils.onLikeDynamic(
_dynamicDetailController.item, _controller.dynItem,
() { () {
if (context.mounted) { if (context.mounted) {
(context as Element?) (context as Element?)
@@ -627,18 +566,14 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
}, },
), ),
icon: Icon( icon: Icon(
_dynamicDetailController _controller.dynItem.modules.moduleStat
.item ?.like?.status ==
.modules
.moduleStat
?.like
?.status ==
true true
? FontAwesomeIcons.solidThumbsUp ? FontAwesomeIcons.solidThumbsUp
: FontAwesomeIcons.thumbsUp, : FontAwesomeIcons.thumbsUp,
size: 16, size: 16,
color: _dynamicDetailController color: _controller
.item .dynItem
.modules .modules
.moduleStat .moduleStat
?.like ?.like
@@ -646,16 +581,15 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
true true
? theme.colorScheme.primary ? theme.colorScheme.primary
: theme.colorScheme.outline, : theme.colorScheme.outline,
semanticLabel: semanticLabel: _controller
_dynamicDetailController .dynItem
.item .modules
.modules .moduleStat
.moduleStat ?.like
?.like ?.status ==
?.status == true
true ? "已赞"
? "" : "",
: "点赞",
), ),
style: TextButton.styleFrom( style: TextButton.styleFrom(
padding: const EdgeInsets.fromLTRB( padding: const EdgeInsets.fromLTRB(
@@ -672,24 +606,23 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
scale: animation, child: child); scale: animation, child: child);
}, },
child: Text( child: Text(
_dynamicDetailController _controller
.item .dynItem
.modules .modules
.moduleStat .moduleStat
?.like ?.like
?.count != ?.count !=
null null
? Utils.numFormat( ? Utils.numFormat(_controller
_dynamicDetailController .dynItem
.item .modules
.modules .moduleStat!
.moduleStat! .like!
.like! .count)
.count)
: '点赞', : '点赞',
style: TextStyle( style: TextStyle(
color: _dynamicDetailController color: _controller
.item .dynItem
.modules .modules
.moduleStat .moduleStat
?.like ?.like
@@ -732,8 +665,8 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
return ScaleTransition(scale: animation, child: child); return ScaleTransition(scale: animation, child: child);
}, },
child: Text( child: Text(
'${_dynamicDetailController.count.value == -1 ? 0 : Utils.numFormat(_dynamicDetailController.count.value)}条回复', '${_controller.count.value == -1 ? 0 : Utils.numFormat(_controller.count.value)}条回复',
key: ValueKey<int>(_dynamicDetailController.count.value), key: ValueKey<int>(_controller.count.value),
), ),
), ),
), ),
@@ -741,14 +674,14 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
SizedBox( SizedBox(
height: 35, height: 35,
child: TextButton.icon( child: TextButton.icon(
onPressed: () => _dynamicDetailController.queryBySort(), onPressed: () => _controller.queryBySort(),
icon: Icon( icon: Icon(
Icons.sort, Icons.sort,
size: 16, size: 16,
color: theme.colorScheme.secondary, color: theme.colorScheme.secondary,
), ),
label: Obx(() => Text( label: Obx(() => Text(
_dynamicDetailController.sortType.value.label, _controller.sortType.value.label,
style: TextStyle( style: TextStyle(
fontSize: 13, fontSize: 13,
color: theme.colorScheme.secondary, color: theme.colorScheme.secondary,
@@ -777,14 +710,14 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
? SliverList.builder( ? SliverList.builder(
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (index == response.length) { if (index == response.length) {
_dynamicDetailController.onLoadMore(); _controller.onLoadMore();
return Container( return Container(
alignment: Alignment.center, alignment: Alignment.center,
margin: EdgeInsets.only( margin: EdgeInsets.only(
bottom: MediaQuery.of(context).padding.bottom), bottom: MediaQuery.of(context).padding.bottom),
height: 125, height: 125,
child: Text( child: Text(
_dynamicDetailController.isEnd ? '没有更多了' : '加载中...', _controller.isEnd ? '没有更多了' : '加载中...',
style: TextStyle( style: TextStyle(
fontSize: 12, fontSize: 12,
color: theme.colorScheme.outline, color: theme.colorScheme.outline,
@@ -798,23 +731,22 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
replyReply: (replyItem, id) => replyReply: (replyItem, id) =>
replyReply(context, replyItem, id), replyReply(context, replyItem, id),
onReply: () { onReply: () {
_dynamicDetailController.onReply( _controller.onReply(
context, context,
replyItem: response[index], replyItem: response[index],
index: index, index: index,
); );
}, },
onDelete: (subIndex) => onDelete: (subIndex) =>
_dynamicDetailController.onRemove(index, subIndex), _controller.onRemove(index, subIndex),
upMid: _dynamicDetailController.upMid, upMid: _controller.upMid,
callback: _getImageCallback, callback: _getImageCallback,
onCheckReply: (item) => onCheckReply: (item) =>
_dynamicDetailController.onCheckReply(context, item), _controller.onCheckReply(context, item),
onToggleTop: (isUpTop, rpid) => onToggleTop: (isUpTop, rpid) => _controller.onToggleTop(
_dynamicDetailController.onToggleTop(
index, index,
_dynamicDetailController.oid, _controller.oid,
_dynamicDetailController.type, _controller.replyType,
isUpTop, isUpTop,
rpid, rpid,
), ),
@@ -824,11 +756,11 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
itemCount: response!.length + 1, itemCount: response!.length + 1,
) )
: HttpError( : HttpError(
onReload: _dynamicDetailController.onReload, onReload: _controller.onReload,
), ),
Error(:var errMsg) => HttpError( Error(:var errMsg) => HttpError(
errMsg: errMsg, errMsg: errMsg,
onReload: _dynamicDetailController.onReload, onReload: _controller.onReload,
), ),
}; };
} }

View File

@@ -284,8 +284,6 @@ class PageUtils {
'/dynamicDetail', '/dynamicDetail',
arguments: { arguments: {
'item': res['data'], 'item': res['data'],
'floor': 1,
'action': 'detail',
}, },
off: off, off: off,
); );
@@ -350,16 +348,25 @@ class PageUtils {
{action = 'all'}) async { {action = 'all'}) async {
feedBack(); feedBack();
void push() {
var commentType = item.basic?.commentType;
if (commentType != null &&
commentType != 0 &&
item.basic?.commentIdStr?.isNotEmpty == true) {
toDupNamed(
'/dynamicDetail',
arguments: {
'item': item,
},
);
} else {
pushDynFromId(id: item.idStr);
}
}
/// 点击评论action 直接查看评论 /// 点击评论action 直接查看评论
if (action == 'comment') { if (action == 'comment') {
toDupNamed( push();
'/dynamicDetail',
arguments: {
'item': item,
'floor': floor,
'action': action,
},
);
return; return;
} }
@@ -496,18 +503,7 @@ class PageUtils {
// 图文动态查看 // 图文动态查看
// case 'DYNAMIC_TYPE_DRAW': // case 'DYNAMIC_TYPE_DRAW':
default: default:
if (item.basic?.commentIdStr?.isNotEmpty == true) { push();
toDupNamed(
'/dynamicDetail',
arguments: {
'item': item,
'floor': floor,
},
);
} else {
pushDynFromId(id: item.idStr);
}
break; break;
} }
} }