main_page.dart 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_screenutil/flutter_screenutil.dart';
  3. import 'package:get/get.dart';
  4. import '../../base/base_page.dart';
  5. import '../../router/app_pages.dart';
  6. import 'main_controller.dart';
  7. class MainPage extends BasePage<MainController> {
  8. MainPage({super.key});
  9. static start({Map<String, dynamic>? arguments}) {
  10. return Get.offAllNamed(RoutePath.mainTab, arguments: arguments);
  11. }
  12. @override
  13. bool immersive() => true;
  14. @override
  15. Widget buildBody(BuildContext context) {
  16. return PopScope(
  17. child: Scaffold(
  18. bottomNavigationBar: buildBottomAppBar(),
  19. drawerEdgeDragWidth: 0,
  20. body: Obx(() => controller.tabBeans[controller.currentIndex].page),
  21. ),
  22. );
  23. }
  24. Widget buildBottomAppBar() {
  25. return Container(
  26. decoration: BoxDecoration(color: Colors.white),
  27. child: BottomAppBar(
  28. color: Colors.white,
  29. height: 56.h,
  30. padding: EdgeInsets.zero,
  31. child: Row(
  32. mainAxisAlignment: MainAxisAlignment.spaceAround,
  33. children: List.generate(controller.tabBeans.length, bottomAppBarItem),
  34. ),
  35. ),
  36. );
  37. }
  38. Widget bottomAppBarItem(int index) {
  39. return Expanded(
  40. child: GestureDetector(
  41. onTap: () => controller.changeIndex(index),
  42. behavior: HitTestBehavior.opaque,
  43. child: Column(
  44. mainAxisAlignment: MainAxisAlignment.center,
  45. children: [
  46. Obx(() {
  47. TabBean tabBean = controller.tabBeans[index];
  48. bool isSelected = controller.currentIndex == index;
  49. return Column(
  50. children: [
  51. Image.asset(
  52. isSelected ? tabBean.selectedIcon : tabBean.normalIcon,
  53. width: 28.w,
  54. height: 28.w,
  55. ),
  56. Text(
  57. tabBean.title,
  58. style: TextStyle(
  59. fontSize: 10.sp,
  60. fontWeight: FontWeight.w400,
  61. color:
  62. isSelected
  63. ? const Color(0xFF7D46FC)
  64. : Colors.black.withValues(alpha: 0.4),
  65. ),
  66. ),
  67. ],
  68. );
  69. }),
  70. ],
  71. ),
  72. ),
  73. );
  74. }
  75. }