fix(player): 恢复随机飘心粒子模型

This commit is contained in:
Zhou Weidong committed 2026-10-26 18:19:39 +08:00
1 parent 94b37ef00f
commit f3dd4a9b5c
3 files changed
+87 -79

No files matched your search

+24 -14
View File
@@ -1,26 +1,34 @@
// Author: fruit.com.cn
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:fruitshorts/pages/player/widgets/player_double_tap_hearts.dart';
void main() {
testWidgets('should_show_three_medium_hearts_when_double_tap_burst_starts', (
testWidgets('should_show_randomized_heart_particles_when_burst_starts', (
tester,
) async {
await tester.pumpWidget(
const MaterialApp(
MaterialApp(
home: Scaffold(
body: PlayerDoubleTapHeartBurst(burstId: 1, onCompleted: _noop),
body: PlayerDoubleTapHeartBurst(
burstId: 1,
onCompleted: _noop,
random: Random(42),
),
),
),
);
await tester.pump(const Duration(milliseconds: 300));
await tester.pump(const Duration(milliseconds: 400));
expect(find.byIcon(Icons.favorite_rounded), findsNWidgets(3));
expect(_size(tester, 0), 44);
expect(_size(tester, 1), 34);
expect(_size(tester, 2), 38);
final hearts = find.byIcon(Icons.favorite_rounded);
final count = hearts.evaluate().length;
expect(count, inInclusiveRange(4, 5));
for (var index = 0; index < count; index++) {
expect(_size(tester, index), inInclusiveRange(22, 34));
}
expect(
tester
.widgetList<Stack>(
@@ -34,14 +42,16 @@ void main() {
);
});
test('heart burst stays long and sparse', () {
expect(PlayerDoubleTapHeartBurst.singleHeartDurationMs, 1900);
test('heart particles fade from the start and scale in two phases', () {
expect(PlayerDoubleTapHeartBurst.opacityForProgress(0.5), lessThan(0.7));
expect(PlayerDoubleTapHeartBurst.scaleForProgress(0), 0.55);
expect(
PlayerDoubleTapHeartBurst.animationDuration,
greaterThanOrEqualTo(const Duration(milliseconds: 1800)),
PlayerDoubleTapHeartBurst.scaleForProgress(0.3),
closeTo(1.15, 1e-9),
);
expect(PlayerDoubleTapHeartBurst.particleCount, lessThanOrEqualTo(4));
expect(PlayerDoubleTapHeartBurst.particleCount, 3);
expect(PlayerDoubleTapHeartBurst.scaleForProgress(1), closeTo(0.2, 1e-9));
expect(PlayerDoubleTapHeartBurst.minParticleCount, 4);
expect(PlayerDoubleTapHeartBurst.maxParticleCount, 5);
});
}