main_page.dart 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import 'package:abroad_location/base/base_page.dart';
  2. import 'package:flutter/cupertino.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter/src/widgets/framework.dart';
  5. import 'package:flutter_screenutil/flutter_screenutil.dart';
  6. import 'package:get/get.dart';
  7. import 'package:get/get_core/src/get_main.dart';
  8. import '../../resource/colors.gen.dart';
  9. import '../../router/app_pages.dart';
  10. import 'main_controller.dart';
  11. class MainPage extends BasePage<MainController> {
  12. const MainPage({super.key});
  13. static start() {
  14. Get.offAllNamed(RoutePath.mainTab);
  15. }
  16. @override
  17. bool immersive() {
  18. return true;
  19. }
  20. @override
  21. Widget buildBody(BuildContext context) {
  22. return Scaffold(
  23. body: buildTabBarView(), bottomNavigationBar: buildBottomBar());
  24. }
  25. Widget buildBottomBar() {
  26. return Container(
  27. decoration: BoxDecoration(
  28. color: ColorName.white,
  29. boxShadow: [
  30. BoxShadow(
  31. color: ColorName.black5.withOpacity(0.03), // 阴影颜色
  32. blurRadius: 16, // 阴影模糊半径
  33. spreadRadius: 2, // 阴影扩展半径
  34. offset: const Offset(0, 0), // 阴影位置,向上偏移
  35. ),
  36. ],
  37. ),
  38. child: Row(children: [
  39. for (int i = 0; i < controller.tabData.length; i++)
  40. tabItem(controller.tabData[i], i)
  41. ]),
  42. );
  43. }
  44. Widget tabItem(TabData tabData, int index) {
  45. return Expanded(
  46. child: Container(
  47. padding: EdgeInsets.only(top: 9.w, bottom: 15.w),
  48. child: Builder(builder: (context) {
  49. return GestureDetector(
  50. onTap: () {
  51. controller.onTabClick(index);
  52. },
  53. child: Obx(() {
  54. return Image(
  55. image: controller.currentIndex == index
  56. ? tabData.selectIcon
  57. : tabData.unSelectIcon,
  58. width: 32.w,
  59. height: 32.w);
  60. }),
  61. );
  62. }),
  63. ));
  64. }
  65. Widget buildTabBarView() {
  66. return TabBarView(
  67. physics: const NeverScrollableScrollPhysics(),
  68. controller: controller.tabController, children: [
  69. for (int i = 0; i < controller.tabData.length; i++)
  70. controller.tabData[i].page
  71. ]);
  72. }
  73. }