diff --git a/lib/models/video/play/url.dart b/lib/models/video/play/url.dart index c3109467..26363663 100644 --- a/lib/models/video/play/url.dart +++ b/lib/models/video/play/url.dart @@ -128,7 +128,8 @@ class VideoItem { VideoItem.fromJson(Map json) { id = json['id']; baseUrl = json['baseUrl']; - backupUrl = json['backupUrl'].toList().first; + backupUrl = + json['backupUrl'] != null ? json['backupUrl'].toList().first : ''; bandWidth = json['bandWidth']; mimeType = json['mime_type']; codecs = json['codecs']; @@ -179,7 +180,8 @@ class AudioItem { AudioItem.fromJson(Map json) { id = json['id']; baseUrl = json['baseUrl']; - backupUrl = json['backupUrl'].toList().first; + backupUrl = + json['backupUrl'] != null ? json['backupUrl'].toList().first : ''; bandWidth = json['bandWidth']; mimeType = json['mime_type']; codecs = json['codecs']; diff --git a/lib/pages/dynamics/widgets/article_panel.dart b/lib/pages/dynamics/widgets/article_panel.dart index 7220643e..e68d966d 100644 --- a/lib/pages/dynamics/widgets/article_panel.dart +++ b/lib/pages/dynamics/widgets/article_panel.dart @@ -42,13 +42,17 @@ Widget articlePanel(item, context, {floor = 1}) { .copyWith(fontWeight: FontWeight.bold), ), const SizedBox(height: 2), - if (item.modules.moduleDynamic.major.opus.summary.text != 'undefined') + if (item.modules.moduleDynamic.major.opus.summary.text != + 'undefined') ...[ Text( item.modules.moduleDynamic.major.opus.summary.richTextNodes.first .text, maxLines: 4, + style: const TextStyle(height: 1.55), overflow: TextOverflow.ellipsis, ), + const SizedBox(height: 2), + ], picWidget(item, context) ], ), diff --git a/lib/pages/dynamics/widgets/pic_panel.dart b/lib/pages/dynamics/widgets/pic_panel.dart index a56ac8f7..9ee8be53 100644 --- a/lib/pages/dynamics/widgets/pic_panel.dart +++ b/lib/pages/dynamics/widgets/pic_panel.dart @@ -44,27 +44,25 @@ Widget picWidget(item, context) { double maxWidth = box.maxWidth; double aspectRatio = 1.0; double origAspectRatio = 0.0; - double crossCount = len == 1 - ? 1 - : len < 3 - ? 2 - : 3; + double crossCount = 3; double height = 0.0; if (len == 1) { - origAspectRatio = - aspectRatio = pictures.first.width / pictures.first.height; + try { + origAspectRatio = + aspectRatio = pictures.first.width / pictures.first.height; + } catch (_) {} if (aspectRatio < 0.4) { aspectRatio = 0.4; } - height = pictures.first.height * maxWidth / pictures.first.width; if (origAspectRatio < 0.5 || pictures.first.width < 1920) { crossCount = 2; height = maxWidth / 2 / aspectRatio; } } else { aspectRatio = 1; - height = maxWidth / crossCount * ((len / crossCount).ceil()) + 6; + height = + maxWidth / crossCount * ((len + crossCount - 1) ~/ crossCount) + 6; } return Container( padding: const EdgeInsets.only(top: 4), diff --git a/lib/pages/searchPanel/controller.dart b/lib/pages/searchPanel/controller.dart index 399df1e1..85952e90 100644 --- a/lib/pages/searchPanel/controller.dart +++ b/lib/pages/searchPanel/controller.dart @@ -56,9 +56,19 @@ class SearchPanelController extends GetxController { // 匹配输入内容,如果是AV、BV号且有结果 直接跳转详情页 Map matchRes = IdUtils.matchAvorBv(input: keyword); List matchKeys = matchRes.keys.toList(); - String bvid = resultList.first.bvid; + String? bvid; + try { + bvid = resultList.first.bvid; + } catch (_) { + bvid = null; + } // keyword 可能输入纯数字 - int aid = resultList.first.aid; + int? aid; + try { + aid = resultList.first.aid; + } catch (_) { + aid = null; + } if (matchKeys.isNotEmpty && searchType == SearchType.video || aid.toString() == keyword) { String heroTag = Utils.makeHeroTag(bvid);