From 6b168ccd62bb7318e58b2e745e8aa7c6359ac3dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E9=94=8B?= <2535831261@qq.com> Date: Mon, 8 Jun 2026 10:19:19 +0800 Subject: [PATCH] =?UTF-8?q?1.UI=20=E4=BC=98=E5=8C=96=202.=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=89=93=E5=8C=85=E6=9E=84=E5=BB=BA=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/images/image_copy.png | Bin 0 -> 795 bytes assets/images/image_delete.png | Bin 0 -> 1011 bytes assets/images/image_logo.png | Bin 9065 -> 4737 bytes assets/images/image_vs.png | Bin 0 -> 1552 bytes build-apk-split.sh | 1 + build-apk.sh | 1 + .../widgets/widget_record_header.dart | 38 ++++++++++--- .../widgets/widget_record_timer.dart | 2 +- lib/gen/assets.gen.dart | 15 ++++- .../recording/widget_record_header_test.dart | 53 ++++++++++++++++++ 10 files changed, 99 insertions(+), 11 deletions(-) create mode 100644 assets/images/image_copy.png create mode 100644 assets/images/image_delete.png create mode 100644 assets/images/image_vs.png create mode 100644 build-apk-split.sh create mode 100644 build-apk.sh create mode 100644 test/features/recording/widget_record_header_test.dart diff --git a/assets/images/image_copy.png b/assets/images/image_copy.png new file mode 100644 index 0000000000000000000000000000000000000000..fba2f9af18ca4597cef635841a2cd0398215e0e9 GIT binary patch literal 795 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 P00000NkvXXu0mjfqF)*o literal 9065 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 bK~w_(@*pq01&jp#00000NkvXXu0mjfQ?QH| diff --git a/assets/images/image_vs.png b/assets/images/image_vs.png new file mode 100644 index 0000000000000000000000000000000000000000..68484548a1288b53cbd6740b974c736f7fdafb5d GIT binary patch literal 1552 zcmV+r2JiWaP)PPf&<@%?XURfWcV36Ert9HI?9ns8^i8cq`U! z0t z{rvhd$lF+so+T!e8rGYcQvMCeV-mQQC<$DDy&jGWs;#m{PpQ`!bfoLWNkH%EqVBqaC@m z$_Xa;fQIQHUF{~&ISD)RDEd@7_Al?V7{8geeqb1I%wqT|Aa8?@2e;5yJ5R$;1T9rg zppahW(FH1LG%tsOh)HzDr8wC4GM3`N`?L+`{Wh=yya3w4c|h)NbJs26-T7eAP9GU3 zm~1l*>Es%OE)3ik`7~f%fJHy^cnk;JSx+I~4UCdC1hFoeN82+_l!rVI{|y9ktB%Hy zQSf~5kh0D5;bnyFU^zG)1mjzgb?_f}9ywMUTXUTt8viqD0dR6y0v# zO2o*d^$IYQoiq^i2i~~q+Ns;jz(sdD5Bk&e2=YzSx9P#||esMPMp0ZZZ*~oVR4>*@_B630v zoxqS=>Dy#Px8Tl+cMa`3!Iz)|OakM;Npu?qEM8X7kc8HmW6(cGM9ziB)X<5zR}^h1 z^T2e%?HJxO97nw3y-CA-;L=qlqsulIN8E7@wFp*(VF(>fY&_BZnGu*0amRp!mbrZ%103Ee{+=JHS%*#1%ZdWsB z*w)3IU_#FT6Kx5D=YX{!PBaV;0vFK7t!!QJjOovNHARsX_8pX$fVCi@JWrFxMgqpY z$XKk*ey@CaLtH|a<_;Ps;`|y=l}|l(0te1wQZF+8`|?i{uNiX5u0(qkScGveIf&J? z+fHEIvtS(4cv1Btlb3jg-plM%48I6Gv`l7(WvQVP7##t;C69$4!4&@KodvJF=<=G7 zneUN38RM%HZ5^Sm6BzXZW60g2CY;xG|7Uu+2@$Z6`IYj;*z&*Y0vvD`@YCA^t49o|gfsMc|M^o>T2aT}M%wg(Bfz@sW2A6|y4?x{_WF)R(`rE;N zz{0Z- onPasteEventInfo(), + icon: Assets.images.imageCopy.image( + width: 10.r, + height: 10.r, + fit: BoxFit.contain, + excludeFromSemantics: true, + ), ), ], ); @@ -144,23 +155,32 @@ class _HeaderPasteActions extends StatelessWidget { } class _HeaderActionButton extends StatelessWidget { - const _HeaderActionButton({required this.label, required this.onPressed}); + const _HeaderActionButton({ + required this.label, + required this.onPressed, + this.icon, + }); final String label; final VoidCallback onPressed; + final Widget? icon; @override Widget build(BuildContext context) { return TextButton.icon( onPressed: onPressed, - icon: Icon(Icons.content_paste, size: 18.r), + icon: icon ?? Icon(Icons.content_paste, size: 10.r), label: Text(label), + style: TextButton.styleFrom( + minimumSize: Size.zero, // 取消 40dp 最小高度 + tapTargetSize: MaterialTapTargetSize.shrinkWrap, // 取消额外点击热区 foregroundColor: Colors.white, backgroundColor: Colors.black.withValues(alpha: 0.5), - padding: EdgeInsets.symmetric(horizontal: 14.r, vertical: 8.r), + textStyle: TextStyle(fontSize: 10.sp), + padding: EdgeInsets.symmetric(horizontal: 7.r, vertical: 4.r), shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(20.r), + borderRadius: BorderRadius.circular(25.r), side: const BorderSide(color: Colors.white30), ), ), diff --git a/lib/features/recording/widgets/widget_record_timer.dart b/lib/features/recording/widgets/widget_record_timer.dart index fa0269f..15c47a0 100644 --- a/lib/features/recording/widgets/widget_record_timer.dart +++ b/lib/features/recording/widgets/widget_record_timer.dart @@ -33,7 +33,7 @@ class _RecordTimerWidgetState extends ConsumerState { child: Text( displayTime, style: TextStyle( - color: isRecording ? Colors.white : Colors.white70, + color: Colors.white, fontSize: 20.sp, shadows: [Shadow(color: Colors.black54, blurRadius: 6.r)], ), diff --git a/lib/gen/assets.gen.dart b/lib/gen/assets.gen.dart index 15be050..d2870ba 100644 --- a/lib/gen/assets.gen.dart +++ b/lib/gen/assets.gen.dart @@ -14,6 +14,14 @@ import 'package:flutter/widgets.dart'; class $AssetsImagesGen { const $AssetsImagesGen(); + /// File path: assets/images/image_copy.png + AssetGenImage get imageCopy => + const AssetGenImage('assets/images/image_copy.png'); + + /// File path: assets/images/image_delete.png + AssetGenImage get imageDelete => + const AssetGenImage('assets/images/image_delete.png'); + /// File path: assets/images/image_dialog_bg.png AssetGenImage get imageDialogBg => const AssetGenImage('assets/images/image_dialog_bg.png'); @@ -23,7 +31,12 @@ class $AssetsImagesGen { const AssetGenImage('assets/images/image_logo.png'); /// List of all assets - List get values => [imageDialogBg, imageLogo]; + List get values => [ + imageCopy, + imageDelete, + imageDialogBg, + imageLogo, + ]; } class Assets { diff --git a/test/features/recording/widget_record_header_test.dart b/test/features/recording/widget_record_header_test.dart new file mode 100644 index 0000000..11cc954 --- /dev/null +++ b/test/features/recording/widget_record_header_test.dart @@ -0,0 +1,53 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:recording_tool/features/recording/widgets/widget_record_header.dart'; +import 'package:recording_tool/gen/assets.gen.dart'; + +void main() { + Future pumpHeader( + WidgetTester tester, { + required bool hasValidClipboardInfo, + String? eventTitle, + }) async { + await tester.pumpWidget( + ScreenUtilInit( + designSize: const Size(375, 812), + builder: (context, _) { + return MaterialApp( + home: Scaffold( + body: RecordHeaderWidget( + hasValidClipboardInfo: hasValidClipboardInfo, + eventTitle: eventTitle, + isRecording: false, + elapsedLabel: '00:00', + onPasteEventInfo: () async {}, + onClearEventInfo: () {}, + ), + ), + ); + }, + ), + ); + } + + testWidgets('paste player info button uses copy image asset', (tester) async { + await pumpHeader(tester, hasValidClipboardInfo: false); + + expect(find.text('粘贴选手信息'), findsOneWidget); + expect(find.image(AssetImage(Assets.images.imageCopy.path)), findsOne); + }); + + testWidgets('clear player info button uses delete image asset', ( + tester, + ) async { + await pumpHeader( + tester, + hasValidClipboardInfo: true, + eventTitle: '王东方 丨李想 空中格斗赛', + ); + + expect(find.text('王东方 丨李想 空中格斗赛'), findsOneWidget); + expect(find.image(AssetImage(Assets.images.imageDelete.path)), findsOne); + }); +}