diff --git a/lib/pages/dynamics/controller.dart b/lib/pages/dynamics/controller.dart index 5b524510..4ab06faa 100644 --- a/lib/pages/dynamics/controller.dart +++ b/lib/pages/dynamics/controller.dart @@ -162,6 +162,9 @@ class DynamicsController extends GetxController { /// 纯文字动态查看 case 'DYNAMIC_TYPE_WORD': print('纯文本'); + if (item.modules.moduleDynamic.major.draw == null) { + return; + } Get.toNamed('/dynamicDetail', arguments: {'item': item, 'floor': floor}); break; diff --git a/lib/pages/dynamics/widgets/forward_panel.dart b/lib/pages/dynamics/widgets/forward_panel.dart index 77734779..5a8d9f17 100644 --- a/lib/pages/dynamics/widgets/forward_panel.dart +++ b/lib/pages/dynamics/widgets/forward_panel.dart @@ -137,7 +137,12 @@ Widget forWard(item, context, ctr, source, {floor = 1}) { ], ), const SizedBox(height: 8), - Text(item.modules.moduleDynamic.desc.text) + Text.rich( + richNode(item, context), + // 被转发状态(floor=2) 隐藏 + maxLines: source == 'detail' && floor != 2 ? 999 : 4, + overflow: TextOverflow.ellipsis, + ), ], ) : item.modules.moduleDynamic.additional != null diff --git a/lib/pages/dynamics/widgets/rich_node_panel.dart b/lib/pages/dynamics/widgets/rich_node_panel.dart index 5d22c597..a0f3e619 100644 --- a/lib/pages/dynamics/widgets/rich_node_panel.dart +++ b/lib/pages/dynamics/widgets/rich_node_panel.dart @@ -26,7 +26,7 @@ InlineSpan richNode(item, context) { } else { for (var i in richTextNodes) { /// fix 渲染专栏时内容会重复 - if (item.modules.moduleDynamic.major.opus.title == null && + if (item.modules.moduleDynamic.major?.opus?.title == null && i.type == 'RICH_TEXT_NODE_TYPE_TEXT') { spanChilds.add( TextSpan(text: i.origText, style: const TextStyle(height: 1.65))); @@ -192,113 +192,116 @@ InlineSpan richNode(item, context) { ); } } - if (contentType == 'major' && - item.modules.moduleDynamic.major.opus.pics.isNotEmpty) { - // 图片可能跟其他widget重复渲染 - print('有图片'); - List pics = item.modules.moduleDynamic.major.opus.pics; - int len = pics.length; - List picList = []; + try { + if (contentType == 'major' && + item.modules.moduleDynamic.major.opus.pics.isNotEmpty) { + // 图片可能跟其他widget重复渲染 + List pics = item.modules.moduleDynamic.major.opus.pics; + int len = pics.length; + List picList = []; - if (len == 1) { - OpusPicsModel pictureItem = pics.first; - picList.add(pictureItem.url); - spanChilds.add(const TextSpan(text: '\n')); - spanChilds.add( - WidgetSpan( - child: LayoutBuilder( - builder: (context, BoxConstraints box) { - return GestureDetector( - onTap: () { - Get.toNamed('/preview', - arguments: {'initialPage': 0, 'imgList': picList}); - }, - child: Padding( - padding: const EdgeInsets.only(top: 4), - child: NetworkImgLayer( - src: pictureItem.url, - width: box.maxWidth / 2, - height: box.maxWidth * - 0.5 * - pictureItem.height! / - pictureItem.width!, + if (len == 1) { + OpusPicsModel pictureItem = pics.first; + picList.add(pictureItem.url); + spanChilds.add(const TextSpan(text: '\n')); + spanChilds.add( + WidgetSpan( + child: LayoutBuilder( + builder: (context, BoxConstraints box) { + return GestureDetector( + onTap: () { + Get.toNamed('/preview', + arguments: {'initialPage': 0, 'imgList': picList}); + }, + child: Padding( + padding: const EdgeInsets.only(top: 4), + child: NetworkImgLayer( + src: pictureItem.url, + width: box.maxWidth / 2, + height: box.maxWidth * + 0.5 * + pictureItem.height! / + pictureItem.width!, + ), ), - ), - ); - }, - ), - ), - ); - } - if (len > 1) { - List list = []; - for (var i = 0; i < len; i++) { - picList.add(pics[i].url); - list.add( - LayoutBuilder( - builder: (context, BoxConstraints box) { - return GestureDetector( - onTap: () { - Get.toNamed('/preview', - arguments: {'initialPage': i, 'imgList': picList}); - }, - child: NetworkImgLayer( - src: pics[i].url, - width: box.maxWidth, - height: box.maxWidth, - ), - ); - }, + ); + }, + ), ), ); } - spanChilds.add( - WidgetSpan( - child: LayoutBuilder( - builder: (context, BoxConstraints box) { - double maxWidth = box.maxWidth; - double crossCount = len < 3 ? 2 : 3; - double height = maxWidth / - crossCount * - (len % crossCount == 0 - ? len ~/ crossCount - : len ~/ crossCount + 1) + - 6; - return Container( - padding: const EdgeInsets.only(top: 6), - height: height, - child: GridView.count( - padding: EdgeInsets.zero, - physics: const NeverScrollableScrollPhysics(), - crossAxisCount: crossCount.toInt(), - mainAxisSpacing: 4.0, - crossAxisSpacing: 4.0, - childAspectRatio: 1, - children: list, - ), - ); - }, + if (len > 1) { + List list = []; + for (var i = 0; i < len; i++) { + picList.add(pics[i].url); + list.add( + LayoutBuilder( + builder: (context, BoxConstraints box) { + return GestureDetector( + onTap: () { + Get.toNamed('/preview', + arguments: {'initialPage': i, 'imgList': picList}); + }, + child: NetworkImgLayer( + src: pics[i].url, + width: box.maxWidth, + height: box.maxWidth, + ), + ); + }, + ), + ); + } + spanChilds.add( + WidgetSpan( + child: LayoutBuilder( + builder: (context, BoxConstraints box) { + double maxWidth = box.maxWidth; + double crossCount = len < 3 ? 2 : 3; + double height = maxWidth / + crossCount * + (len % crossCount == 0 + ? len ~/ crossCount + : len ~/ crossCount + 1) + + 6; + return Container( + padding: const EdgeInsets.only(top: 6), + height: height, + child: GridView.count( + padding: EdgeInsets.zero, + physics: const NeverScrollableScrollPhysics(), + crossAxisCount: crossCount.toInt(), + mainAxisSpacing: 4.0, + crossAxisSpacing: 4.0, + childAspectRatio: 1, + children: list, + ), + ); + }, + ), ), - ), - ); + ); + } + // spanChilds.add( + // WidgetSpan( + // child: NetworkImgLayer( + // src: pics.first.url, + // type: 'emote', + // width: 100, + // height: 200, + // ), + // ), + // ); } - // spanChilds.add( - // WidgetSpan( - // child: NetworkImgLayer( - // src: pics.first.url, - // type: 'emote', - // width: 100, - // height: 200, - // ), - // ), - // ); + } catch (err) { + print('❌rich_node_panel err: $err'); } return TextSpan( children: spanChilds, ); } } catch (err) { - print('❌rich_node_panel err: $err'); + print('❌❌rich_node_panel err: $err'); return spacer; } }