mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
mod: dynamic panel (#738)
This commit is contained in:
committed by
GitHub
parent
7bb0307e6a
commit
e0fe16fd14
@@ -775,4 +775,6 @@ class Api {
|
|||||||
'${HttpString.appBaseUrl}/x/v2/search/recommend';
|
'${HttpString.appBaseUrl}/x/v2/search/recommend';
|
||||||
|
|
||||||
static const String articleInfo = '/x/article/viewinfo';
|
static const String articleInfo = '/x/article/viewinfo';
|
||||||
|
|
||||||
|
static const String dynamicReport = '/x/dynamic/feed/dynamic_report/add';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -666,4 +666,28 @@ class UserHttp {
|
|||||||
return {'status': false, 'msg': res.data['message']};
|
return {'status': false, 'msg': res.data['message']};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Future<Map> dynamicReport({
|
||||||
|
required dynamic mid,
|
||||||
|
required dynamic dynId,
|
||||||
|
required int reasonType,
|
||||||
|
String? reasonDesc,
|
||||||
|
}) async {
|
||||||
|
final res = await Request().post(
|
||||||
|
Api.dynamicReport,
|
||||||
|
queryParameters: {
|
||||||
|
'csrf': Accounts.main.csrf,
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
"accused_uid": mid,
|
||||||
|
"dynamic_id": dynId,
|
||||||
|
"reason_type": reasonType,
|
||||||
|
"reason_desc": reasonType == 0 ? reasonDesc : null,
|
||||||
|
},
|
||||||
|
options: Options(
|
||||||
|
contentType: Headers.formUrlEncodedContentType,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
return res.data as Map;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,13 +3,11 @@ import 'dart:math';
|
|||||||
import 'package:PiliPlus/common/widgets/avatar.dart';
|
import 'package:PiliPlus/common/widgets/avatar.dart';
|
||||||
import 'package:PiliPlus/common/widgets/report.dart';
|
import 'package:PiliPlus/common/widgets/report.dart';
|
||||||
import 'package:PiliPlus/common/widgets/save_panel.dart';
|
import 'package:PiliPlus/common/widgets/save_panel.dart';
|
||||||
import 'package:PiliPlus/http/index.dart';
|
|
||||||
import 'package:PiliPlus/http/video.dart';
|
import 'package:PiliPlus/http/video.dart';
|
||||||
import 'package:PiliPlus/utils/extension.dart';
|
import 'package:PiliPlus/utils/extension.dart';
|
||||||
import 'package:PiliPlus/utils/request_utils.dart';
|
import 'package:PiliPlus/utils/request_utils.dart';
|
||||||
import 'package:PiliPlus/utils/storage.dart';
|
import 'package:PiliPlus/utils/storage.dart';
|
||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:dio/dio.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
@@ -213,7 +211,23 @@ class AuthorPanel extends StatelessWidget {
|
|||||||
style: ButtonStyle(
|
style: ButtonStyle(
|
||||||
padding: WidgetStateProperty.all(EdgeInsets.zero),
|
padding: WidgetStateProperty.all(EdgeInsets.zero),
|
||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () => morePanel(context),
|
||||||
|
icon: const Icon(Icons.more_vert_outlined, size: 18),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
void morePanel(BuildContext context) {
|
||||||
|
String? bvid;
|
||||||
|
getBvid(String? type, dynamic major) => switch (type) {
|
||||||
|
'DYNAMIC_TYPE_AV' => major?.archive?.bvid,
|
||||||
|
'DYNAMIC_TYPE_UGC_SEASON' => major?.ugcSeason?.bvid,
|
||||||
|
_ => null,
|
||||||
|
};
|
||||||
|
bvid = getBvid(item.type, item.modules?.moduleDynamic?.major);
|
||||||
|
if (bvid == null && item.orig != null) {
|
||||||
|
bvid = getBvid(item.type, item.orig?.modules?.moduleDynamic?.major);
|
||||||
|
}
|
||||||
|
|
||||||
showModalBottomSheet(
|
showModalBottomSheet(
|
||||||
context: context,
|
context: context,
|
||||||
useSafeArea: true,
|
useSafeArea: true,
|
||||||
@@ -222,37 +236,9 @@ class AuthorPanel extends StatelessWidget {
|
|||||||
maxWidth: min(640, min(Get.width, Get.height)),
|
maxWidth: min(640, min(Get.width, Get.height)),
|
||||||
),
|
),
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return morePanel(context);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
},
|
|
||||||
icon: const Icon(Icons.more_vert_outlined, size: 18),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
Widget morePanel(context) {
|
|
||||||
String? bvid;
|
|
||||||
try {
|
|
||||||
bvid = switch (item.type) {
|
|
||||||
'DYNAMIC_TYPE_AV' => item.modules.moduleDynamic.major.archive.bvid,
|
|
||||||
'DYNAMIC_TYPE_UGC_SEASON' =>
|
|
||||||
item.modules.moduleDynamic.major.ugcSeason.bvid,
|
|
||||||
_ => null,
|
|
||||||
};
|
|
||||||
} catch (_) {}
|
|
||||||
if (bvid == null && item.orig != null) {
|
|
||||||
try {
|
|
||||||
bvid = switch (item.orig.type) {
|
|
||||||
'DYNAMIC_TYPE_AV' =>
|
|
||||||
item.orig.modules.moduleDynamic.major.archive.bvid,
|
|
||||||
'DYNAMIC_TYPE_UGC_SEASON' =>
|
|
||||||
item.orig.modules.moduleDynamic.major.ugcSeason.bvid,
|
|
||||||
_ => null,
|
|
||||||
};
|
|
||||||
} catch (_) {}
|
|
||||||
}
|
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom),
|
padding:
|
||||||
|
EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom),
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
@@ -271,7 +257,8 @@ class AuthorPanel extends StatelessWidget {
|
|||||||
height: 3,
|
height: 3,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: Theme.of(context).colorScheme.outline,
|
color: Theme.of(context).colorScheme.outline,
|
||||||
borderRadius: const BorderRadius.all(Radius.circular(3))),
|
borderRadius:
|
||||||
|
const BorderRadius.all(Radius.circular(3))),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -314,47 +301,49 @@ class AuthorPanel extends StatelessWidget {
|
|||||||
},
|
},
|
||||||
minLeadingWidth: 0,
|
minLeadingWidth: 0,
|
||||||
leading: const Icon(Icons.save_alt, size: 19),
|
leading: const Icon(Icons.save_alt, size: 19),
|
||||||
title: Text('保存动态', style: Theme.of(context).textTheme.titleSmall!),
|
title: Text('保存动态',
|
||||||
|
style: Theme.of(context).textTheme.titleSmall!),
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text(
|
title: Text(
|
||||||
'临时屏蔽:${item.modules.moduleAuthor.name}',
|
'临时屏蔽:${item.modules?.moduleAuthor?.name}',
|
||||||
style: Theme.of(context).textTheme.titleSmall,
|
style: Theme.of(context).textTheme.titleSmall,
|
||||||
),
|
),
|
||||||
leading: const Icon(Icons.visibility_off_outlined, size: 19),
|
leading: const Icon(Icons.visibility_off_outlined, size: 19),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Get.back();
|
Get.back();
|
||||||
DynamicsController dynamicsController =
|
Get.find<DynamicsController>()
|
||||||
Get.find<DynamicsController>();
|
.tempBannedList
|
||||||
dynamicsController.tempBannedList
|
.add(item.modules!.moduleAuthor!.mid!);
|
||||||
.add(item.modules.moduleAuthor.mid);
|
|
||||||
SmartDialog.showToast(
|
SmartDialog.showToast(
|
||||||
'已临时屏蔽${item.modules.moduleAuthor.name}(${item.modules.moduleAuthor.mid}),重启恢复');
|
'已临时屏蔽${item.modules?.moduleAuthor?.name}(${item.modules!.moduleAuthor!.mid}),重启恢复');
|
||||||
},
|
},
|
||||||
minLeadingWidth: 0,
|
minLeadingWidth: 0,
|
||||||
),
|
),
|
||||||
if (item.modules.moduleAuthor.mid == Accounts.main.mid) ...[
|
if (item.modules?.moduleAuthor?.mid == Accounts.main.mid) ...[
|
||||||
ListTile(
|
ListTile(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Get.back();
|
Get.back();
|
||||||
RequestUtils.checkCreatedDyn(id: item.idStr, isManual: true);
|
RequestUtils.checkCreatedDyn(
|
||||||
|
id: item.idStr, isManual: true);
|
||||||
},
|
},
|
||||||
minLeadingWidth: 0,
|
minLeadingWidth: 0,
|
||||||
leading: Stack(
|
leading: const Stack(
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
children: [
|
children: [
|
||||||
const Icon(Icons.shield_outlined, size: 19),
|
Icon(Icons.shield_outlined, size: 19),
|
||||||
const Icon(Icons.published_with_changes_sharp, size: 12),
|
Icon(Icons.published_with_changes_sharp, size: 12),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
title:
|
title: Text('检查动态',
|
||||||
Text('检查动态', style: Theme.of(context).textTheme.titleSmall!),
|
style: Theme.of(context).textTheme.titleSmall!),
|
||||||
),
|
),
|
||||||
if (onSetTop != null)
|
if (onSetTop != null)
|
||||||
ListTile(
|
ListTile(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Get.back();
|
Get.back();
|
||||||
onSetTop!(item.modules?.moduleTag?.text != null, item.idStr);
|
onSetTop!(
|
||||||
|
item.modules?.moduleTag?.text != null, item.idStr);
|
||||||
},
|
},
|
||||||
minLeadingWidth: 0,
|
minLeadingWidth: 0,
|
||||||
leading: const Icon(Icons.vertical_align_top, size: 19),
|
leading: const Icon(Icons.vertical_align_top, size: 19),
|
||||||
@@ -395,10 +384,8 @@ class AuthorPanel extends StatelessWidget {
|
|||||||
leading: Icon(Icons.delete_outline,
|
leading: Icon(Icons.delete_outline,
|
||||||
color: Theme.of(context).colorScheme.error, size: 19),
|
color: Theme.of(context).colorScheme.error, size: 19),
|
||||||
title: Text('删除',
|
title: Text('删除',
|
||||||
style: Theme.of(context)
|
style: Theme.of(context).textTheme.titleSmall!.copyWith(
|
||||||
.textTheme
|
color: Theme.of(context).colorScheme.error)),
|
||||||
.titleSmall!
|
|
||||||
.copyWith(color: Theme.of(context).colorScheme.error)),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
if (Accounts.main.isLogin)
|
if (Accounts.main.isLogin)
|
||||||
@@ -419,30 +406,19 @@ class AuthorPanel extends StatelessWidget {
|
|||||||
autoWrapReportDialog(
|
autoWrapReportDialog(
|
||||||
context,
|
context,
|
||||||
ReportOptions.dynamicReport,
|
ReportOptions.dynamicReport,
|
||||||
(reasonType, reasonDesc, banUid) async {
|
(reasonType, reasonDesc, banUid) {
|
||||||
if (banUid) {
|
if (banUid) {
|
||||||
VideoHttp.relationMod(
|
VideoHttp.relationMod(
|
||||||
mid: item.modules.moduleAuthor.mid,
|
mid: item.modules!.moduleAuthor!.mid!,
|
||||||
act: 5,
|
act: 5,
|
||||||
reSrc: 11,
|
reSrc: 11,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
final res = await Request().post(
|
return UserHttp.dynamicReport(
|
||||||
'/x/dynamic/feed/dynamic_report/add',
|
mid: item.modules!.moduleAuthor!.mid,
|
||||||
queryParameters: {
|
dynId: item.idStr,
|
||||||
'csrf': Accounts.main.csrf,
|
reasonType: reasonType,
|
||||||
},
|
|
||||||
data: {
|
|
||||||
"accused_uid": item.modules.moduleAuthor.mid,
|
|
||||||
"dynamic_id": item.idStr,
|
|
||||||
"reason_type": reasonType,
|
|
||||||
"reason_desc": reasonType == 0 ? reasonDesc : null,
|
|
||||||
},
|
|
||||||
options: Options(
|
|
||||||
contentType: Headers.formUrlEncodedContentType,
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
return res.data as Map;
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@@ -455,12 +431,15 @@ class AuthorPanel extends StatelessWidget {
|
|||||||
dense: true,
|
dense: true,
|
||||||
title: Text(
|
title: Text(
|
||||||
'取消',
|
'取消',
|
||||||
style: TextStyle(color: Theme.of(context).colorScheme.outline),
|
style:
|
||||||
|
TextStyle(color: Theme.of(context).colorScheme.outline),
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'package:PiliPlus/common/widgets/image_save.dart';
|
import 'package:PiliPlus/common/widgets/image_save.dart';
|
||||||
|
import 'package:PiliPlus/models/dynamics/result.dart';
|
||||||
import 'package:PiliPlus/utils/extension.dart';
|
import 'package:PiliPlus/utils/extension.dart';
|
||||||
import 'package:PiliPlus/utils/page_utils.dart';
|
import 'package:PiliPlus/utils/page_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@@ -9,7 +10,7 @@ import 'content_panel.dart';
|
|||||||
import 'forward_panel.dart';
|
import 'forward_panel.dart';
|
||||||
|
|
||||||
class DynamicPanel extends StatelessWidget {
|
class DynamicPanel extends StatelessWidget {
|
||||||
final dynamic item;
|
final DynamicItemModel item;
|
||||||
final String? source;
|
final String? source;
|
||||||
final Function? onRemove;
|
final Function? onRemove;
|
||||||
final Function(List<String>, int)? callback;
|
final Function(List<String>, int)? callback;
|
||||||
@@ -28,6 +29,13 @@ class DynamicPanel extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final authorWidget = AuthorPanel(
|
||||||
|
item: item,
|
||||||
|
source: source,
|
||||||
|
onRemove: onRemove,
|
||||||
|
isSave: isSave,
|
||||||
|
onSetTop: onSetTop,
|
||||||
|
);
|
||||||
return Container(
|
return Container(
|
||||||
decoration: isSave ||
|
decoration: isSave ||
|
||||||
(source == 'detail' &&
|
(source == 'detail' &&
|
||||||
@@ -46,7 +54,7 @@ class DynamicPanel extends StatelessWidget {
|
|||||||
color: Colors.transparent,
|
color: Colors.transparent,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: source == 'detail' &&
|
onTap: source == 'detail' &&
|
||||||
[
|
const {
|
||||||
'DYNAMIC_TYPE_AV',
|
'DYNAMIC_TYPE_AV',
|
||||||
'DYNAMIC_TYPE_UGC_SEASON',
|
'DYNAMIC_TYPE_UGC_SEASON',
|
||||||
'DYNAMIC_TYPE_PGC_UNION',
|
'DYNAMIC_TYPE_PGC_UNION',
|
||||||
@@ -54,59 +62,20 @@ class DynamicPanel extends StatelessWidget {
|
|||||||
'DYNAMIC_TYPE_LIVE',
|
'DYNAMIC_TYPE_LIVE',
|
||||||
'DYNAMIC_TYPE_LIVE_RCMD',
|
'DYNAMIC_TYPE_LIVE_RCMD',
|
||||||
'DYNAMIC_TYPE_MEDIALIST',
|
'DYNAMIC_TYPE_MEDIALIST',
|
||||||
].contains(item.type).not
|
}.contains(item.type).not
|
||||||
? null
|
? null
|
||||||
: () => PageUtils.pushDynDetail(item, 1),
|
: () => PageUtils.pushDynDetail(item, 1),
|
||||||
onLongPress: () {
|
onLongPress: () => _imageSaveDialog(context, authorWidget.morePanel),
|
||||||
if (item.type == 'DYNAMIC_TYPE_AV') {
|
|
||||||
imageSaveDialog(
|
|
||||||
context: context,
|
|
||||||
title: item.modules.moduleDynamic.major.archive.title,
|
|
||||||
cover: item.modules.moduleDynamic.major.archive.cover,
|
|
||||||
);
|
|
||||||
} else if (item.type == 'DYNAMIC_TYPE_UGC_SEASON') {
|
|
||||||
imageSaveDialog(
|
|
||||||
context: context,
|
|
||||||
title: item.modules.moduleDynamic.major.ugcSeason.title,
|
|
||||||
cover: item.modules.moduleDynamic.major.ugcSeason.cover,
|
|
||||||
);
|
|
||||||
} else if (item.type == 'DYNAMIC_TYPE_PGC' ||
|
|
||||||
item.type == 'DYNAMIC_TYPE_PGC_UNION') {
|
|
||||||
imageSaveDialog(
|
|
||||||
context: context,
|
|
||||||
title: item.modules.moduleDynamic.major.pgc.title,
|
|
||||||
cover: item.modules.moduleDynamic.major.pgc.cover,
|
|
||||||
);
|
|
||||||
} else if (item.type == 'DYNAMIC_TYPE_LIVE_RCMD') {
|
|
||||||
imageSaveDialog(
|
|
||||||
context: context,
|
|
||||||
title: item.modules.moduleDynamic.major.liveRcmd.title,
|
|
||||||
cover: item.modules.moduleDynamic.major.liveRcmd.cover,
|
|
||||||
);
|
|
||||||
} else if (item.type == 'DYNAMIC_TYPE_LIVE') {
|
|
||||||
imageSaveDialog(
|
|
||||||
context: context,
|
|
||||||
title: item.modules.moduleDynamic.major.live.title,
|
|
||||||
cover: item.modules.moduleDynamic.major.live.cover,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.fromLTRB(12, 12, 12, 6),
|
padding: const EdgeInsets.fromLTRB(12, 12, 12, 6),
|
||||||
child: AuthorPanel(
|
child: authorWidget,
|
||||||
item: item,
|
|
||||||
source: source,
|
|
||||||
onRemove: onRemove,
|
|
||||||
isSave: isSave,
|
|
||||||
onSetTop: onSetTop,
|
|
||||||
),
|
),
|
||||||
),
|
if (item.modules!.moduleDynamic!.desc != null ||
|
||||||
if (item!.modules!.moduleDynamic!.desc != null ||
|
item.modules!.moduleDynamic!.major != null)
|
||||||
item!.modules!.moduleDynamic!.major != null)
|
|
||||||
content(isSave, context, item, source, callback),
|
content(isSave, context, item, source, callback),
|
||||||
forWard(isSave, item, context, source, callback),
|
forWard(isSave, item, context, source, callback),
|
||||||
const SizedBox(height: 2),
|
const SizedBox(height: 2),
|
||||||
@@ -118,4 +87,43 @@ class DynamicPanel extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _imageSaveDialog(
|
||||||
|
BuildContext context,
|
||||||
|
Function(BuildContext) morePanel,
|
||||||
|
) {
|
||||||
|
late String? title;
|
||||||
|
late String? cover;
|
||||||
|
late final major = item.modules?.moduleDynamic?.major;
|
||||||
|
switch (item.type) {
|
||||||
|
case 'DYNAMIC_TYPE_AV':
|
||||||
|
title = major?.archive?.title;
|
||||||
|
cover = major?.archive?.cover;
|
||||||
|
break;
|
||||||
|
case 'DYNAMIC_TYPE_UGC_SEASON':
|
||||||
|
title = major?.ugcSeason?.title;
|
||||||
|
cover = major?.ugcSeason?.cover;
|
||||||
|
break;
|
||||||
|
case 'DYNAMIC_TYPE_PGC' || 'DYNAMIC_TYPE_PGC_UNION':
|
||||||
|
title = major?.pgc?.title;
|
||||||
|
cover = major?.pgc?.cover;
|
||||||
|
break;
|
||||||
|
case 'DYNAMIC_TYPE_LIVE_RCMD':
|
||||||
|
title = major?.liveRcmd?.title;
|
||||||
|
cover = major?.liveRcmd?.cover;
|
||||||
|
break;
|
||||||
|
case 'DYNAMIC_TYPE_LIVE':
|
||||||
|
title = major?.live?.title;
|
||||||
|
cover = major?.live?.cover;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
morePanel(context);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
imageSaveDialog(
|
||||||
|
context: context,
|
||||||
|
title: title,
|
||||||
|
cover: cover,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,14 +125,11 @@ class _MemberDynamicsPageState extends State<MemberDynamicsPage>
|
|||||||
? LastChildLayoutType.foot
|
? LastChildLayoutType.foot
|
||||||
: LastChildLayoutType.none;
|
: LastChildLayoutType.none;
|
||||||
},
|
},
|
||||||
children: (loadingState.response as List)
|
children: loadingState.response!
|
||||||
.map(
|
.map((item) => DynamicPanel(
|
||||||
(item) => DynamicPanel(
|
|
||||||
item: item,
|
item: item,
|
||||||
onRemove: _memberDynamicController.onRemove,
|
onRemove: _memberDynamicController.onRemove,
|
||||||
onSetTop: _memberDynamicController.onSetTop,
|
onSetTop: _memberDynamicController.onSetTop))
|
||||||
),
|
|
||||||
)
|
|
||||||
.toList(),
|
.toList(),
|
||||||
)
|
)
|
||||||
: SliverCrossAxisGroup(
|
: SliverCrossAxisGroup(
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ class _SearchDynamicState extends State<SearchDynamic>
|
|||||||
? LastChildLayoutType.foot
|
? LastChildLayoutType.foot
|
||||||
: LastChildLayoutType.none;
|
: LastChildLayoutType.none;
|
||||||
},
|
},
|
||||||
children: (loadingState.response as List)
|
children: loadingState.response!
|
||||||
.map((item) => DynamicPanel(item: item))
|
.map((item) => DynamicPanel(item: item))
|
||||||
.toList(),
|
.toList(),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user