diff --git a/lib/common/widgets/avatars.dart b/lib/common/widgets/avatars.dart index c49db91af..4fc165d18 100644 --- a/lib/common/widgets/avatars.dart +++ b/lib/common/widgets/avatars.dart @@ -1,5 +1,6 @@ import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models/model_owner.dart'; +import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; Widget avatars({ @@ -28,19 +29,19 @@ Widget avatars({ width: offset * users.length + gap, child: Stack( clipBehavior: .none, - children: users.indexed - .map( - (e) => Positioned( + children: users + .mapIndexed( + (i, e) => Positioned( top: 0, bottom: 0, width: size, - left: e.$1 * offset, + left: i * offset, child: DecoratedBox( decoration: decoration, child: Padding( padding: const .all(padding), child: NetworkImgLayer( - src: e.$2.face, + src: e.face, width: imgSize, height: imgSize, type: .avatar, diff --git a/lib/pages/article/widgets/opus_content.dart b/lib/pages/article/widgets/opus_content.dart index 869882c8a..e6257447b 100644 --- a/lib/pages/article/widgets/opus_content.dart +++ b/lib/pages/article/widgets/opus_content.dart @@ -19,6 +19,7 @@ import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/image_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:cached_network_image_ce/cached_network_image.dart'; +import 'package:collection/collection.dart'; import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/material.dart'; import 'package:get/get_core/src/get_main.dart'; @@ -273,14 +274,14 @@ class OpusContent extends StatelessWidget { case 5 when (element.list != null): return SelectableText.rich( TextSpan( - children: element.list!.items?.indexed.map((entry) { + children: element.list!.items?.mapIndexed((i, entry) { return TextSpan( children: [ const WidgetSpan( child: Icon(MdiIcons.circleMedium), alignment: .middle, ), - ...entry.$2.nodes!.map((item) { + ...entry.nodes!.map((item) { if (item.word != null) { return _getSpan( item.word, @@ -307,7 +308,7 @@ class OpusContent extends StatelessWidget { } return const TextSpan(); }), - if (entry.$1 < element.list!.items!.length - 1) + if (i < element.list!.items!.length - 1) const TextSpan(text: '\n'), ], ); diff --git a/lib/pages/live_dm_block/view.dart b/lib/pages/live_dm_block/view.dart index f0dfbbc4b..d8a4d519f 100644 --- a/lib/pages/live_dm_block/view.dart +++ b/lib/pages/live_dm_block/view.dart @@ -9,6 +9,7 @@ import 'package:PiliPlus/pages/live_dm_block/controller.dart'; import 'package:PiliPlus/pages/search/widgets/search_text.dart'; import 'package:PiliPlus/utils/extension/size_ext.dart'; import 'package:PiliPlus/utils/utils.dart'; +import 'package:collection/collection.dart'; import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart' show FilteringTextInputFormatter; @@ -168,15 +169,14 @@ class _LiveDmBlockPageState extends State { child: Wrap( spacing: 12, runSpacing: 12, - children: list.indexed.map( - (e) { - final item = e.$2; + children: list.mapIndexed( + (i, e) { return SearchText( - text: item is ShieldUserList ? item.uname! : item as String, + text: e is ShieldUserList ? e.uname! : e as String, onTap: (value) => showConfirmDialog( context: context, title: const Text('确定删除该规则?'), - onConfirm: () => _controller.onRemove(e.$1, item), + onConfirm: () => _controller.onRemove(i, e), ), ); }, diff --git a/lib/pages/live_room/widgets/header_control.dart b/lib/pages/live_room/widgets/header_control.dart index e19817126..911758fc1 100644 --- a/lib/pages/live_room/widgets/header_control.dart +++ b/lib/pages/live_room/widgets/header_control.dart @@ -20,6 +20,7 @@ import 'package:PiliPlus/utils/extension/string_ext.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage_key.dart'; +import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:get/get.dart'; @@ -357,9 +358,8 @@ class _LiveHeaderControlState extends State padding: .only( bottom: MediaQuery.viewPaddingOf(context).bottom + 100, ), - children: controller.stream.indexed.map((stream) { - final isCurrStream = - stream.$1 == controller.streamIndex; + children: controller.stream.mapIndexed((si, stream) { + final isCurrStream = si == controller.streamIndex; final streamColor = isCurrStream ? secondary : onSurfaceVariant; @@ -368,15 +368,14 @@ class _LiveHeaderControlState extends State iconColor: streamColor, collapsedIconColor: streamColor, title: Text( - stream.$2.protocolName ?? stream.$1.toString(), + stream.protocolName ?? si.toString(), style: isCurrStream ? currStyle : const TextStyle(fontSize: 14), ), - children: stream.$2.format.indexed.map((format) { + children: stream.format.mapIndexed((fi, format) { final isCurrFormat = - isCurrStream && - format.$1 == controller.formatIndex; + isCurrStream && fi == controller.formatIndex; final formatColor = isCurrFormat ? secondary : onSurfaceVariant; @@ -385,16 +384,14 @@ class _LiveHeaderControlState extends State iconColor: formatColor, collapsedIconColor: formatColor, title: Text( - format.$2.formatName ?? format.$1.toString(), + format.formatName ?? fi.toString(), style: isCurrFormat ? currStyle : const TextStyle(fontSize: 14), ), - children: format.$2.codec.indexed.map((codec) { - final e = codec.$2; + children: format.codec.mapIndexed((ci, codec) { final isCurrCodec = - isCurrFormat && - codec.$1 == controller.codecIndex; + isCurrFormat && ci == controller.codecIndex; final codecColor = isCurrCodec ? secondary : onSurfaceVariant; @@ -403,19 +400,19 @@ class _LiveHeaderControlState extends State iconColor: codecColor, collapsedIconColor: codecColor, title: Text( - '${e.codecName ?? codec.$1.toString()} (${LiveQuality.fromCode(e.currentQn)?.desc ?? e.currentQn})', + '${codec.codecName ?? ci.toString()} (${LiveQuality.fromCode(codec.currentQn)?.desc ?? codec.currentQn})', style: isCurrCodec ? currStyle : const TextStyle(fontSize: 14), ), - children: e.urlInfo.indexed.map((url) { + children: codec.urlInfo.mapIndexed((ui, url) { final isCurrUrl = - (isCurrCodec && - url.$1 == controller.liveUrlIndex); + isCurrCodec && + ui == controller.liveUrlIndex; return ListTile( dense: true, title: Text( - '${url.$2.host}${e.baseUrl}...', + '${url.host}...', style: isCurrUrl ? const TextStyle(fontSize: 14) : TextStyle( @@ -429,17 +426,17 @@ class _LiveHeaderControlState extends State : () { Get.back(); controller.initLiveUrl( - streamIndex: stream.$1, - formatIndex: format.$1, - codecIndex: codec.$1, - liveUrlIndex: url.$1, + streamIndex: si, + formatIndex: fi, + codecIndex: ci, + liveUrlIndex: ui, ); GStorage.setting.put( SettingBoxKey.liveStream, [ - stream.$2.protocolName, - format.$2.formatName, - codec.$2.codecName, + stream.protocolName!, + format.formatName!, + codec.codecName!, ], ); }, diff --git a/lib/pages/setting/pages/bar_set.dart b/lib/pages/setting/pages/bar_set.dart index 7c2635ab2..422fdfb4f 100644 --- a/lib/pages/setting/pages/bar_set.dart +++ b/lib/pages/setting/pages/bar_set.dart @@ -17,6 +17,7 @@ class _BarSetPageState extends State with ReorderMixin { late final String key; late final String title; late final List> list; + late EdgeInsets padding; @override void initState() { @@ -29,7 +30,7 @@ class _BarSetPageState extends State with ReorderMixin { .map((e) => Pair(first: e, second: cache?.contains(e.index) ?? true)) .toList(); if (cache != null && cache.isNotEmpty) { - final cacheIndex = {for (final (k, v) in cache.indexed) v: k}; + final cacheIndex = {for (int i = 0; i < cache.length; i++) cache[i]: i}; list.sort((a, b) { final indexA = cacheIndex[a.first.index] ?? cacheIndex.length; final indexB = cacheIndex[b.first.index] ?? cacheIndex.length; @@ -38,6 +39,13 @@ class _BarSetPageState extends State with ReorderMixin { } } + @override + void didChangeDependencies() { + super.didChangeDependencies(); + final viewPad = MediaQuery.viewPaddingOf(context); + padding = .only(top: 10, right: viewPad.right + 34, bottom: viewPad.bottom); + } + void saveEdit() { GStorage.setting.put( key, @@ -73,9 +81,7 @@ class _BarSetPageState extends State with ReorderMixin { onReorderItem: onReorderItem, proxyDecorator: proxyDecorator, footer: Padding( - padding: - MediaQuery.viewPaddingOf(context).copyWith(top: 0, left: 0) + - const EdgeInsets.only(right: 34, top: 10), + padding: padding, child: const Align( alignment: Alignment.centerRight, child: Text('*长按拖动排序'), diff --git a/lib/pages/setting/pages/color_select.dart b/lib/pages/setting/pages/color_select.dart index 6aa14fe3b..b80766ea9 100644 --- a/lib/pages/setting/pages/color_select.dart +++ b/lib/pages/setting/pages/color_select.dart @@ -15,6 +15,7 @@ import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage_key.dart'; import 'package:PiliPlus/utils/storage_pref.dart'; import 'package:PiliPlus/utils/theme_utils.dart'; +import 'package:collection/collection.dart'; import 'package:flex_seed_scheme/flex_seed_scheme.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -148,10 +149,8 @@ class _ColorSelectPageState extends State { alignment: WrapAlignment.center, spacing: 22, runSpacing: 18, - children: colorThemeTypes.indexed.map( - (e) { - final index = e.$1; - final item = e.$2; + children: colorThemeTypes.mapIndexed( + (index, item) { return GestureDetector( behavior: HitTestBehavior.opaque, onTap: () { diff --git a/lib/plugin/pl_player/view/view.dart b/lib/plugin/pl_player/view/view.dart index 901add55e..88a17ab68 100644 --- a/lib/plugin/pl_player/view/view.dart +++ b/lib/plugin/pl_player/view/view.dart @@ -724,19 +724,16 @@ class _PLVideoPlayerState extends State ), ), ), - ...videoDetailController.subtitles.indexed.map((e) { + ...videoDetailController.subtitles.mapIndexed((i, e) { return PopupMenuItem( - value: e.$1 + 1, + value: i + 1, height: 35, - onTap: () => videoDetailController.setSubtitle(e.$1 + 1), + onTap: () => videoDetailController.setSubtitle(i + 1), child: Text( - "${e.$2.lanDoc}", + e.lanDoc ?? e.lan, maxLines: 1, overflow: TextOverflow.ellipsis, - style: const TextStyle( - color: Colors.white, - fontSize: 13, - ), + style: const .new(color: Colors.white, fontSize: 13), ), ); }),