Merge branch 'release' of https://gitee.com/starlock-cn/app-starlock into release

This commit is contained in:
魏少阳 2024-06-05 14:36:35 +08:00
commit 9c8f722710
14 changed files with 539 additions and 431 deletions

View File

@ -7,9 +7,13 @@ import 'package:permission_handler/permission_handler.dart';
import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/blue/blue_manage.dart'; import 'package:star_lock/blue/blue_manage.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/login/login/app_get_version.dart';
import 'package:star_lock/main/lockMian/lockMain/lockMain_logic.dart'; import 'package:star_lock/main/lockMian/lockMain/lockMain_logic.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/appFirstEnterHandle.dart';
import 'package:star_lock/tools/app_manager.dart'; import 'package:star_lock/tools/app_manager.dart';
import 'package:star_lock/tools/bindings/app_binding.dart'; import 'package:star_lock/tools/bindings/app_binding.dart';
import 'package:star_lock/tools/customer_tool.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/translations/app_dept.dart'; import 'package:star_lock/translations/app_dept.dart';
@ -22,15 +26,13 @@ import 'tools/appRouteObserver.dart';
import 'tools/store_service.dart'; import 'tools/store_service.dart';
class MyApp extends StatefulWidget { class MyApp extends StatefulWidget {
const MyApp({GlobalKey? key}) : super(key: key); MyApp({required this.isLogin, GlobalKey? key}) : super(key: key);
bool isLogin;
@override @override
State<MyApp> createState() => _MyAppState(); State<MyApp> createState() => _MyAppState();
} }
// RouteObserver navigation observer.
// final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget { class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -39,72 +41,84 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
builder: (BuildContext w, Widget? a) => _initMaterialApp()); builder: (BuildContext w, Widget? a) => _initMaterialApp());
} }
GetMaterialApp _initMaterialApp() => GetMaterialApp( GetMaterialApp _initMaterialApp() {
// enableLog: false, //
title: F.navTitle, String initialRoute;
navigatorObservers: <NavigatorObserver>[AppRouteObserver().routeObserver], if (widget.isLogin) {
translations: TranslationMessage(), initialRoute = Routers.starLockMain;
supportedLocales: appDept.deptSupportedLocales, } else {
localizationsDelegates: const <LocalizationsDelegate<dynamic>>[ initialRoute = Routers.login;
GlobalMaterialLocalizations.delegate, }
GlobalCupertinoLocalizations.delegate, return GetMaterialApp(
GlobalWidgetsLocalizations.delegate, // enableLog: false,
], title: F.navTitle,
localeResolutionCallback: navigatorObservers: <NavigatorObserver>[
(Locale? locale, Iterable<Locale> supportedLocales) { AppRouteObserver().routeObserver
if (!supportedLocales.contains(locale)) { ],
final int idx = appSupportedLocales.indexWhere( translations: TranslationMessage(),
(Locale element) => element.languageCode == locale!.languageCode); supportedLocales: appDept.deptSupportedLocales,
if (idx != -1) { localizationsDelegates: const <LocalizationsDelegate<dynamic>>[
locale = appSupportedLocales[idx]; GlobalMaterialLocalizations.delegate,
} else { GlobalCupertinoLocalizations.delegate,
locale = const Locale('zh', 'CN'); GlobalWidgetsLocalizations.delegate,
],
localeResolutionCallback:
(Locale? locale, Iterable<Locale> supportedLocales) {
if (!supportedLocales.contains(locale)) {
final int idx = appSupportedLocales.indexWhere((Locale element) =>
element.languageCode == locale!.languageCode);
if (idx != -1) {
locale = appSupportedLocales[idx];
} else {
locale = const Locale('zh', 'CN');
}
} }
} AppManager().setLanCode(
AppManager() code: '${locale!.languageCode}_${locale.countryCode}');
.setLanCode(code: '${locale!.languageCode}_${locale.countryCode}'); return locale;
return locale; },
}, locale: StoreService.to.getLanguageCode()!.isNotEmpty
locale: StoreService.to.getLanguageCode()!.isNotEmpty ? appDept.deptSupportedLocales
? appDept.deptSupportedLocales .where((Locale element) =>
.where((Locale element) => element.languageCode == StoreService.to.getLanguageCode())
element.languageCode == StoreService.to.getLanguageCode()) .first
.first : Get.deviceLocale,
: Get.deviceLocale, // locale: Get.deviceLocale,
// locale: Get.deviceLocale, fallbackLocale: const Locale('zh', 'CN'),
fallbackLocale: const Locale('zh', 'CN'), theme: ThemeData(
theme: ThemeData( scaffoldBackgroundColor: const Color(0xFFF6F6F6),
scaffoldBackgroundColor: const Color(0xFFF6F6F6), backgroundColor: const Color(0xFFF6F6F6),
backgroundColor: const Color(0xFFF6F6F6), primaryColor: const Color(0xFFFFFFFF),
primaryColor: const Color(0xFFFFFFFF), textTheme: TextTheme(
textTheme: TextTheme( //Material组件上的文字显示,
//Material组件上的文字显示, bodyText1:
bodyText1: TextStyle(fontSize: 28.sp, color: const Color(0xff2E2B2B)),
TextStyle(fontSize: 28.sp, color: const Color(0xff2E2B2B)), //Material组件上的文字显示
//Material组件上的文字显示 bodyText2:
bodyText2: TextStyle(fontSize: 28.sp, color: const Color(0xff2E2B2B)),
TextStyle(fontSize: 28.sp, color: const Color(0xff2E2B2B)), button: TextStyle(fontSize: 28.sp)),
button: TextStyle(fontSize: 28.sp)), iconTheme: IconThemeData(size: 28.sp, color: const Color(0xff2E2B2B)),
iconTheme: IconThemeData(size: 28.sp, color: const Color(0xff2E2B2B)), appBarTheme: AppBarTheme(
appBarTheme: AppBarTheme( backgroundColor: const Color(0xFFFFFFFF),
backgroundColor: const Color(0xFFFFFFFF), elevation: 0,
elevation: 0, centerTitle: true,
centerTitle: true, iconTheme:
iconTheme: IconThemeData(color: const Color(0xff333333), size: 36.sp), IconThemeData(color: const Color(0xff333333), size: 36.sp),
titleTextStyle: TextStyle( titleTextStyle: TextStyle(
color: const Color(0xff333333), color: const Color(0xff333333),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
fontSize: 36.sp), fontSize: 36.sp),
),
splashColor: Colors.transparent,
//
highlightColor: Colors.transparent,
), ),
splashColor: Colors.transparent, debugShowCheckedModeBanner: false,
// getPages: AppRouters.routePages,
highlightColor: Colors.transparent, builder: EasyLoading.init(),
), initialBinding: AppBindings(),
debugShowCheckedModeBanner: false, initialRoute: initialRoute );
getPages: AppRouters.routePages, }
builder: EasyLoading.init(),
initialBinding: AppBindings(),
initialRoute: '/');
@override @override
void initState() { void initState() {
@ -153,3 +167,15 @@ Future<bool> getLoginStatus() async {
} }
return false; return false;
} }
Future<void> getAgreePrivacyShowUpdate() async {
final String? data = await Storage.getString(isAgreePrivacy);
if (data == isAgreePrivacy) {
AppFirstEnterHandle().getAppFirstEnter(isShowUpdateVersion);
}
}
Future<void> getAppInfo() async {
final GetAppInfo entity = await ApiRepository.to.getAppInfo();
CustomerTool.init(entity.data?.wechatServiceUrl ?? '');
}

