diff --git a/devtools_options.yaml b/devtools_options.yaml new file mode 100644 index 0000000..fa0b357 --- /dev/null +++ b/devtools_options.yaml @@ -0,0 +1,3 @@ +description: This file stores settings for Dart & Flutter DevTools. +documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states +extensions: diff --git a/lib/features/recording/widgets/widget_record_header.dart b/lib/features/recording/widgets/widget_record_header.dart index ad89a54..0b99cec 100644 --- a/lib/features/recording/widgets/widget_record_header.dart +++ b/lib/features/recording/widgets/widget_record_header.dart @@ -26,7 +26,7 @@ class RecordHeaderWidget extends StatelessWidget { bool get _showEventTitle => hasValidClipboardInfo; - Widget _buildHeaderContent() { + Widget _buildAnimatedHeaderContent() { if (_showEventTitle) { return _HeaderEventTitleRow( key: ValueKey('title-${eventTitle ?? ''}'), @@ -36,14 +36,6 @@ class RecordHeaderWidget extends StatelessWidget { ); } - if (_showPasteButtons) { - return _HeaderPasteActions( - key: const ValueKey('paste-actions'), - onMockCopy: _mockCopyEventInfo, - onPasteEventInfo: onPasteEventInfo, - ); - } - return const SizedBox.shrink(key: ValueKey('header-empty')); } @@ -72,13 +64,26 @@ class RecordHeaderWidget extends StatelessWidget { fit: BoxFit.contain, ), Expanded( - child: AnimatedSwitcher( - duration: RecordContentTransition.duration, - switchInCurve: Curves.easeOutCubic, - switchOutCurve: Curves.easeInCubic, - layoutBuilder: RecordContentTransition.stackLayoutBuilder, - transitionBuilder: RecordContentTransition.builder, - child: _buildHeaderContent(), + child: Stack( + alignment: Alignment.center, + children: [ + AnimatedSwitcher( + duration: RecordContentTransition.duration, + switchInCurve: Curves.easeOutCubic, + switchOutCurve: Curves.easeInCubic, + layoutBuilder: RecordContentTransition.stackLayoutBuilder, + transitionBuilder: RecordContentTransition.builder, + child: _buildAnimatedHeaderContent(), + ), + if (_showPasteButtons) + Align( + alignment: Alignment.centerRight, + child: _HeaderPasteActions( + onMockCopy: _mockCopyEventInfo, + onPasteEventInfo: onPasteEventInfo, + ), + ), + ], ), ), ], @@ -130,28 +135,22 @@ class _HeaderEventTitleRow extends StatelessWidget { ), ), ), - AnimatedSwitcher( - duration: RecordContentTransition.duration, - switchInCurve: Curves.easeOutCubic, - switchOutCurve: Curves.easeInCubic, - transitionBuilder: RecordContentTransition.builder, - child: !isRecording - ? IconButton( - key: const ValueKey('clear-event-info'), - onPressed: onClearEventInfo, - icon: Assets.images.imageDelete.image( - width: 15.r, - height: 15.r, - fit: BoxFit.contain, - excludeFromSemantics: true, - ), - padding: EdgeInsets.zero, - constraints: BoxConstraints(minWidth: 40.r, minHeight: 40.r), - alignment: Alignment.centerRight, - tooltip: '删除', - ) - : const SizedBox.shrink(key: ValueKey('clear-event-info-hidden')), - ), + !isRecording + ? IconButton( + key: const ValueKey('clear-event-info'), + onPressed: onClearEventInfo, + icon: Assets.images.imageDelete.image( + width: 15.r, + height: 15.r, + fit: BoxFit.contain, + excludeFromSemantics: true, + ), + padding: EdgeInsets.zero, + constraints: BoxConstraints(minWidth: 40.r, minHeight: 40.r), + alignment: Alignment.centerRight, + tooltip: '删除', + ) + : const SizedBox.shrink(key: ValueKey('clear-event-info-hidden')), ], ); } @@ -159,7 +158,6 @@ class _HeaderEventTitleRow extends StatelessWidget { class _HeaderPasteActions extends StatelessWidget { const _HeaderPasteActions({ - super.key, required this.onMockCopy, required this.onPasteEventInfo, });