您不能選擇超過 %s 個話題 話題必須以字母或數字為開頭,可包含連接號 ('-') 且最長為 35 個字
 
 
 
 
 
 

138 行
4.9 KiB

  1. import 'package:demo001/gen/assets.gen.dart';
  2. import 'package:demo001/generated/l10n.dart';
  3. import 'package:demo001/scenes/home/home_view.dart';
  4. import 'package:demo001/scenes/translate/TranslateScene.dart';
  5. import 'package:demo001/tools/color_utils.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:flutter_localizations/flutter_localizations.dart';
  8. import 'package:get/get.dart';
  9. import 'package:flutter_easyloading/flutter_easyloading.dart';
  10. import 'scenes/login/login_view.dart';
  11. void main() {
  12. WidgetsFlutterBinding.ensureInitialized();
  13. EasyLoading.instance
  14. ..indicatorType = EasyLoadingIndicatorType.threeBounce
  15. ..maskType = EasyLoadingMaskType.black
  16. ..progressColor = Colors.white
  17. ..backgroundColor = const Color.fromRGBO(38, 38, 38, 1)
  18. ..indicatorColor = Colors.white
  19. ..textColor = Colors.white
  20. ..userInteractions = false
  21. ..displayDuration = 1.5.seconds
  22. ..dismissOnTap = false;
  23. runApp(const MyApp());
  24. }
  25. class MyApp extends StatelessWidget {
  26. const MyApp({super.key});
  27. // This widget is the root of your application.
  28. @override
  29. Widget build(BuildContext context) {
  30. return GetMaterialApp(
  31. locale: Get.deviceLocale,
  32. fallbackLocale: Get.deviceLocale,
  33. title: '智能耳机',
  34. debugShowCheckedModeBanner: false,
  35. defaultTransition: Transition.rightToLeft,
  36. theme: ThemeData(
  37. colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
  38. useMaterial3: true,
  39. appBarTheme: const AppBarTheme(
  40. centerTitle: true,
  41. iconTheme: IconThemeData(color: whiteGrey),
  42. surfaceTintColor: white,
  43. shape: Border(bottom: BorderSide(color: lightBlue, width: 1)),
  44. backgroundColor: bgColor,
  45. ),
  46. scaffoldBackgroundColor: bgColor,
  47. splashColor: clean,
  48. highlightColor: clean,
  49. switchTheme: SwitchThemeData(
  50. trackOutlineColor: const WidgetStatePropertyAll(blue),
  51. trackColor: WidgetStateProperty.resolveWith((states) {
  52. if (states.contains(WidgetState.selected)) {
  53. return blue;
  54. } else {
  55. return silver.withOpacity(0.5);
  56. }
  57. }),
  58. thumbColor: WidgetStateProperty.resolveWith((states) {
  59. if (states.contains(WidgetState.selected)) {
  60. return white;
  61. } else {
  62. return silver;
  63. }
  64. }),
  65. trackOutlineWidth: const WidgetStatePropertyAll(0)),
  66. navigationBarTheme: NavigationBarThemeData()),
  67. localizationsDelegates: {
  68. S.delegate,
  69. GlobalMaterialLocalizations.delegate,
  70. GlobalCupertinoLocalizations.delegate,
  71. GlobalWidgetsLocalizations.delegate,
  72. },
  73. supportedLocales: S.delegate.supportedLocales,
  74. home: LoginScene(),
  75. builder: (context, widget) {
  76. final easyload = EasyLoading.init();
  77. var child = easyload(context, widget);
  78. return MediaQuery(
  79. data:
  80. MediaQuery.of(context).copyWith(textScaler: TextScaler.noScaling),
  81. child: child,
  82. );
  83. },
  84. );
  85. }
  86. }
  87. S? s;
  88. class IndexWidget extends StatelessWidget {
  89. final RxInt _currentIndex = 0.obs;
  90. final List<Widget> _pages = [HomePage()];
  91. @override
  92. Widget build(BuildContext context) {
  93. return Scaffold(
  94. body: Obx(() => _pages[_currentIndex.value]),
  95. bottomNavigationBar: Builder(builder: (context) {
  96. s = S.of(context);
  97. return Obx(() => BottomNavigationBar(
  98. type: BottomNavigationBarType.fixed,
  99. backgroundColor: bottomNavBg,
  100. currentIndex: _currentIndex.value,
  101. selectedItemColor: white,
  102. unselectedItemColor: grey,
  103. items: [
  104. BottomNavigationBarItem(
  105. icon: Assets.icon.bottomNavHomeUnselect
  106. .image(width: 20, height: 20),
  107. activeIcon: Assets.icon.bottomNavHomeSelect
  108. .image(width: 20, height: 20),
  109. label: s?.bottomNavHome),
  110. BottomNavigationBarItem(
  111. icon: Assets.icon.bottomNavSleepUnselect
  112. .image(width: 20, height: 20),
  113. activeIcon: Assets.icon.bottomNavSleepSelect
  114. .image(width: 20, height: 20),
  115. label: s?.bottomNavSleep),
  116. BottomNavigationBarItem(
  117. icon: Assets.icon.bottomNavProfileUnselect
  118. .image(width: 20, height: 20),
  119. activeIcon: Assets.icon.bottomNavProfileSelect
  120. .image(width: 20, height: 20),
  121. label: s?.bottomNavProfile),
  122. ],
  123. onTap: (index) {
  124. _currentIndex.value = index;
  125. },
  126. ));
  127. }));
  128. }
  129. }