mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-07-06 01:00:18 +08:00
feat: cross row select (#2437)
* feat(wip): cross row select * fix patch Signed-off-by: dom <githubaccount56556@proton.me> * update Signed-off-by: dom <githubaccount56556@proton.me> --------- Co-authored-by: dom <githubaccount56556@proton.me>
This commit is contained in:
committed by
GitHub
parent
204715266f
commit
b540647222
@@ -33,7 +33,7 @@ class ArticleOpus extends StatelessWidget {
|
||||
final item = _ops[index];
|
||||
switch (item.insert) {
|
||||
case String e:
|
||||
return SelectableText(e);
|
||||
return Text(e);
|
||||
case Insert(:final card):
|
||||
if (card != null) {
|
||||
if (card.url?.isNotEmpty == true) {
|
||||
|
||||
@@ -125,17 +125,15 @@ Widget htmlRender({
|
||||
margin: Margins.zero,
|
||||
),
|
||||
};
|
||||
return SelectionArea(
|
||||
child: element != null
|
||||
? Html.fromElement(
|
||||
documentElement: element,
|
||||
extensions: extensions,
|
||||
style: style,
|
||||
)
|
||||
: Html(
|
||||
data: html,
|
||||
extensions: extensions,
|
||||
style: style,
|
||||
),
|
||||
);
|
||||
return element != null
|
||||
? Html.fromElement(
|
||||
documentElement: element,
|
||||
extensions: extensions,
|
||||
style: style,
|
||||
)
|
||||
: Html(
|
||||
data: html,
|
||||
extensions: extensions,
|
||||
style: style,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -178,7 +178,7 @@ class OpusContent extends StatelessWidget {
|
||||
switch (element.paraType) {
|
||||
case 1 || 4:
|
||||
final isQuote = element.paraType == 4;
|
||||
Widget widget = SelectableText.rich(
|
||||
Widget widget = Text.rich(
|
||||
textAlign: element.align == 1 ? TextAlign.center : null,
|
||||
TextSpan(
|
||||
children: element.text?.nodes
|
||||
@@ -194,12 +194,7 @@ class OpusContent extends StatelessWidget {
|
||||
);
|
||||
if (isQuote) {
|
||||
widget = Container(
|
||||
padding: const EdgeInsets.only(
|
||||
left: 8,
|
||||
top: 4,
|
||||
right: 4,
|
||||
bottom: 4,
|
||||
),
|
||||
padding: const .only(left: 8, top: 4, right: 4, bottom: 4),
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
left: BorderSide(
|
||||
@@ -215,8 +210,9 @@ class OpusContent extends StatelessWidget {
|
||||
}
|
||||
return widget;
|
||||
case 2 when (element.pic != null):
|
||||
if (element.pic!.pics!.length == 1) {
|
||||
final pic = element.pic!.pics!.first;
|
||||
final pics = element.pic!.pics!;
|
||||
if (pics.length == 1) {
|
||||
final pic = pics.first;
|
||||
double? width = pic.width == null
|
||||
? null
|
||||
: math.min(maxWidth, pic.width!);
|
||||
@@ -250,7 +246,7 @@ class OpusContent extends StatelessWidget {
|
||||
);
|
||||
} else {
|
||||
return ImageGridView(
|
||||
picArr: element.pic!.pics!
|
||||
picArr: pics
|
||||
.map(
|
||||
(e) => ImageModel(
|
||||
width: e.width,
|
||||
@@ -262,19 +258,20 @@ class OpusContent extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
case 3 when (element.line?.pic != null):
|
||||
final height = element.line!.pic!.height?.toDouble();
|
||||
final pic = element.line!.pic!;
|
||||
final height = pic.height?.toDouble();
|
||||
return CachedNetworkImage(
|
||||
fit: .contain,
|
||||
height: height,
|
||||
width: maxWidth,
|
||||
memCacheWidth: maxWidth.cacheSize(context),
|
||||
imageUrl: ImageUtils.thumbnailUrl(element.line!.pic!.url!),
|
||||
imageUrl: ImageUtils.thumbnailUrl(pic.url!),
|
||||
placeholder: (_, _) => const SizedBox.shrink(),
|
||||
);
|
||||
case 5 when (element.list != null):
|
||||
return SelectableText.rich(
|
||||
case 5 when (element.list?.items?.isNotEmpty == true):
|
||||
return Text.rich(
|
||||
TextSpan(
|
||||
children: element.list!.items?.mapIndexed((i, entry) {
|
||||
children: element.list!.items!.mapIndexed((i, entry) {
|
||||
return TextSpan(
|
||||
children: [
|
||||
const WidgetSpan(
|
||||
@@ -589,39 +586,32 @@ class OpusContent extends StatelessWidget {
|
||||
? null
|
||||
: () {
|
||||
try {
|
||||
final card = element.linkCard!.card!;
|
||||
if (type == 'LINK_CARD_TYPE_VOTE') {
|
||||
showVoteDialog(
|
||||
context,
|
||||
element.linkCard!.card!.vote?.voteId ??
|
||||
int.parse(element.linkCard!.card!.oid!),
|
||||
card.vote?.voteId ?? int.parse(card.oid!),
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (type == 'LINK_CARD_TYPE_ITEM_NULL') {
|
||||
switch (element.linkCard?.card?.itemNull?.text) {
|
||||
switch (card.itemNull?.text) {
|
||||
case '视频':
|
||||
PiliScheme.videoPush(
|
||||
int.parse(element.linkCard!.card!.oid!),
|
||||
int.parse(card.oid!),
|
||||
null,
|
||||
);
|
||||
default:
|
||||
PageUtils.pushDynFromId(
|
||||
id: element.linkCard!.card!.oid!,
|
||||
);
|
||||
PageUtils.pushDynFromId(id: card.oid!);
|
||||
}
|
||||
return;
|
||||
}
|
||||
String? url = switch (type) {
|
||||
'LINK_CARD_TYPE_UGC' =>
|
||||
element.linkCard!.card!.ugc!.jumpUrl,
|
||||
'LINK_CARD_TYPE_COMMON' =>
|
||||
element.linkCard!.card!.common!.jumpUrl,
|
||||
'LINK_CARD_TYPE_LIVE' =>
|
||||
element.linkCard!.card!.live!.jumpUrl,
|
||||
'LINK_CARD_TYPE_OPUS' =>
|
||||
element.linkCard!.card!.opus!.jumpUrl,
|
||||
'LINK_CARD_TYPE_MUSIC' =>
|
||||
element.linkCard!.card!.music!.jumpUrl,
|
||||
final url = switch (type) {
|
||||
'LINK_CARD_TYPE_UGC' => card.ugc!.jumpUrl,
|
||||
'LINK_CARD_TYPE_COMMON' => card.common!.jumpUrl,
|
||||
'LINK_CARD_TYPE_LIVE' => card.live!.jumpUrl,
|
||||
'LINK_CARD_TYPE_OPUS' => card.opus!.jumpUrl,
|
||||
'LINK_CARD_TYPE_MUSIC' => card.music!.jumpUrl,
|
||||
_ => null,
|
||||
};
|
||||
if (url != null && url.isNotEmpty) {
|
||||
@@ -660,10 +650,10 @@ class OpusContent extends StatelessWidget {
|
||||
color: colorScheme.onInverseSurface,
|
||||
),
|
||||
width: .infinity,
|
||||
child: SelectableText.rich(renderer.span!),
|
||||
child: Text.rich(renderer.span!),
|
||||
);
|
||||
case 8 when (element.heading?.nodes?.isNotEmpty == true):
|
||||
return SelectableText.rich(
|
||||
return Text.rich(
|
||||
TextSpan(
|
||||
children: element.heading!.nodes!
|
||||
.map(
|
||||
@@ -679,7 +669,7 @@ class OpusContent extends StatelessWidget {
|
||||
default:
|
||||
if (kDebugMode) debugPrint('unknown type ${element.paraType}');
|
||||
if (element.text?.nodes?.isNotEmpty == true) {
|
||||
return SelectableText.rich(
|
||||
return Text.rich(
|
||||
textAlign: element.align == 1 ? TextAlign.center : null,
|
||||
TextSpan(
|
||||
children: element.text!.nodes!
|
||||
@@ -694,7 +684,7 @@ class OpusContent extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
return SelectableText(
|
||||
return Text(
|
||||
'不支持的类型 (${element.paraType})',
|
||||
style: const TextStyle(
|
||||
fontWeight: .bold,
|
||||
@@ -703,7 +693,7 @@ class OpusContent extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
} catch (e, s) {
|
||||
return SelectableText(
|
||||
return Text(
|
||||
'错误的类型 $e${kDebugMode ? '\n$s' : ''}',
|
||||
style: const TextStyle(
|
||||
fontWeight: .bold,
|
||||
|
||||
Reference in New Issue
Block a user