home_page.dart 1.79 KB
import 'package:flutter/material.dart';
import 'package:get/get.dart';

import '../controllers/home_controller.dart';
import '../widgets/df_tab_bar.dart';
import '../../friends/views/friends_tab.dart';
import 'tabs/home_trend_view.dart';
import 'tabs/today_tab.dart';
import 'tabs/my_tab.dart';

class HomePage extends GetView<HomeController> {
  const HomePage({super.key});

  static const _tabs = [
    TodayTab(),
    HomeTrendView(),
    FriendsTab(),
    MyTab(),
  ];

  @override
  Widget build(BuildContext context) {
    return _HomeReviewPromptGate(
      controller: controller,
      child: Scaffold(
        // 不使用系统 AppBar,Today 页自带状态栏适配
        extendBody: true, // 让内容延伸到 bottomNavigationBar 下方
        extendBodyBehindAppBar: true,

        body: Obx(
          () => IndexedStack(
            index: controller.selectedIndex.value,
            children: _tabs,
          ),
        ),
        bottomNavigationBar: Obx(
          () => DfTabBar(
            selectedIndex: controller.selectedIndex.value,
            onTap: (index) => controller.changeTab(index),
          ),
        ),
      ),
    );
  }
}

class _HomeReviewPromptGate extends StatefulWidget {
  const _HomeReviewPromptGate({
    required this.controller,
    required this.child,
  });

  final HomeController controller;
  final Widget child;

  @override
  State<_HomeReviewPromptGate> createState() => _HomeReviewPromptGateState();
}

class _HomeReviewPromptGateState extends State<_HomeReviewPromptGate> {
  @override
  void initState() {
    super.initState();

    WidgetsBinding.instance.addPostFrameCallback((_) async {
      if (!mounted) return;
      await widget.controller.maybeShowMembershipOffer();
    });
  }

  @override
  Widget build(BuildContext context) => widget.child;
}