You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
4.3 KiB
105 lines
4.3 KiB
import 'package:flutter/material.dart'; |
|
import 'package:flutter/services.dart'; |
|
import 'package:flutter_screenutil/flutter_screenutil.dart'; |
|
import 'package:get/get_navigation/src/root/get_material_app.dart'; |
|
import 'package:get_storage/get_storage.dart'; |
|
import 'package:problem_check_system/app/routes/app_pages.dart'; |
|
import 'package:problem_check_system/app/routes/app_routes.dart'; // 导入路由常量 |
|
import 'package:problem_check_system/app/bindings/initial_binding.dart'; |
|
import 'package:flutter_localizations/flutter_localizations.dart'; |
|
|
|
void main() async { |
|
// 确保 Flutter Binding 已初始化 |
|
WidgetsFlutterBinding.ensureInitialized(); |
|
// 设置应用为竖屏模式 |
|
SystemChrome.setPreferredOrientations([ |
|
DeviceOrientation.portraitUp, |
|
DeviceOrientation.portraitDown, |
|
]); |
|
// 初始化 GetStorage,这是关键步骤 |
|
await GetStorage.init(); |
|
// Add this line |
|
await ScreenUtil.ensureScreenSize(); |
|
|
|
runApp(const MainApp()); |
|
} |
|
|
|
class MainApp extends StatelessWidget { |
|
const MainApp({super.key}); |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
// 填入设计稿中设备的屏幕尺寸, 单位dp |
|
return ScreenUtilInit( |
|
designSize: const Size(375, 812), |
|
minTextAdapt: true, |
|
splitScreenMode: true, |
|
builder: (context, _) { |
|
// 使用 _ 忽略 child 参数 |
|
return GetMaterialApp( |
|
debugShowCheckedModeBanner: false, |
|
// --- 关键配置 --- |
|
localizationsDelegates: const [ |
|
// 必需:用于 Material 组件库的本地化 |
|
GlobalMaterialLocalizations.delegate, |
|
// 必需:用于 Widgets 库的本地化 |
|
GlobalWidgetsLocalizations.delegate, |
|
// 必需:用于 iOS 风格组件的本地化 |
|
GlobalCupertinoLocalizations.delegate, |
|
], |
|
supportedLocales: const [ |
|
Locale('zh', 'CN'), // 支持中文 |
|
], |
|
title: '问题检查系统', // 使用更有意义的应用标题 |
|
theme: ThemeData( |
|
useMaterial3: true, |
|
|
|
// 【推荐】使用 colorSchemeSeed 从一个种子颜色生成完整的 M3 调色板 |
|
colorScheme: ColorScheme.fromSeed( |
|
seedColor: const Color(0xFF3B82F6), |
|
), |
|
|
|
// (可选) 如果想进一步定制 NavigationBar 的主题 |
|
navigationBarTheme: NavigationBarThemeData( |
|
// 1. 在主题中设置你想要的高度 |
|
height: 48, // 比如我们想让它更高,设置为 70 |
|
// 2. 【关键】增大图标尺寸,让内容撑满新高度 |
|
// 使用 MaterialStateProperty.resolveWith 来响应不同状态(如下拉、聚焦等) |
|
iconTheme: WidgetStateProperty.resolveWith((states) { |
|
// 你可以根据状态返回不同的 IconThemeData |
|
return IconThemeData( |
|
size: 24, // 将图标大小从默认的 24 增大到 28 |
|
); |
|
}), |
|
// 标签行为:控制标签是否总是显示 |
|
labelBehavior: |
|
NavigationDestinationLabelBehavior.onlyShowSelected, |
|
// backgroundColor: Colors.white, |
|
// 指示器的颜色 |
|
indicatorColor: Colors.deepOrange.shade200, |
|
// 【核心】使用 indicatorShape 属性并传入我们的自定义类 |
|
// indicatorShape: const CustomIndicatorShape( |
|
// // 在这里调整你想要的宽度 |
|
// // horizontalPadding: 24.0, // 让指示器变得更窄 |
|
// // horizontalPadding: 8.0, // 让指示器变得更宽 |
|
// horizontalPadding: 0, // 让指示器宽度接近内容宽度 |
|
// ), |
|
// 标签文本样式 |
|
labelTextStyle: WidgetStateProperty.all( |
|
TextStyle( |
|
fontSize: 12.sp, |
|
fontWeight: FontWeight.w500, |
|
color: Colors.deepOrange, |
|
), |
|
), |
|
), |
|
), |
|
// 仅使用 GetX 路由系统 |
|
initialRoute: AppRoutes.login, // 使用路由常量作为初始页面 |
|
initialBinding: InitialBinding(), // 如果有全局绑定,继续保留 |
|
getPages: AppPages.routes, // 绑定所有路由 |
|
); |
|
}, |
|
); |
|
} |
|
}
|
|
|