View File

@ -486,6 +486,8 @@ abstract class Routers {
'/advancedFunctionRecordPage'; // '/advancedFunctionRecordPage'; //
static const String administratorAssociationLockPage = static const String administratorAssociationLockPage =
'/administratorAssociationLockPage'; //-- '/administratorAssociationLockPage'; //--
static const String login = '/login'; //
} }
abstract class AppRouters { abstract class AppRouters {
@ -494,6 +496,12 @@ abstract class AppRouters {
name: Routers.initial, name: Routers.initial,
page: () => const StarLockApplication(), page: () => const StarLockApplication(),
), ),
GetPage<dynamic>(
name: Routers.login,
page: () => F.sw(
skyCall: () => const StarLockLoginPage(),
xhjCall: () => const StarLockLoginXHJPage()),
),
GetPage<dynamic>( GetPage<dynamic>(
name: Routers.starLockMain, name: Routers.starLockMain,
page: () => F.sw( page: () => F.sw(

View File

@ -3,14 +3,17 @@ import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/login/login/starLock_login_state.dart';
import 'package:star_lock/tools/appFirstEnterHandle.dart';
import 'package:star_lock/tools/customer_tool.dart'; import 'package:star_lock/tools/customer_tool.dart';
import 'package:star_lock/tools/storage.dart';
import '../../appRouters.dart'; import '../../appRouters.dart';
import '../../app_settings/app_colors.dart'; import '../../app_settings/app_colors.dart';
import '../../common/XSConstantMacro/XSConstantMacro.dart'; import '../../common/XSConstantMacro/XSConstantMacro.dart';
import '../../tools/commonItem.dart'; import '../../tools/commonItem.dart';
import '../../tools/tf_loginInput.dart';
import '../../tools/submitBtn.dart'; import '../../tools/submitBtn.dart';
import '../../tools/tf_loginInput.dart';
import '../../tools/titleAppBar.dart'; import '../../tools/titleAppBar.dart';
import '../../translations/trans_lib.dart'; import '../../translations/trans_lib.dart';
import 'starLock_login_logic.dart'; import 'starLock_login_logic.dart';
@ -23,8 +26,16 @@ class StarLockLoginPage extends StatefulWidget {
} }
class _StarLockLoginPageState extends State<StarLockLoginPage> { class _StarLockLoginPageState extends State<StarLockLoginPage> {
final logic = Get.put(StarLockLoginLogic()); final StarLockLoginLogic logic = Get.put(StarLockLoginLogic());
final state = Get.find<StarLockLoginLogic>().state; final StarLockLoginState state = Get.find<StarLockLoginLogic>().state;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
AppFirstEnterHandle().getAppFirstEnter(isAgreePrivacy);
});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -35,7 +46,7 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
barTitle: TranslationLoader.lanKeys!.login!.tr, barTitle: TranslationLoader.lanKeys!.login!.tr,
haveBack: false, haveBack: false,
backgroundColor: AppColors.mainColor, backgroundColor: AppColors.mainColor,
actionsList: [ actionsList: <Widget>[
const IconButton( const IconButton(
onPressed: CustomerTool.openCustomerService, onPressed: CustomerTool.openCustomerService,
icon: Icon( icon: Icon(
@ -62,7 +73,7 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
), ),
body: ListView( body: ListView(
padding: EdgeInsets.only(top: 120.h, left: 40.w, right: 40.w), padding: EdgeInsets.only(top: 120.h, left: 40.w, right: 40.w),
children: [ children: <Widget>[
Container( Container(
padding: EdgeInsets.all(10.w), padding: EdgeInsets.all(10.w),
child: Center( child: Center(
@ -111,7 +122,7 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
hintText: hintText:
TranslationLoader.lanKeys!.pleaseEnterNumberOrEmail!.tr, TranslationLoader.lanKeys!.pleaseEnterNumberOrEmail!.tr,
// keyboardType: TextInputType.number, // keyboardType: TextInputType.number,
inputFormatters: [ inputFormatters: <TextInputFormatter>[
// FilteringTextInputFormatter.allow(RegExp('[0-9]')), // FilteringTextInputFormatter.allow(RegExp('[0-9]')),
LengthLimitingTextInputFormatter(30), LengthLimitingTextInputFormatter(30),
]), ]),
@ -135,13 +146,13 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
), ),
hintText: hintText:
"${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.password!.tr}", "${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.password!.tr}",
inputFormatters: [ inputFormatters: <TextInputFormatter>[
LengthLimitingTextInputFormatter(20), LengthLimitingTextInputFormatter(20),
]), ]),
// SizedBox(height: 15.h), // SizedBox(height: 15.h),
Row( Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: <Widget>[
Obx(() => GestureDetector( Obx(() => GestureDetector(
onTap: () { onTap: () {
state.agree.value = !state.agree.value; state.agree.value = !state.agree.value;
@ -168,7 +179,7 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
text: TranslationLoader.lanKeys!.readAndAgree!.tr, text: TranslationLoader.lanKeys!.readAndAgree!.tr,
style: TextStyle( style: TextStyle(
color: const Color(0xff333333), fontSize: 20.sp), color: const Color(0xff333333), fontSize: 20.sp),
children: [ children: <InlineSpan>[
WidgetSpan( WidgetSpan(
alignment: PlaceholderAlignment.middle, alignment: PlaceholderAlignment.middle,
child: GestureDetector( child: GestureDetector(
@ -178,7 +189,7 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
color: AppColors.mainColor, color: AppColors.mainColor,
fontSize: 20.sp)), fontSize: 20.sp)),
onTap: () { onTap: () {
Get.toNamed(Routers.webviewShowPage, arguments: { Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{
'url': XSConstantMacro.userAgreementURL, 'url': XSConstantMacro.userAgreementURL,
'title': '用户协议'.tr 'title': '用户协议'.tr
}); });
@ -193,7 +204,7 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
color: AppColors.mainColor, color: AppColors.mainColor,
fontSize: 20.sp)), fontSize: 20.sp)),
onTap: () { onTap: () {
Get.toNamed(Routers.webviewShowPage, arguments: { Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{
'url': XSConstantMacro.privacyPolicyURL, 'url': XSConstantMacro.privacyPolicyURL,
'title': '隐私政策'.tr 'title': '隐私政策'.tr
}); });
@ -224,7 +235,7 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
SizedBox(height: 50.w), SizedBox(height: 50.w),
Row( Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: <Widget>[
GestureDetector( GestureDetector(
child: SizedBox( child: SizedBox(
// width: 150.w, // width: 150.w,
@ -284,9 +295,9 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
width: 1.sp, width: 1.sp,
// height: 200.h, // height: 200.h,
child: Column( child: Column(
children: [ children: <Widget>[
Row( Row(
children: [ children: <Widget>[
Container( Container(
color: Colors.red, color: Colors.red,
child: Image.asset( child: Image.asset(

View File

@ -1,20 +1,18 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/login/login/starLock_login_state.dart'; import 'package:star_lock/login/login/starLock_login_state.dart';
import 'package:star_lock/tools/appFirstEnterHandle.dart';
import 'package:star_lock/tools/customer_tool.dart'; import 'package:star_lock/tools/customer_tool.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:star_lock/tools/storage.dart';
import '../../appRouters.dart'; import '../../appRouters.dart';
import '../../app_settings/app_colors.dart'; import '../../app_settings/app_colors.dart';
import '../../common/XSConstantMacro/XSConstantMacro.dart'; import '../../common/XSConstantMacro/XSConstantMacro.dart';
import '../../tools/commonItem.dart';
import '../../tools/tf_loginInput.dart';
import '../../tools/submitBtn.dart'; import '../../tools/submitBtn.dart';
import '../../tools/titleAppBar.dart'; import '../../tools/tf_loginInput.dart';
import '../../translations/trans_lib.dart'; import '../../translations/trans_lib.dart';
import 'starLock_login_logic.dart'; import 'starLock_login_logic.dart';
@ -29,290 +27,296 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
final StarLockLoginLogic logic = Get.put(StarLockLoginLogic()); final StarLockLoginLogic logic = Get.put(StarLockLoginLogic());
final StarLockLoginState state = Get.find<StarLockLoginLogic>().state; final StarLockLoginState state = Get.find<StarLockLoginLogic>().state;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
AppFirstEnterHandle().getAppFirstEnter(isAgreePrivacy);
});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
resizeToAvoidBottomInset: false, resizeToAvoidBottomInset: false,
backgroundColor: const Color(0xFFFFFFFF), backgroundColor: const Color(0xFFFFFFFF),
body: ListView( body: SizedBox(
padding: EdgeInsets.only( width: Get.width,
top: 110.h, child: ListView(
), padding: EdgeInsets.only(
children: <Widget>[ top: 110.h,
Padding(
padding: EdgeInsets.symmetric(horizontal: 40.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: [
Expanded(
child: Text(
'${"欢迎使用".tr}${F.title}',
style: TextStyle(
color: AppColors.darkGrayTextColor,
fontSize: 48.sp,
),
),
),
IconButton(
onPressed: CustomerTool.openCustomerService,
icon: Icon(
Icons.support_agent,
color: AppColors.mainColor,
)),
],
),
SizedBox(height: 30.h),
GestureDetector(
onTap: () async {
final result =
await Get.toNamed(Routers.selectCountryRegionPage);
if (result != null) {
result as Map<String, dynamic>;
state.countryCode.value = result['code'];
state.countryName.value = result['countryName'];
}
},
child: Container(
color: Colors.transparent,
child: Row(
children: <Widget>[
SizedBox(
width: 5.w,
),
Text(
TranslationLoader.lanKeys!.countryAndRegion!.tr,
style: TextStyle(
fontSize: 22.sp,
color: AppColors.darkGrayTextColor),
),
SizedBox(
width: 40.w,
),
Obx(() {
return Text(
'${state.countryName.value} +${state.countryCode.value}',
style: TextStyle(
fontSize: 22.sp, color: AppColors.mainColor),
);
})
],
),
),
),
LoginInput(
controller: state.emailOrPhoneController,
onchangeAction: (v) {
logic.checkNext(state.emailOrPhoneController);
},
leftWidget: Padding(
padding: EdgeInsets.only(
top: 30.w,
bottom: 20.w,
),
),
rightSlot: IconButton(
icon: const Icon(Icons.close),
onPressed: () {},
),
label: TranslationLoader
.lanKeys!.pleaseEnterNumberOrEmail!.tr,
// keyboardType: TextInputType.number,
inputFormatters: <TextInputFormatter>[
LengthLimitingTextInputFormatter(30),
]),
LoginInput(
controller: state.pwdController,
onchangeAction: (v) {
logic.checkNext(state.pwdController);
},
isPwd: true,
// isSuffixIcon: 2,
leftWidget: Padding(
padding: EdgeInsets.only(
top: 30.w,
bottom: 20.w,
),
),
label:
'${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.password!.tr}',
inputFormatters: <TextInputFormatter>[
LengthLimitingTextInputFormatter(20),
]),
SizedBox(height: 10.h),
],
),
), ),
GestureDetector( children: <Widget>[
onTap: () { Padding(
state.agree.value = !state.agree.value; padding: EdgeInsets.symmetric(horizontal: 40.w),
logic.changeAgreeState(); child: Column(
}, crossAxisAlignment: CrossAxisAlignment.start,
child: Container(
color: Colors.transparent,
padding: EdgeInsets.symmetric(vertical: 30.h, horizontal: 40.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Obx( Row(
() => Container( children: <Widget>[
padding: EdgeInsets.only( Expanded(
left: 5.w, child: Text(
right: 10.w, '${"欢迎使用".tr}${F.title}',
style: TextStyle(
color: AppColors.darkGrayTextColor,
fontSize: 48.sp,
),
),
), ),
child: Image.asset( IconButton(
state.agree.value onPressed: CustomerTool.openCustomerService,
? 'images/icon_round_select.png' icon: Icon(
: 'images/icon_round_unSelect.png', Icons.support_agent,
width: 20.w, color: AppColors.mainColor,
height: 20.w, )),
],
),
SizedBox(height: 30.h),
GestureDetector(
onTap: () async {
final result =
await Get.toNamed(Routers.selectCountryRegionPage);
if (result != null) {
result as Map<String, dynamic>;
state.countryCode.value = result['code'];
state.countryName.value = result['countryName'];
}
},
child: Container(
color: Colors.transparent,
child: Row(
children: <Widget>[
SizedBox(
width: 5.w,
),
Text(
TranslationLoader.lanKeys!.countryAndRegion!.tr,
style: TextStyle(
fontSize: 22.sp,
color: AppColors.darkGrayTextColor),
),
SizedBox(
width: 40.w,
),
Obx(() {
return Text(
'${state.countryName.value} +${state.countryCode.value}',
style: TextStyle(
fontSize: 22.sp,
color: AppColors.mainColor),
);
})
],
), ),
), ),
), ),
Flexible( LoginInput(
child: RichText( controller: state.emailOrPhoneController,
text: TextSpan( onchangeAction: (v) {
text: TranslationLoader.lanKeys!.readAndAgree!.tr, logic.checkNext(state.emailOrPhoneController);
style: TextStyle( },
color: const Color(0xff333333), fontSize: 20.sp), leftWidget: Padding(
children: <InlineSpan>[ padding: EdgeInsets.only(
WidgetSpan( top: 30.w,
alignment: PlaceholderAlignment.middle, bottom: 20.w,
child: GestureDetector( ),
child: Text( ),
'${TranslationLoader.lanKeys!.userAgreement!.tr}', rightSlot: IconButton(
style: TextStyle( icon: const Icon(Icons.close),
color: AppColors.mainColor, onPressed: () {},
fontSize: 20.sp)), ),
onTap: () { label: TranslationLoader
Get.toNamed(Routers.webviewShowPage, .lanKeys!.pleaseEnterNumberOrEmail!.tr,
arguments: <String, String>{ // keyboardType: TextInputType.number,
'url': XSConstantMacro.userAgreementURL, inputFormatters: <TextInputFormatter>[
'title': '用户协议'.tr LengthLimitingTextInputFormatter(30),
}); ]),
}, LoginInput(
)), controller: state.pwdController,
WidgetSpan( onchangeAction: (v) {
alignment: PlaceholderAlignment.middle, logic.checkNext(state.pwdController);
child: GestureDetector( },
child: Text( isPwd: true,
'${TranslationLoader.lanKeys!.privacyPolicy!.tr}', // isSuffixIcon: 2,
style: TextStyle( leftWidget: Padding(
color: AppColors.mainColor, padding: EdgeInsets.only(
fontSize: 20.sp)), top: 30.w,
onTap: () { bottom: 20.w,
Get.toNamed(Routers.webviewShowPage, ),
arguments: <String, String>{ ),
'url': XSConstantMacro.privacyPolicyURL, label:
'title': '隐私政策'.tr '${TranslationLoader.lanKeys!.pleaseEnter!.tr}${TranslationLoader.lanKeys!.password!.tr}',
}); inputFormatters: <TextInputFormatter>[
}, LengthLimitingTextInputFormatter(20),
)), ]),
], SizedBox(height: 10.h),
)),
)
], ],
), ),
), ),
), GestureDetector(
Padding( onTap: () {
padding: EdgeInsets.symmetric(horizontal: 40.w), state.agree.value = !state.agree.value;
child: Column( logic.changeAgreeState();
crossAxisAlignment: CrossAxisAlignment.start, },
children: <Widget>[ child: Container(
SizedBox(height: 5.w), color: Colors.transparent,
Obx(() => SubmitBtn( padding:
btnName: TranslationLoader.lanKeys!.login!.tr, EdgeInsets.symmetric(vertical: 30.h, horizontal: 40.w),
fontSize: 28.sp, child: Row(
borderRadius: 20.w, mainAxisAlignment: MainAxisAlignment.start,
padding: EdgeInsets.only(top: 25.w, bottom: 25.w),
isDisabled: state.canNext.value,
onClick: state.canNext.value
? () {
if (state.agree.value == false) {
logic.showToast('请先同意用户协议及隐私政策'.tr);
return;
} else {
logic.login();
}
}
: null)),
SizedBox(height: 10.h),
SizedBox(
width: Get.width,
child: ElevatedButton(
onPressed: () async {
final dynamic data =
await Get.toNamed(Routers.starLockRegisterPage);
if (data != null) {
state.emailOrPhoneController.text =
data['phoneOrEmailStr'];
logic.checkNext(state.emailOrPhoneController);
state.pwdController.text = data['pwd'];
logic.checkNext(state.pwdController);
setState(() {});
}
},
style: ElevatedButton.styleFrom(
backgroundColor: AppColors.mainColor),
child: Text(
TranslationLoader.lanKeys!.register!.tr,
style: TextStyle(fontSize: 22.sp, color: Colors.white),
),
),
),
SizedBox(height: 5.w),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[ children: <Widget>[
GestureDetector( Obx(
child: SizedBox( () => Container(
// width: 150.w, padding: EdgeInsets.only(
height: 50.h, left: 5.w,
// color: Colors.red, right: 10.w,
child: Center( ),
child: Text( child: Image.asset(
'${TranslationLoader.lanKeys!.forgetPassword!.tr}', state.agree.value
style: TextStyle( ? 'images/icon_round_select.png'
fontSize: 22.sp, : 'images/icon_round_unSelect.png',
color: AppColors.mainColor)), width: 20.w,
height: 20.w,
), ),
), ),
onTap: () {
Navigator.pushNamed(
context, Routers.starLockForgetPasswordPage);
},
), ),
Expanded( Row(children: <Widget>[
child: SizedBox( Text(TranslationLoader.lanKeys!.readAndAgree!.tr,
width: 10.sp, style: TextStyle(
)), color: const Color(0xff333333),
if (F.isLite) fontSize: 20.sp)),
Container() GestureDetector(
else child: Text(
'${TranslationLoader.lanKeys!.userAgreement!.tr}',
style: TextStyle(
color: AppColors.mainColor,
fontSize: 20.sp)),
onTap: () {
Get.toNamed(Routers.webviewShowPage,
arguments: <String, String>{
'url': XSConstantMacro.userAgreementURL,
'title': '用户协议'.tr
});
},
),
GestureDetector(
child: Text(
'${TranslationLoader.lanKeys!.privacyPolicy!.tr}',
style: TextStyle(
color: AppColors.mainColor,
fontSize: 20.sp)),
onTap: () {
Get.toNamed(Routers.webviewShowPage,
arguments: <String, String>{
'url': XSConstantMacro.privacyPolicyURL,
'title': '隐私政策'.tr
});
},
),
]),
],
),
),
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 40.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
SizedBox(height: 5.w),
Obx(() => SubmitBtn(
btnName: TranslationLoader.lanKeys!.login!.tr,
fontSize: 28.sp,
borderRadius: 20.w,
padding: EdgeInsets.only(top: 25.w, bottom: 25.w),
isDisabled: state.canNext.value,
onClick: state.canNext.value
? () {
if (state.agree.value == false) {
logic.showToast('请先同意用户协议及隐私政策'.tr);
return;
} else {
logic.login();
}
}
: null)),
SizedBox(height: 10.h),
SizedBox(
width: Get.width,
child: ElevatedButton(
onPressed: () async {
final dynamic data =
await Get.toNamed(Routers.starLockRegisterPage);
if (data != null) {
state.emailOrPhoneController.text =
data['phoneOrEmailStr'];
logic.checkNext(state.emailOrPhoneController);
state.pwdController.text = data['pwd'];
logic.checkNext(state.pwdController);
setState(() {});
}
},
style: ElevatedButton.styleFrom(
backgroundColor: AppColors.mainColor),
child: Text(
TranslationLoader.lanKeys!.register!.tr,
style:
TextStyle(fontSize: 22.sp, color: Colors.white),
),
),
),
SizedBox(height: 5.w),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
GestureDetector( GestureDetector(
child: SizedBox( child: SizedBox(
// width: 150.w, // width: 150.w,
height: 50.h, height: 50.h,
// color: Colors.red, // color: Colors.red,
child: Center( child: Center(
child: Text('演示模式'.tr, child: Text(
'${TranslationLoader.lanKeys!.forgetPassword!.tr}',
style: TextStyle( style: TextStyle(
fontSize: 22.sp, fontSize: 22.sp,
color: AppColors.mainColor)), color: AppColors.mainColor)),
), ),
), ),
onTap: () { onTap: () {
Get.toNamed(Routers.demoModeLockDetailPage); Navigator.pushNamed(
context, Routers.starLockForgetPasswordPage);
}, },
) ),
], Expanded(
), child: SizedBox(
], width: 10.sp,
), )),
) if (F.isLite)
], Container()
else
GestureDetector(
child: SizedBox(
// width: 150.w,
height: 50.h,
// color: Colors.red,
child: Center(
child: Text('演示模式'.tr,
style: TextStyle(
fontSize: 22.sp,
color: AppColors.mainColor)),
),
),
onTap: () {
Get.toNamed(Routers.demoModeLockDetailPage);
},
)
],
),
],
),
)
],
),
)); ));
} }

View File

@ -1,14 +1,16 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_bugly_plugin/flutter_bugly_plugin.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/mine/about/debug/debug_tool.dart';
import 'package:star_lock/network/api_provider.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/bugly/bugly_tool.dart'; import 'package:star_lock/tools/bugly/bugly_tool.dart';
import 'package:star_lock/tools/device_info_service.dart'; import 'package:star_lock/tools/device_info_service.dart';
import 'package:star_lock/tools/platform_info_services.dart'; import 'package:star_lock/tools/platform_info_services.dart';
import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/tools/xs_jPhush.dart'; import 'package:star_lock/tools/xs_jPhush.dart';
import 'package:star_lock/translations/trans_lib.dart'; import 'package:star_lock/translations/trans_lib.dart';
@ -25,12 +27,20 @@ FutureOr<void> main() async {
// //
await _initTranslation(); await _initTranslation();
// bugly错误日志监控 final bool isLogin = await getLoginStatus();
await BuglyTool.init(); if (isLogin) {
await privacySDKInitialization();
Future<void>.delayed(const Duration(milliseconds: 500), getAppInfo);
}
await XSJPushProvider().initJPushService(); WidgetsBinding.instance.addPostFrameCallback((_) async {
final bool? openDeBug = await Storage.getBool(isOpenDeBug);
if (openDeBug == true) {
DeBug.showFloatWidget();
}
});
runApp(const MyApp()); runApp(MyApp(isLogin: isLogin));
if (AppPlatform.isAndroid) { if (AppPlatform.isAndroid) {
const SystemUiOverlayStyle systemUiOverlayStyle = const SystemUiOverlayStyle systemUiOverlayStyle =
@ -40,16 +50,18 @@ FutureOr<void> main() async {
} }
// //
Future _initTranslation() async => TranslationLoader.loadTranslation( Future<void> _initTranslation() async => TranslationLoader.loadTranslation(
zhSource: 'images/lan/lan_zh.json', zhSource: 'images/lan/lan_zh.json',
enSource: 'images/lan/lan_en.json', enSource: 'images/lan/lan_en.json',
keySource: 'images/lan/lan_keys.json', keySource: 'images/lan/lan_keys.json',
); );
// //
Future _setCommonServices() async { Future<void> _setCommonServices() async {
await Get.putAsync(() => StoreService().init()); await Get.putAsync(() => StoreService().init());
await Get.putAsync(() => PlatformInfoService().init()); await Get.putAsync(() => PlatformInfoService().init());
Get.put(ApiProvider());
Get.put(ApiRepository(Get.find<ApiProvider>()));
if (F.isLite) { if (F.isLite) {
// //
// await Get.putAsync(() => DeviceInfoService().init()); // await Get.putAsync(() => DeviceInfoService().init());
@ -57,3 +69,9 @@ Future _setCommonServices() async {
await Get.putAsync(() => DeviceInfoService().init()); await Get.putAsync(() => DeviceInfoService().init());
} }
} }
//
Future<void> privacySDKInitialization() async {
await BuglyTool.init();
await XSJPushProvider().initJPushService();
}

View File

@ -1,5 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:star_lock/login/login/entity/LoginEntity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesListSMSTemplate/customSMSTemplateList_entity.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesListSMSTemplate/customSMSTemplateList_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesListSMSTemplate/customSMSTemplateList_state.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesListSMSTemplate/customSMSTemplateList_state.dart';
import 'package:star_lock/tools/regularExpression.dart'; import 'package:star_lock/tools/regularExpression.dart';
@ -12,9 +13,15 @@ class CustomSMSTemplateListLogic extends BaseGetXController {
CustomSMSTemplateListState state = CustomSMSTemplateListState(); CustomSMSTemplateListState state = CustomSMSTemplateListState();
// //
Future<void> getSMSTemplateListRequest() async { Future<void> getSMSTemplateListRequest({required bool isRefresh}) async {
//
if (isRefresh) {
state.smsTemplateList.clear();
pageNo = 1;
}
final CustomSMSTemplateListEntity entity = await ApiRepository.to final CustomSMSTemplateListEntity entity = await ApiRepository.to
.getSMSTemplateList(type: 1, pageNo: 1, pageSize: 20); .getSMSTemplateList(
type: 1, pageNo: pageNo, pageSize: int.parse(pageSize));
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
state.smsTemplateList.value = state.smsTemplateList.value =
entity.data?.list ?? <CustomSMSTemplateItem>[]; entity.data?.list ?? <CustomSMSTemplateItem>[];
@ -22,6 +29,15 @@ class CustomSMSTemplateListLogic extends BaseGetXController {
} }
} }
//
Future<void> deleteSMSTemplateRequest({required int id}) async {
final LoginEntity entity =
await ApiRepository.to.deleteTemplateInfo(id: id);
if (entity.errorCode!.codeIsSuccessful) {
getSMSTemplateListRequest(isRefresh: true);
}
}
List<TextSpan> buildElectronicKeySpan( List<TextSpan> buildElectronicKeySpan(
{required CustomSMSTemplateItem templateData}) { {required CustomSMSTemplateItem templateData}) {
final List<TextSpan> textSpans = <TextSpan>[]; final List<TextSpan> textSpans = <TextSpan>[];

View File

@ -1,11 +1,14 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_slidable/flutter_slidable.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesAddSMSTemplate/newSMSTemplate_entity.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesAddSMSTemplate/newSMSTemplate_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesListSMSTemplate/customSMSTemplateList_entity.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesListSMSTemplate/customSMSTemplateList_entity.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesListSMSTemplate/customSMSTemplateList_logic.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesListSMSTemplate/customSMSTemplateList_logic.dart';
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesListSMSTemplate/customSMSTemplateList_state.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesListSMSTemplate/customSMSTemplateList_state.dart';
import 'package:star_lock/tools/EasyRefreshTool.dart';
import 'package:star_lock/tools/noData.dart'; import 'package:star_lock/tools/noData.dart';
import 'package:star_lock/tools/showTipView.dart';
import '../../../../appRouters.dart'; import '../../../../appRouters.dart';
import '../../../../app_settings/app_colors.dart'; import '../../../../app_settings/app_colors.dart';
@ -30,7 +33,7 @@ class _CustomSMSTemplateListPageState extends State<CustomSMSTemplateListPage> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
logic.getSMSTemplateListRequest(); logic.getSMSTemplateListRequest(isRefresh: true);
} }
@override @override
@ -41,29 +44,37 @@ class _CustomSMSTemplateListPageState extends State<CustomSMSTemplateListPage> {
barTitle: '自定义短信模版'.tr, barTitle: '自定义短信模版'.tr,
haveBack: true, haveBack: true,
backgroundColor: AppColors.mainColor), backgroundColor: AppColors.mainColor),
body: Column( body: EasyRefreshTool(
children: <Widget>[ onRefresh: () {
Obx(() => Visibility( logic.getSMSTemplateListRequest(isRefresh: true);
child: _topTipWidget(), },
visible: !state.isVip.value, onLoad: () {
)), logic.getSMSTemplateListRequest(isRefresh: false);
Expanded(child: Obx(buildMainUI)), },
SubmitBtn( child: Column(
btnName: TranslationLoader.lanKeys!.creatingANewTemplate!.tr, children: <Widget>[
borderRadius: 20.w, Obx(() => Visibility(
margin: EdgeInsets.only( child: _topTipWidget(),
left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), visible: !state.isVip.value,
padding: EdgeInsets.only(top: 25.w, bottom: 25.w), )),
onClick: () async { Expanded(child: Obx(buildMainUI)),
final result = await Get.toNamed(Routers.newSMSTemplatePage); SubmitBtn(
if (result != null) { btnName: TranslationLoader.lanKeys!.creatingANewTemplate!.tr,
logic.getSMSTemplateListRequest(); borderRadius: 20.w,
} margin: EdgeInsets.only(
}), left: 30.w, right: 30.w, top: 30.w, bottom: 30.w),
SizedBox( padding: EdgeInsets.only(top: 25.w, bottom: 25.w),
height: 40.h, onClick: () async {
) final result = await Get.toNamed(Routers.newSMSTemplatePage);
], if (result != null) {
logic.getSMSTemplateListRequest(isRefresh: true);
}
}),
SizedBox(
height: 40.h,
)
],
),
), ),
); );
} }
@ -139,13 +150,36 @@ class _CustomSMSTemplateListPageState extends State<CustomSMSTemplateListPage> {
Widget buildMainUI() { Widget buildMainUI() {
return state.smsTemplateList.isNotEmpty return state.smsTemplateList.isNotEmpty
? ListView.builder( ? SlidableAutoCloseBehavior(
itemCount: state.smsTemplateList.length, child: ListView.builder(
itemBuilder: (BuildContext c, int index) { itemCount: state.smsTemplateList.length,
final CustomSMSTemplateItem itemData = itemBuilder: (BuildContext c, int index) {
state.smsTemplateList[index]; final CustomSMSTemplateItem itemData =
return _valueAddedServicesListSMSTemplateItem(itemData); state.smsTemplateList[index];
}) return Slidable(
key: ValueKey(itemData.id),
endActionPane: ActionPane(
extentRatio: 0.2,
motion: const ScrollMotion(),
children: <Widget>[
SlidableAction(
onPressed: (BuildContext context) {
ShowTipView()
.showIosTipWithContentDialog('是否删除?'.tr, () {
logic.deleteSMSTemplateRequest(
id: itemData.id ?? 0);
});
},
backgroundColor: Colors.red,
foregroundColor: Colors.white,
label: '删除'.tr,
padding: EdgeInsets.only(left: 5.w, right: 5.w),
),
],
),
child: _valueAddedServicesListSMSTemplateItem(itemData));
}),
)
: NoData(); : NoData();
} }
@ -166,7 +200,7 @@ class _CustomSMSTemplateListPageState extends State<CustomSMSTemplateListPage> {
'currentTemplate': templateData 'currentTemplate': templateData
}); });
if (result != null) { if (result != null) {
logic.getSMSTemplateListRequest(); logic.getSMSTemplateListRequest(isRefresh: true);
} }
}, },
child: Container( child: Container(

View File

@ -251,4 +251,5 @@ abstract class Api {
final String addSMSTemplateURL = '/v2/service/addSmsTemplate'; // final String addSMSTemplateURL = '/v2/service/addSmsTemplate'; //
final String keydetail = ' /key/detail'; // final String keydetail = ' /key/detail'; //
final String updateTemplateInfoURL = '/v2/service/update'; // final String updateTemplateInfoURL = '/v2/service/update'; //
final String deleteTemplateURL = '/v2/service/delete'; //
} }

View File

@ -2212,6 +2212,12 @@ class ApiProvider extends BaseProvider {
}), }),
isUnShowLoading: true, isUnShowLoading: true,
); );
Future<Response<dynamic>> deleteTemplateInfo(int id) => post(
deleteTemplateURL.toUrl,
jsonEncode(<String, dynamic>{'id': id}),
isUnShowLoading: true,
);
} }
extension ExtensionString on String { extension ExtensionString on String {

View File

@ -2231,4 +2231,10 @@ class ApiRepository {
await apiProvider.updateTemplateInfo(id, name, regards, tips); await apiProvider.updateTemplateInfo(id, name, regards, tips);
return LoginEntity.fromJson(res.body); return LoginEntity.fromJson(res.body);
} }
//
Future<LoginEntity> deleteTemplateInfo({required int id}) async {
final Response<dynamic> res = await apiProvider.deleteTemplateInfo(id);
return LoginEntity.fromJson(res.body);
}
} }

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:star_lock/app.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/login/login/app_get_version.dart'; import 'package:star_lock/login/login/app_get_version.dart';
import 'package:star_lock/login/login/starLock_login_page.dart'; import 'package:star_lock/login/login/starLock_login_page.dart';
@ -23,12 +24,7 @@ class _StarLockApplicationState extends State<StarLockApplication> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
bool? openDeBug = await Storage.getBool(isOpenDeBug);
if (openDeBug == true) {
DeBug.showFloatWidget();
}
});
} }
@override @override
@ -37,7 +33,7 @@ class _StarLockApplicationState extends State<StarLockApplication> {
return FutureBuilder<bool>( return FutureBuilder<bool>(
future: getLoginStatus(), future: getLoginStatus(),
builder: (context, snapshot) { builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) { if (snapshot.connectionState == ConnectionState.waiting) {
// //
return const CircularProgressIndicator(); return const CircularProgressIndicator();
@ -66,23 +62,5 @@ class _StarLockApplicationState extends State<StarLockApplication> {
); );
} }
Future<bool> getLoginStatus() async {
final data = await Storage.getString(saveUserLoginData);
if (data != null && data.isNotEmpty) {
return true;
}
return false;
}
Future<void> getAgreePrivacyShowUpdate() async {
final data = await Storage.getString(isAgreePrivacy);
if (data == isAgreePrivacy) {
AppFirstEnterHandle().getAppFirstEnter(isShowUpdateVersion);
}
}
Future<void> getAppInfo() async {
final GetAppInfo entity = await ApiRepository.to.getAppInfo();
CustomerTool.init(entity.data?.wechatServiceUrl ?? '');
}
} }

View File

@ -6,14 +6,18 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart'; import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/app_settings/app_colors.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/login/login/app_get_version.dart'; import 'package:star_lock/login/login/app_get_version.dart';
import 'package:star_lock/main.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/customer_tool.dart'; import 'package:star_lock/tools/customer_tool.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import '../versionUndate/versionUndateTool.dart'; import '../versionUndate/versionUndateTool.dart';
import 'bugly/bugly_tool.dart';
import 'xs_jPhush.dart';
class AppFirstEnterHandle { class AppFirstEnterHandle {
Future<void> getAppFirstEnter(String flagStr) async { Future<void> getAppFirstEnter(String flagStr) async {
@ -24,6 +28,7 @@ class AppFirstEnterHandle {
await showPrivacyAgreementAlert(); await showPrivacyAgreementAlert();
} }
getAppInfo(); getAppInfo();
await privacySDKInitialization();
break; break;
case isAgreePosition: // case isAgreePosition: //
if (getFlag != isAgreePosition) { if (getFlag != isAgreePosition) {
@ -49,7 +54,7 @@ class AppFirstEnterHandle {
Future<void> showPrivacyAgreementAlert() async { Future<void> showPrivacyAgreementAlert() async {
await showCupertinoDialog( await showCupertinoDialog(
context: Get.context!, context: Get.context!,
builder: (context) { builder: (BuildContext context) {
return PopScope( return PopScope(
canPop: false, canPop: false,
child: F.sw( child: F.sw(
@ -72,7 +77,7 @@ class AppFirstEnterHandle {
TextSpan( TextSpan(
text: '感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读'.tr, text: '感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读'.tr,
style: const TextStyle(fontSize: 16.0), style: const TextStyle(fontSize: 16.0),
children: [ children: <InlineSpan>[
TextSpan( TextSpan(
text: '《用户协议》'.tr, text: '《用户协议》'.tr,
style: const TextStyle( style: const TextStyle(
@ -80,7 +85,7 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () { ..onTap = () {
// //
Get.toNamed(Routers.webviewShowPage, arguments: { Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{
"url": XSConstantMacro.userAgreementURL, "url": XSConstantMacro.userAgreementURL,
"title": '用户协议'.tr "title": '用户协议'.tr
}); });
@ -94,7 +99,7 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () { ..onTap = () {
// //
Get.toNamed(Routers.webviewShowPage, arguments: { Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{
"url": XSConstantMacro.privacyPolicyURL, "url": XSConstantMacro.privacyPolicyURL,
"title": '隐私政策'.tr "title": '隐私政策'.tr
}); });
@ -106,15 +111,13 @@ class AppFirstEnterHandle {
], ],
), ),
), ),
actions: [ actions: <Widget>[
CupertinoDialogAction( CupertinoDialogAction(
child: Text( child: Text(
'不同意'.tr, '不同意'.tr,
style: TextStyle(color: Colors.black), style: TextStyle(color: Colors.black),
), ),
onPressed: () { onPressed: _exitApp,
_exitApp();
},
), ),
CupertinoDialogAction( CupertinoDialogAction(
child: Text( child: Text(
@ -140,7 +143,7 @@ class AppFirstEnterHandle {
TextSpan( TextSpan(
text: '感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读'.tr, text: '感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读'.tr,
style: const TextStyle(fontSize: 16.0), style: const TextStyle(fontSize: 16.0),
children: [ children: <InlineSpan>[
TextSpan( TextSpan(
text: '《用户协议》'.tr, text: '《用户协议》'.tr,
style: TextStyle( style: TextStyle(
@ -149,7 +152,7 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () { ..onTap = () {
// //
Get.toNamed(Routers.webviewShowPage, arguments: { Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{
"url": XSConstantMacro.userAgreementURL, "url": XSConstantMacro.userAgreementURL,
"title": '用户协议'.tr "title": '用户协议'.tr
}); });
@ -164,7 +167,7 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () { ..onTap = () {
// //
Get.toNamed(Routers.webviewShowPage, arguments: { Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{
"url": XSConstantMacro.privacyPolicyURL, "url": XSConstantMacro.privacyPolicyURL,
"title": '隐私政策'.tr "title": '隐私政策'.tr
}); });
@ -176,15 +179,13 @@ class AppFirstEnterHandle {
], ],
), ),
), ),
actions: [ actions: <Widget>[
CupertinoDialogAction( CupertinoDialogAction(
child: Text( child: Text(
'不同意'.tr, '不同意'.tr,
style: TextStyle(color: Colors.black), style: TextStyle(color: Colors.black),
), ),
onPressed: () { onPressed: _exitApp,
_exitApp();
},
), ),
CupertinoDialogAction( CupertinoDialogAction(
child: Text( child: Text(
@ -205,13 +206,13 @@ class AppFirstEnterHandle {
void showPositionAlert() { void showPositionAlert() {
showCupertinoDialog( showCupertinoDialog(
context: Get.context!, context: Get.context!,
builder: (context) { builder: (BuildContext context) {
return PopScope( return PopScope(
canPop: false, canPop: false,
child: CupertinoAlertDialog( child: CupertinoAlertDialog(
title: const Text('位置权限'), title: const Text('位置权限'),
content: const Text('请开启位置权限,应用需要位置权限才可以完成智能锁和网关的蓝牙操作'), content: const Text('请开启位置权限,应用需要位置权限才可以完成智能锁和网关的蓝牙操作'),
actions: [ actions: <Widget>[
CupertinoDialogAction( CupertinoDialogAction(
child: Text('取消'.tr), child: Text('取消'.tr),
onPressed: () { onPressed: () {
@ -235,13 +236,13 @@ class AppFirstEnterHandle {
void showCameraAlert() { void showCameraAlert() {
showCupertinoDialog( showCupertinoDialog(
context: Get.context!, context: Get.context!,
builder: (context) { builder: (BuildContext context) {
return PopScope( return PopScope(
canPop: false, canPop: false,
child: CupertinoAlertDialog( child: CupertinoAlertDialog(
title: const Text('相机/相册权限'), title: const Text('相机/相册权限'),
content: const Text('请开启本地存储权限,允许应用读写设备上的照片及文件'), content: const Text('请开启本地存储权限,允许应用读写设备上的照片及文件'),
actions: [ actions: <Widget>[
CupertinoDialogAction( CupertinoDialogAction(
child: const Text('取消'), child: const Text('取消'),
onPressed: () { onPressed: () {

View File

@ -7,8 +7,6 @@ import '../../network/api_repository.dart';
class AppBindings extends Bindings { class AppBindings extends Bindings {
@override @override
void dependencies() { void dependencies() {
Get.put(ApiProvider());
Get.put(ApiRepository(Get.find<ApiProvider>()));
} }
} }

View File

@ -79,11 +79,11 @@ class ShowTipView {
content: Text(contentStr), content: Text(contentStr),
actions: <Widget>[ actions: <Widget>[
CupertinoDialogAction( CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.cancel!.tr), child: Text('取消', style: TextStyle(color: AppColors.mainColor)),
onPressed: Get.back, onPressed: Get.back,
), ),
CupertinoDialogAction( CupertinoDialogAction(
child: Text(TranslationLoader.lanKeys!.sure!.tr), child: Text('确定', style: TextStyle(color: AppColors.mainColor)),
onPressed: () { onPressed: () {
Get.back(); Get.back();
sureClick(); sureClick();
@ -96,7 +96,8 @@ class ShowTipView {
} }
void showTFViewAlertDialog(TextEditingController controller, String title, void showTFViewAlertDialog(TextEditingController controller, String title,
String tipTitle, Function sureClick, {List<TextInputFormatter>? inputFormatters}) { String tipTitle, Function sureClick,
{List<TextInputFormatter>? inputFormatters}) {
// //
showDialog( showDialog(
context: Get.context!, context: Get.context!,