空奖励reward弹窗
This commit is contained in:
parent
0da4fe7922
commit
a44b7394fe
@ -724,7 +724,7 @@
|
|||||||
"roomRocketNoteTitle": "Note",
|
"roomRocketNoteTitle": "Note",
|
||||||
"roomRocketNoteSectionTitle": "Each time a VIP",
|
"roomRocketNoteSectionTitle": "Each time a VIP",
|
||||||
"roomRocketNoteSectionBody": "1. Each time a VIP level is purchased, it is valid for 30 days, and can be manually renewed after expiration.",
|
"roomRocketNoteSectionBody": "1. Each time a VIP level is purchased, it is valid for 30 days, and can be manually renewed after expiration.",
|
||||||
"roomRocketRewardEmptyText": "No rewards earned. Better luck next time.",
|
"roomRocketRewardEmptyText": "No reward",
|
||||||
"roomRocketRecordEmptyText": "No reward records",
|
"roomRocketRecordEmptyText": "No reward records",
|
||||||
"launchRocket": "Launch Rocket",
|
"launchRocket": "Launch Rocket",
|
||||||
"roomRocketFuelFullNotice": "Rocket fuel is full! Launching in {1}s!"
|
"roomRocketFuelFullNotice": "Rocket fuel is full! Launching in {1}s!"
|
||||||
|
|||||||
@ -35,7 +35,7 @@ class RoomRocketRewardDialog extends StatelessWidget {
|
|||||||
final emptyText = _translate(
|
final emptyText = _translate(
|
||||||
localizations,
|
localizations,
|
||||||
'roomRocketRewardEmptyText',
|
'roomRocketRewardEmptyText',
|
||||||
'No rewards earned. Better luck next time.',
|
'No reward',
|
||||||
);
|
);
|
||||||
final contentDirection = Directionality.of(context);
|
final contentDirection = Directionality.of(context);
|
||||||
final resolvedRewards = _normalizeRewards(
|
final resolvedRewards = _normalizeRewards(
|
||||||
@ -257,7 +257,7 @@ class _RewardDialogCanvas extends StatelessWidget {
|
|||||||
if (isEmpty)
|
if (isEmpty)
|
||||||
_buildEmptyState()
|
_buildEmptyState()
|
||||||
else ...[
|
else ...[
|
||||||
_buildRewardGrid(),
|
rewards.isEmpty ? _buildRewardEmptyState() : _buildRewardGrid(),
|
||||||
_buildWinnerList(),
|
_buildWinnerList(),
|
||||||
],
|
],
|
||||||
_buildLoadingText(),
|
_buildLoadingText(),
|
||||||
@ -380,9 +380,6 @@ class _RewardDialogCanvas extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildRewardGrid() {
|
Widget _buildRewardGrid() {
|
||||||
if (rewards.isEmpty) {
|
|
||||||
return const SizedBox.shrink();
|
|
||||||
}
|
|
||||||
final columns = math.max(3, (rewards.length / 2).ceil());
|
final columns = math.max(3, (rewards.length / 2).ceil());
|
||||||
return Positioned(
|
return Positioned(
|
||||||
left: s(28),
|
left: s(28),
|
||||||
@ -425,6 +422,45 @@ class _RewardDialogCanvas extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildRewardEmptyState() {
|
||||||
|
return Positioned(
|
||||||
|
left: s(0),
|
||||||
|
top: s(268),
|
||||||
|
width: s(_designWidth),
|
||||||
|
height: s(178),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Image.asset(
|
||||||
|
_RewardDialogAssets.empty,
|
||||||
|
width: s(72),
|
||||||
|
height: s(72),
|
||||||
|
fit: BoxFit.contain,
|
||||||
|
),
|
||||||
|
SizedBox(height: s(10)),
|
||||||
|
SizedBox(
|
||||||
|
width: s(250),
|
||||||
|
child: Text(
|
||||||
|
emptyText,
|
||||||
|
textDirection: contentDirection,
|
||||||
|
textScaler: TextScaler.noScaling,
|
||||||
|
maxLines: 2,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white.withValues(alpha: 0.72),
|
||||||
|
fontSize: s(13),
|
||||||
|
height: 1.25,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
Widget _buildWinnerList() {
|
Widget _buildWinnerList() {
|
||||||
return Positioned(
|
return Positioned(
|
||||||
left: s(12),
|
left: s(12),
|
||||||
|
|||||||
@ -1,5 +1,8 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
import 'package:yumi/shared/business_logic/models/res/sc_room_rocket_api_res.dart';
|
import 'package:yumi/shared/business_logic/models/res/sc_room_rocket_api_res.dart';
|
||||||
|
import 'package:yumi/ui_kit/widgets/room/rocket/room_rocket_dialog.dart';
|
||||||
|
import 'package:yumi/ui_kit/widgets/room/rocket/room_rocket_reward_dialog.dart';
|
||||||
import 'package:yumi/ui_kit/widgets/room/rocket/room_rocket_reward_dialog_loader.dart';
|
import 'package:yumi/ui_kit/widgets/room/rocket/room_rocket_reward_dialog_loader.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
@ -27,6 +30,30 @@ void main() {
|
|||||||
expect(records.map((item) => item.rewardAmount), [5000, 5200]);
|
expect(records.map((item) => item.rewardAmount), [5000, 5200]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
group('room rocket reward dialog', () {
|
||||||
|
testWidgets('shows reward empty state when room winners exist', (
|
||||||
|
tester,
|
||||||
|
) async {
|
||||||
|
await tester.pumpWidget(
|
||||||
|
const MaterialApp(
|
||||||
|
home: Scaffold(
|
||||||
|
body: RoomRocketRewardDialog(
|
||||||
|
rewards: <RoomRocketRewardItem>[],
|
||||||
|
winners: <RoomRocketRewardWinner>[
|
||||||
|
RoomRocketRewardWinner(nickname: 'test man'),
|
||||||
|
],
|
||||||
|
loadingText: '',
|
||||||
|
useMockFallback: false,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(find.text('No reward'), findsOneWidget);
|
||||||
|
expect(find.text('test man'), findsOneWidget);
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
SCRoomRocketRewardRecordRes _rewardRecord({
|
SCRoomRocketRewardRecordRes _rewardRecord({
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user