opt: anim save panel

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-04-10 21:07:58 +08:00
parent 37bd849a86
commit 99b19e7b03

View File

@@ -286,183 +286,191 @@ class _SavePanelState extends State<SavePanel> {
color: Theme.of(context).colorScheme.surface, color: Theme.of(context).colorScheme.surface,
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
), ),
child: Column( child: AnimatedSize(
mainAxisSize: MainAxisSize.min, curve: Curves.easeInOut,
crossAxisAlignment: CrossAxisAlignment.start, alignment: Alignment.topCenter,
children: [ duration: const Duration(milliseconds: 255),
if (_item is ReplyInfo) child: Column(
IgnorePointer( mainAxisSize: MainAxisSize.min,
child: ReplyItemGrpc( crossAxisAlignment: CrossAxisAlignment.start,
replyItem: _item, children: [
replyLevel: '', if (_item is ReplyInfo)
needDivider: false, IgnorePointer(
upMid: widget.upMid, child: ReplyItemGrpc(
replyItem: _item,
replyLevel: '',
needDivider: false,
upMid: widget.upMid,
),
)
else if (_item is DynamicItemModel)
IgnorePointer(
child: DynamicPanel(
item: _item,
source: 'detail',
isSave: true,
),
), ),
) if (cover?.isNotEmpty == true &&
else if (_item is DynamicItemModel) title?.isNotEmpty == true)
IgnorePointer( Container(
child: DynamicPanel( height: 81,
item: _item, clipBehavior: Clip.hardEdge,
source: 'detail', margin:
isSave: true, const EdgeInsets.symmetric(horizontal: 12),
), padding: const EdgeInsets.all(8),
), decoration: BoxDecoration(
if (cover?.isNotEmpty == true && color: Theme.of(context)
title?.isNotEmpty == true) .colorScheme
Container( .onInverseSurface,
height: 81, borderRadius: BorderRadius.circular(8),
clipBehavior: Clip.hardEdge, ),
margin: child: Row(
const EdgeInsets.symmetric(horizontal: 12),
padding: const EdgeInsets.all(8),
decoration: BoxDecoration(
color: Theme.of(context)
.colorScheme
.onInverseSurface,
borderRadius: BorderRadius.circular(8),
),
child: Row(
children: [
NetworkImgLayer(
radius: 6,
src: cover!,
height: MediaQuery.textScalerOf(context)
.scale(65),
width: MediaQuery.textScalerOf(context)
.scale(65) *
16 /
9,
quality: 100,
),
const SizedBox(width: 10),
Expanded(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'$title\n',
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
if (pubdate != null) ...[
const Spacer(),
Text(
DateTime.fromMillisecondsSinceEpoch(
pubdate! * 1000)
.toString()
.substring(0, 19),
style: TextStyle(
color: Theme.of(context)
.colorScheme
.outline,
),
),
],
],
),
),
],
),
),
showBottom
? Stack(
clipBehavior: Clip.none,
children: [ children: [
if (uri.isNotEmpty) NetworkImgLayer(
Align( radius: 6,
alignment: Alignment.centerRight, src: cover!,
child: Row( height: MediaQuery.textScalerOf(context)
children: [ .scale(65),
Expanded( width: MediaQuery.textScalerOf(context)
child: Column( .scale(65) *
mainAxisSize: MainAxisSize.min, 16 /
crossAxisAlignment: 9,
CrossAxisAlignment.end, quality: 100,
children: [ ),
if (uname?.isNotEmpty == const SizedBox(width: 10),
true) ...[ Expanded(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
'$title\n',
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
if (pubdate != null) ...[
const Spacer(),
Text(
DateTime.fromMillisecondsSinceEpoch(
pubdate! * 1000)
.toString()
.substring(0, 19),
style: TextStyle(
color: Theme.of(context)
.colorScheme
.outline,
),
),
],
],
),
),
],
),
),
showBottom
? Stack(
clipBehavior: Clip.none,
children: [
if (uri.isNotEmpty)
Align(
alignment: Alignment.centerRight,
child: Row(
children: [
Expanded(
child: Column(
mainAxisSize:
MainAxisSize.min,
crossAxisAlignment:
CrossAxisAlignment.end,
children: [
if (uname?.isNotEmpty ==
true) ...[
Text(
'@$uname',
maxLines: 1,
overflow: TextOverflow
.ellipsis,
style: TextStyle(
color:
Theme.of(context)
.colorScheme
.primary,
),
),
const SizedBox(height: 4),
],
Text( Text(
'@$uname', '识别二维码,$viewType$itemType',
maxLines: 1, textAlign: TextAlign.end,
overflow:
TextOverflow.ellipsis,
style: TextStyle( style: TextStyle(
color: Theme.of(context) color: Theme.of(context)
.colorScheme .colorScheme
.primary, .onSurfaceVariant,
), ),
), ),
const SizedBox(height: 4), const SizedBox(height: 4),
Text(
DateTime.now()
.toString()
.split('.')
.first,
textAlign: TextAlign.end,
style: TextStyle(
fontSize: 13,
color: Theme.of(context)
.colorScheme
.outline,
),
),
], ],
Text( ),
'识别二维码,$viewType$itemType',
textAlign: TextAlign.end,
style: TextStyle(
color: Theme.of(context)
.colorScheme
.onSurfaceVariant,
),
),
const SizedBox(height: 4),
Text(
DateTime.now()
.toString()
.split('.')
.first,
textAlign: TextAlign.end,
style: TextStyle(
fontSize: 13,
color: Theme.of(context)
.colorScheme
.outline,
),
),
],
), ),
), Container(
Container( width: 100,
width: 100, height: 100,
height: 100,
padding: const EdgeInsets.all(12),
child: Container(
color: Get.isDarkMode
? Colors.white
: Theme.of(context)
.colorScheme
.surface,
padding: padding:
const EdgeInsets.all(3), const EdgeInsets.all(12),
child: PrettyQrView.data( child: Container(
data: uri, color: Get.isDarkMode
decoration: ? Colors.white
const PrettyQrDecoration( : Theme.of(context)
shape: .colorScheme
PrettyQrRoundedSymbol( .surface,
borderRadius: padding:
BorderRadius.zero, const EdgeInsets.all(3),
child: PrettyQrView.data(
data: uri,
decoration:
const PrettyQrDecoration(
shape:
PrettyQrRoundedSymbol(
borderRadius:
BorderRadius.zero,
),
), ),
), ),
), ),
), ),
), ],
], ),
),
Align(
alignment: Alignment.centerLeft,
child: Image.asset(
'assets/images/logo/logo_2.png',
width: 100,
color: Theme.of(context)
.colorScheme
.onSurfaceVariant,
), ),
), ),
Align( ],
alignment: Alignment.centerLeft, )
child: Image.asset( : const SizedBox(height: 12),
'assets/images/logo/logo_2.png', ],
width: 100, ),
color: Theme.of(context)
.colorScheme
.onSurfaceVariant,
),
),
],
)
: const SizedBox(height: 12),
],
), ),
), ),
), ),