| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- import 'package:flutter/material.dart';
- import 'package:flutter_screenutil/flutter_screenutil.dart';
- import 'package:get/get.dart';
- import 'package:keyboard/widget/delegate_lifecycle_widget.dart';
- import 'package:lottie/lottie.dart';
- import '../../base/base_page.dart';
- import '../../di/get_it.dart';
- import '../../resource/assets.gen.dart';
- import '../../router/app_pages.dart';
- import 'main_controller.dart';
- class MainPage extends BasePage<MainController> {
- MainPage({super.key}) {
- // 修复从键盘,跳转到app页面后,Tab卡死点不动
- Get.lazyPut(() => getIt.get<MainController>());
- }
- static start({Map<String, String>? arguments}) {
- if (Get.isRegistered<MainController>()) {
- var controller = Get.find<MainController>();
- controller.handleJumpParameters(parameters: arguments);
- Get.until((route) => route.settings.name == RoutePath.mainTab);
- } else {
- return Get.offAllNamed(RoutePath.mainTab, parameters: arguments);
- }
- }
- @override
- bool immersive() => true;
- @override
- Widget buildBody(BuildContext context) {
- return PopScope(
- child: Scaffold(
- bottomNavigationBar: buildBottomAppBar(),
- drawerEdgeDragWidth: 0,
- body: DelegateLifecycleWidget(
- onCreateCallback: () {
- // 处理跳转参数
- controller.handleJumpParameters();
- },
- child: Obx(() => controller.tabBeans[controller.currentIndex].page()),
- ),
- ),
- );
- }
- Widget buildBottomAppBar() {
- return Container(
- decoration: BoxDecoration(color: Colors.white),
- child: BottomAppBar(
- color: Colors.white,
- height: 56.h,
- padding: EdgeInsets.zero,
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceAround,
- children: List.generate(controller.tabBeans.length, bottomAppBarItem),
- ),
- ),
- );
- }
- Widget bottomAppBarItem(int index) {
- return Expanded(
- child: GestureDetector(
- onTap: () => controller.changeIndex(index),
- behavior: HitTestBehavior.opaque,
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- Obx(() {
- TabBean tabBean = controller.tabBeans[index];
- bool isSelected = controller.currentIndex == index;
- return Column(
- children: [
- isSelected
- ? Lottie.asset(
- tabBean.selectedIcon,
- repeat: false,
- width: 28.w,
- height: 28.w,
- )
- : Image.asset(
- tabBean.normalIcon,
- width: 28.w,
- height: 28.w,
- ),
- Text(
- tabBean.title,
- style: TextStyle(
- fontSize: 10.sp,
- fontWeight: FontWeight.w400,
- color:
- isSelected
- ? const Color(0xFF7D46FC)
- : Colors.black.withValues(alpha: 0.4),
- ),
- ),
- ],
- );
- }),
- ],
- ),
- ),
- );
- }
- }
|