feat(reward): 新增客户端奖励中心

This commit is contained in:
Zhou Weidong committed 2026-11-13 13:43:38 +08:00
1 parent 67670d46b1
commit bea08110c9
68 files changed
+3987 -332

No files matched your search

+10 -6
View File
@@ -75,7 +75,7 @@ class HomeLogic extends ChangeNotifier {
String? episodeId,
}) => playDramaFromCatalog(context, drama, episodeId: episodeId);
void openProfile() => select(3);
void openProfile() => select(4);
void discoverAction(DiscoverPageAction action) {
switch (action) {
@@ -83,10 +83,12 @@ class HomeLogic extends ChangeNotifier {
select(0);
case DiscoverPageAction.recommend:
select(1);
case DiscoverPageAction.following:
case DiscoverPageAction.reward:
select(2);
case DiscoverPageAction.mine:
case DiscoverPageAction.following:
select(3);
case DiscoverPageAction.mine:
select(4);
}
}
@@ -103,7 +105,7 @@ class HomeLogic extends ChangeNotifier {
}
void openFollowingHistory() {
tab = 2;
tab = 3;
followingHistoryRequest += 1;
notify();
}
@@ -114,10 +116,12 @@ class HomeLogic extends ChangeNotifier {
select(0);
case MyPageAction.recommend:
select(1);
case MyPageAction.following:
case MyPageAction.reward:
select(2);
case MyPageAction.mine:
case MyPageAction.following:
select(3);
case MyPageAction.mine:
select(4);
case MyPageAction.resume:
select(0, resume: true);
}
+28 -5
View File
@@ -8,6 +8,7 @@ import 'package:provider/provider.dart';
import '../../core/data/remote/catalog_api.dart';
import '../../core/data/services/home_feed_controller.dart';
import '../../core/data/models/reward.dart';
import '../../core/data/services/catalog_controller.dart';
import '../../core/data/services/category_controller.dart';
import '../../core/data/services/favorite_controller.dart';
@@ -21,6 +22,7 @@ import '../following/following_page.dart';
import '../mine/mine_types.dart';
import '../recommend/recommend_page.dart';
import '../recommend/recommend_discover_page.dart';
import '../reward/reward_page.dart';
import '../mine/mine_view.dart';
import '../wallet/wallet_page.dart';
import 'home_binding.dart';
@@ -105,7 +107,7 @@ class _HomePageState extends State<HomePage> with WidgetsBindingObserver {
}
}
/// 四个根页面共享同一路由并保持各自状态。
/// 五个根页面共享同一路由并保持各自状态。
class _HomeTabs extends StatefulWidget {
const _HomeTabs({super.key, required this.feedController});
@@ -164,11 +166,12 @@ class _HomeTabsState extends State<_HomeTabs> {
final builders = <WidgetBuilder>[
_recommend,
_recommendDiscover,
_reward,
(context) => FollowingPage(
onGoHome: () => logic.select(0),
favoriteController: context.read<FavoriteController>(),
historyRequest: logic.followingHistoryRequest,
visible: logic.tab == 2,
visible: logic.tab == 3,
),
_my,
];
@@ -218,7 +221,7 @@ class _HomeTabsState extends State<_HomeTabs> {
Widget _my(BuildContext context) {
return MyPage(
active: logic.tab == 3,
active: logic.tab == 4,
callbacks: MyPageCallbacks(
onAction: logic.myAction,
onOpenHistoryTab: logic.openFollowingHistory,
@@ -226,6 +229,26 @@ class _HomeTabsState extends State<_HomeTabs> {
);
}
Widget _reward(BuildContext context) {
return RewardPage(
active: logic.tab == 2,
onBack: () => logic.select(0),
onOpenWallet: () => unawaited(_openWallet(context)),
onTaskAction: (task) => _handleRewardAction(context, task),
);
}
void _handleRewardAction(BuildContext context, RewardTask task) {
switch (task.actionType) {
case 'OPEN_PROFILE':
logic.select(4);
case 'OPEN_WALLET':
unawaited(_openWallet(context));
default:
logic.select(0);
}
}
Widget _nav(BuildContext context) {
return AppRootBottomNav(
barKey: const Key('home-tabs-bar'),
@@ -243,9 +266,9 @@ class _HomeTabsState extends State<_HomeTabs> {
}
}
/// 四个根 tab 的容器:只有被访问过的 tab 才真正构建并常驻。
/// 五个根 tab 的容器:只有被访问过的 tab 才真正构建并常驻。
///
/// 冷启动时只建推荐页,其余 tab 等第一次切过去再建,省掉三棵子树和它们各自的请求。
/// 冷启动时只建推荐页,其余 tab 等第一次切过去再建,减少首屏子树和请求。
class _LazyTabStack extends StatefulWidget {
const _LazyTabStack({required this.index, required this.builders});