import 'package:aliyun_push/aliyun_push.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:star_lock/tools/app_manager.dart'; import 'package:star_lock/tools/bindings/app_binding.dart'; import 'package:star_lock/tools/device_info_service.dart'; import 'package:star_lock/tools/platform_info_services.dart'; import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/xs_aliyunPush.dart'; import 'package:star_lock/translations/app_dept.dart'; import 'package:star_lock/translations/trans_lib.dart'; import 'appRouters.dart'; import 'baseWidget.dart'; import 'blue/blue_manage.dart'; import 'tools/appRouteObserver.dart'; import 'tools/store_service.dart'; import 'dart:io'; import 'package:flutter/services.dart'; void main() async { await _setCommonServices(); // 设置国际化信息 await _initTranslation(); runApp(MyApp()); if (Platform.isAndroid) { SystemUiOverlayStyle systemUiOverlayStyle = const SystemUiOverlayStyle(statusBarColor: Colors.transparent); SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle); } } class MyApp extends StatefulWidget { const MyApp({GlobalKey? key}) : super(key: key); @override State createState() => _MyAppState(); } // 注册 RouteObserver 作为 navigation observer. // final RouteObserver routeObserver = RouteObserver(); class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { @override Widget build(BuildContext context) { return ScreenUtilInit( designSize: const Size(585, 1265), builder: (w, a) => _initMaterialApp()); } GetMaterialApp _initMaterialApp() => GetMaterialApp( title: 'Star Lock', navigatorObservers: [AppRouteObserver().routeObserver], translations: TranslationMessage(), supportedLocales: appDept.deptSupportedLocales, localizationsDelegates: const [ GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ], localeResolutionCallback: (locale, supportedLocales) { if (!supportedLocales.contains(locale)) { int idx = appSupportedLocales.indexWhere( (element) => element.languageCode == locale!.languageCode); if (idx != -1) { locale = appSupportedLocales[idx]; } else { locale = const Locale('zh', 'CN'); } } // print("localelocalelocalelocalelocale locale:${locale} locale.languageCode:${locale.languageCode} locale.countryCode:${locale.countryCode} supportedLocales:${supportedLocales}"); AppManager() .setLanCode(code: '${locale!.languageCode}_${locale.countryCode}'); return locale; }, // locale: StoreService.to.getLanguageCode().isNotEmpty ? appDept.deptSupportedLocales.where((element) => element.languageCode == StoreService.to.getLanguageCode()).first : Get.deviceLocale, locale: Get.deviceLocale, fallbackLocale: const Locale('zh', 'CN'), theme: ThemeData( scaffoldBackgroundColor: const Color(0xFFF6F6F6), backgroundColor: const Color(0xFFF6F6F6), primaryColor: const Color(0xFFFFFFFF), textTheme: TextTheme( //用在非Material组件上的文字显示, bodyText1: TextStyle(fontSize: 28.sp, color: const Color(0xff2E2B2B)), //Material组件上的文字显示 bodyText2: TextStyle(fontSize: 28.sp, color: const Color(0xff2E2B2B)), button: TextStyle(fontSize: 28.sp)), iconTheme: IconThemeData(size: 28.sp, color: const Color(0xff2E2B2B)), appBarTheme: AppBarTheme( backgroundColor: const Color(0xFFFFFFFF), elevation: 0, centerTitle: true, iconTheme: IconThemeData(color: const Color(0xff333333), size: 36.sp), titleTextStyle: TextStyle( color: const Color(0xff333333), fontWeight: FontWeight.w400, fontSize: 36.sp), ), splashColor: Colors.transparent, // 点击时的高亮效果设置为透明 highlightColor: Colors.transparent, ), debugShowCheckedModeBanner: false, getPages: AppRouters.routePages, builder: EasyLoading.init(), initialBinding: AppBindings(), initialRoute: '/'); @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); openBlueScan(); initAliyunPush(); } //初始化阿里云推送 void initAliyunPush() { final aliyunPush = AliyunPush(); XSAliyunPushProvider().init(aliyunPush); XSAliyunPushProvider().initAliyunPush(); if (Platform.isAndroid) { XSAliyunPushProvider().initAliyunThirdPush(); } //暂使用DeviceID推送 aliyunPush.getDeviceId().then((deviceId) async { // print('得到的DeviceId$deviceId'); final data = await Storage.getString(saveUserLoginData); if (data!.isNotEmpty && deviceId.isNotEmpty) { XSAliyunPushProvider() .pushBindDeviceID(deviceId, Platform.isAndroid ? 10 : 20); } }); } @override void dispose() { WidgetsBinding.instance.removeObserver(this); super.dispose(); } } // 设置国际化信息 Future _initTranslation() async => TranslationLoader.loadTranslation( zhSource: "images/lan/lan_zh.json", enSource: "images/lan/lan_en.json", keySource: "images/lan/lan_keys.json", ); // 设置包名服务设备信息 Future _setCommonServices() async { await Get.putAsync(() => StoreService().init()); await Get.putAsync(() => PlatformInfoService().init()); await Get.putAsync(() => DeviceInfoService().init()); // Get.log(PlatformInfoService.to.info.version); } void openBlueScan() { if (Platform.isIOS) { print("有蓝牙权限开始扫描"); // startScanAction(); } else { getMicrophonePermission().then((value) { if (value) { // 有权限 print("有蓝牙权限开始扫描"); // startScanAction(); } else { //没有权限 openAppSettings(); //打开app系统设置 } }); } } // void startScanAction() { // BlueManage().startScan(); // } ///请求蓝牙权限 Future getMicrophonePermission() async { // You can request multiple permissions at once. Map statuses = await [ Permission.bluetoothScan, Permission.bluetoothConnect, Permission.location, ].request(); //granted 通过,denied 被拒绝,permanentlyDenied 拒绝且不在提示 if (statuses[Permission.bluetoothScan]!.isGranted && statuses[Permission.bluetoothConnect]!.isGranted && statuses[Permission.location]!.isGranted) { return true; } return false; }