210 lines
7.0 KiB
Dart
Raw Normal View History

import 'package:aliyun_push/aliyun_push.dart';
2023-07-10 17:50:31 +08:00
import 'package:flutter/material.dart';
2023-07-29 09:25:21 +08:00
import 'package:flutter_easyloading/flutter_easyloading.dart';
2023-07-10 17:50:31 +08:00
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
2023-12-27 10:47:58 +08:00
import 'package:permission_handler/permission_handler.dart';
2023-07-10 17:50:31 +08:00
import 'package:star_lock/tools/app_manager.dart';
2023-07-29 09:25:21 +08:00
import 'package:star_lock/tools/bindings/app_binding.dart';
2023-07-10 17:50:31 +08:00
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';
2023-07-10 17:50:31 +08:00
import 'package:star_lock/translations/app_dept.dart';
import 'package:star_lock/translations/trans_lib.dart';
import 'appRouters.dart';
import 'baseWidget.dart';
2023-12-27 10:47:58 +08:00
import 'blue/blue_manage.dart';
import 'tools/appRouteObserver.dart';
import 'tools/store_service.dart';
import 'dart:io';
import 'package:flutter/services.dart';
2023-07-10 17:50:31 +08:00
void main() async {
2023-08-26 11:40:40 +08:00
await _setCommonServices();
2023-07-10 17:50:31 +08:00
// 设置国际化信息
await _initTranslation();
runApp(MyApp());
if (Platform.isAndroid) {
SystemUiOverlayStyle systemUiOverlayStyle =
const SystemUiOverlayStyle(statusBarColor: Colors.transparent);
SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
}
2023-07-10 17:50:31 +08:00
}
class MyApp extends StatefulWidget {
const MyApp({GlobalKey? key}) : super(key: key);
2023-07-10 17:50:31 +08:00
@override
State<MyApp> createState() => _MyAppState();
}
// 注册 RouteObserver 作为 navigation observer.
// final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
2023-07-10 17:50:31 +08:00
class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
@override
Widget build(BuildContext context) {
return ScreenUtilInit(
designSize: const Size(585, 1265),
builder: (w, a) => _initMaterialApp());
2023-07-10 17:50:31 +08:00
}
GetMaterialApp _initMaterialApp() => GetMaterialApp(
title: 'Star Lock',
navigatorObservers: [AppRouteObserver().routeObserver],
2023-07-10 17:50:31 +08:00
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) {
2023-07-10 17:50:31 +08:00
locale = appSupportedLocales[idx];
} else {
2023-07-10 17:50:31 +08:00
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}');
2023-07-10 17:50:31 +08:00
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)),
2023-07-10 17:50:31 +08:00
//Material组件上的文字显示
bodyText2:
TextStyle(fontSize: 28.sp, color: const Color(0xff2E2B2B)),
2023-07-10 17:50:31 +08:00
button: TextStyle(fontSize: 28.sp)),
iconTheme: IconThemeData(size: 28.sp, color: const Color(0xff2E2B2B)),
2023-07-10 17:50:31 +08:00
appBarTheme: AppBarTheme(
backgroundColor: const Color(0xFFFFFFFF),
elevation: 0,
centerTitle: true,
iconTheme: IconThemeData(color: const Color(0xff333333), size: 36.sp),
2023-07-10 17:50:31 +08:00
titleTextStyle: TextStyle(
color: const Color(0xff333333),
fontWeight: FontWeight.w400,
fontSize: 36.sp),
),
splashColor: Colors.transparent, // 点击时的高亮效果设置为透明
highlightColor: Colors.transparent,
),
debugShowCheckedModeBanner: false,
getPages: AppRouters.routePages,
2023-07-29 09:25:21 +08:00
builder: EasyLoading.init(),
initialBinding: AppBindings(),
initialRoute: '/');
2023-07-10 17:50:31 +08:00
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
2023-12-27 10:47:58 +08:00
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);
2023-12-04 09:47:04 +08:00
}
});
2023-07-10 17:50:31 +08:00
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
2023-07-10 17:50:31 +08:00
super.dispose();
}
2024-01-17 13:58:48 +08:00
}
2023-07-10 17:50:31 +08:00
// 设置国际化信息
Future _initTranslation() async => TranslationLoader.loadTranslation(
zhSource: "images/lan/lan_zh.json",
enSource: "images/lan/lan_en.json",
keySource: "images/lan/lan_keys.json",
);
2023-07-10 17:50:31 +08:00
// 设置包名服务设备信息
Future _setCommonServices() async {
await Get.putAsync(() => StoreService().init());
await Get.putAsync(() => PlatformInfoService().init());
await Get.putAsync(() => DeviceInfoService().init());
2023-08-26 11:40:40 +08:00
// Get.log(PlatformInfoService.to.info.version);
}
2023-12-04 09:47:04 +08:00
void openBlueScan() {
if (Platform.isIOS) {
2023-12-27 10:47:58 +08:00
print("有蓝牙权限开始扫描");
// startScanAction();
} else {
2023-12-27 10:47:58 +08:00
getMicrophonePermission().then((value) {
if (value) {
// 有权限
print("有蓝牙权限开始扫描");
// startScanAction();
} else {
2023-12-27 10:47:58 +08:00
//没有权限
openAppSettings(); //打开app系统设置
2023-12-27 10:47:58 +08:00
}
});
}
}
// void startScanAction() {
// BlueManage().startScan();
// }
2023-12-27 10:47:58 +08:00
///请求蓝牙权限
Future<bool> getMicrophonePermission() async {
// You can request multiple permissions at once.
Map<Permission, PermissionStatus> 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;
}