opt: mapIndexed

This commit is contained in:
My-Responsitories
2026-06-23 18:15:44 +08:00
parent 9660d74a80
commit 9d6d3d524c
7 changed files with 54 additions and 53 deletions

View File

@@ -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'),
],
);

View File

@@ -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<LiveDmBlockPage> {
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),
),
);
},

View File

@@ -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<LiveHeaderControl>
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<LiveHeaderControl>
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<LiveHeaderControl>
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<LiveHeaderControl>
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<LiveHeaderControl>
: () {
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!,
],
);
},

View File

@@ -17,6 +17,7 @@ class _BarSetPageState extends State<BarSetPage> with ReorderMixin {
late final String key;
late final String title;
late final List<Pair<EnumWithLabel, bool>> list;
late EdgeInsets padding;
@override
void initState() {
@@ -29,7 +30,7 @@ class _BarSetPageState extends State<BarSetPage> 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<BarSetPage> 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<BarSetPage> 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('*长按拖动排序'),

View File

@@ -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<ColorSelectPage> {
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: () {