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/blue/blue_manage.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/network/api_repository.dart';
import 'package:star_lock/tools/appFirstEnterHandle.dart';
import 'package:star_lock/tools/app_manager.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/translations/app_dept.dart';
@ -22,15 +26,13 @@ import 'tools/appRouteObserver.dart';
import 'tools/store_service.dart';
class MyApp extends StatefulWidget {
const MyApp({GlobalKey? key}) : super(key: key);
MyApp({required this.isLogin, GlobalKey? key}) : super(key: key);
bool isLogin;
@override
State<MyApp> createState() => _MyAppState();
}
// RouteObserver navigation observer.
// final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
@override
Widget build(BuildContext context) {
@ -39,10 +41,20 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
builder: (BuildContext w, Widget? a) => _initMaterialApp());
}
GetMaterialApp _initMaterialApp() => GetMaterialApp(
GetMaterialApp _initMaterialApp() {
//
String initialRoute;
if (widget.isLogin) {
initialRoute = Routers.starLockMain;
} else {
initialRoute = Routers.login;
}
return GetMaterialApp(
// enableLog: false,
title: F.navTitle,
navigatorObservers: <NavigatorObserver>[AppRouteObserver().routeObserver],
navigatorObservers: <NavigatorObserver>[
AppRouteObserver().routeObserver
],
translations: TranslationMessage(),
supportedLocales: appDept.deptSupportedLocales,
localizationsDelegates: const <LocalizationsDelegate<dynamic>>[
@ -53,16 +65,16 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
localeResolutionCallback:
(Locale? locale, Iterable<Locale> supportedLocales) {
if (!supportedLocales.contains(locale)) {
final int idx = appSupportedLocales.indexWhere(
(Locale element) => element.languageCode == locale!.languageCode);
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(code: '${locale!.languageCode}_${locale.countryCode}');
AppManager().setLanCode(
code: '${locale!.languageCode}_${locale.countryCode}');
return locale;
},
locale: StoreService.to.getLanguageCode()!.isNotEmpty
@ -90,7 +102,8 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
backgroundColor: const Color(0xFFFFFFFF),
elevation: 0,
centerTitle: true,
iconTheme: IconThemeData(color: const Color(0xff333333), size: 36.sp),
iconTheme:
IconThemeData(color: const Color(0xff333333), size: 36.sp),
titleTextStyle: TextStyle(
color: const Color(0xff333333),
fontWeight: FontWeight.w400,
@ -104,7 +117,8 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
getPages: AppRouters.routePages,
builder: EasyLoading.init(),
initialBinding: AppBindings(),
initialRoute: '/');
initialRoute: initialRoute );
}
@override
void initState() {
@ -153,3 +167,15 @@ Future<bool> getLoginStatus() async {
}
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'; //
static const String administratorAssociationLockPage =
'/administratorAssociationLockPage'; //--
static const String login = '/login'; //
}
abstract class AppRouters {
@ -494,6 +496,12 @@ abstract class AppRouters {
name: Routers.initial,
page: () => const StarLockApplication(),
),
GetPage<dynamic>(
name: Routers.login,
page: () => F.sw(
skyCall: () => const StarLockLoginPage(),
xhjCall: () => const StarLockLoginXHJPage()),
),
GetPage<dynamic>(
name: Routers.starLockMain,
page: () => F.sw(

View File

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

View File

@ -1,20 +1,18 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.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:url_launcher/url_launcher.dart';
import 'package:star_lock/tools/storage.dart';
import '../../appRouters.dart';
import '../../app_settings/app_colors.dart';
import '../../common/XSConstantMacro/XSConstantMacro.dart';
import '../../tools/commonItem.dart';
import '../../tools/tf_loginInput.dart';
import '../../tools/submitBtn.dart';
import '../../tools/titleAppBar.dart';
import '../../tools/tf_loginInput.dart';
import '../../translations/trans_lib.dart';
import 'starLock_login_logic.dart';
@ -29,12 +27,22 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
final StarLockLoginLogic logic = Get.put(StarLockLoginLogic());
final StarLockLoginState state = Get.find<StarLockLoginLogic>().state;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
AppFirstEnterHandle().getAppFirstEnter(isAgreePrivacy);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
backgroundColor: const Color(0xFFFFFFFF),
body: ListView(
body: SizedBox(
width: Get.width,
child: ListView(
padding: EdgeInsets.only(
top: 110.h,
),
@ -45,7 +53,7 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: [
children: <Widget>[
Expanded(
child: Text(
'${"欢迎使用".tr}${F.title}',
@ -94,7 +102,8 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
return Text(
'${state.countryName.value} +${state.countryCode.value}',
style: TextStyle(
fontSize: 22.sp, color: AppColors.mainColor),
fontSize: 22.sp,
color: AppColors.mainColor),
);
})
],
@ -151,7 +160,8 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
},
child: Container(
color: Colors.transparent,
padding: EdgeInsets.symmetric(vertical: 30.h, horizontal: 40.w),
padding:
EdgeInsets.symmetric(vertical: 30.h, horizontal: 40.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
@ -170,16 +180,12 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
),
),
),
Flexible(
child: RichText(
text: TextSpan(
text: TranslationLoader.lanKeys!.readAndAgree!.tr,
Row(children: <Widget>[
Text(TranslationLoader.lanKeys!.readAndAgree!.tr,
style: TextStyle(
color: const Color(0xff333333), fontSize: 20.sp),
children: <InlineSpan>[
WidgetSpan(
alignment: PlaceholderAlignment.middle,
child: GestureDetector(
color: const Color(0xff333333),
fontSize: 20.sp)),
GestureDetector(
child: Text(
'${TranslationLoader.lanKeys!.userAgreement!.tr}',
style: TextStyle(
@ -192,10 +198,8 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
'title': '用户协议'.tr
});
},
)),
WidgetSpan(
alignment: PlaceholderAlignment.middle,
child: GestureDetector(
),
GestureDetector(
child: Text(
'${TranslationLoader.lanKeys!.privacyPolicy!.tr}',
style: TextStyle(
@ -208,10 +212,8 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
'title': '隐私政策'.tr
});
},
)),
],
)),
)
),
]),
],
),
),
@ -258,7 +260,8 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
backgroundColor: AppColors.mainColor),
child: Text(
TranslationLoader.lanKeys!.register!.tr,
style: TextStyle(fontSize: 22.sp, color: Colors.white),
style:
TextStyle(fontSize: 22.sp, color: Colors.white),
),
),
),
@ -313,6 +316,7 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
),
)
],
),
));
}

View File

@ -1,14 +1,16 @@
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bugly_plugin/flutter_bugly_plugin.dart';
import 'package:get/get.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/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_jPhush.dart';
import 'package:star_lock/translations/trans_lib.dart';
@ -25,12 +27,20 @@ FutureOr<void> main() async {
//
await _initTranslation();
// bugly错误日志监控
await BuglyTool.init();
final bool isLogin = await getLoginStatus();
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) {
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',
enSource: 'images/lan/lan_en.json',
keySource: 'images/lan/lan_keys.json',
);
//
Future _setCommonServices() async {
Future<void> _setCommonServices() async {
await Get.putAsync(() => StoreService().init());
await Get.putAsync(() => PlatformInfoService().init());
Get.put(ApiProvider());
Get.put(ApiRepository(Get.find<ApiProvider>()));
if (F.isLite) {
//
// await Get.putAsync(() => DeviceInfoService().init());
@ -57,3 +69,9 @@ Future _setCommonServices() async {
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 '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_state.dart';
import 'package:star_lock/tools/regularExpression.dart';
@ -12,9 +13,15 @@ class CustomSMSTemplateListLogic extends BaseGetXController {
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
.getSMSTemplateList(type: 1, pageNo: 1, pageSize: 20);
.getSMSTemplateList(
type: 1, pageNo: pageNo, pageSize: int.parse(pageSize));
if (entity.errorCode!.codeIsSuccessful) {
state.smsTemplateList.value =
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(
{required CustomSMSTemplateItem templateData}) {
final List<TextSpan> textSpans = <TextSpan>[];

View File

@ -1,11 +1,14 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_slidable/flutter_slidable.dart';
import 'package:get/get.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_logic.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/showTipView.dart';
import '../../../../appRouters.dart';
import '../../../../app_settings/app_colors.dart';
@ -30,7 +33,7 @@ class _CustomSMSTemplateListPageState extends State<CustomSMSTemplateListPage> {
@override
void initState() {
super.initState();
logic.getSMSTemplateListRequest();
logic.getSMSTemplateListRequest(isRefresh: true);
}
@override
@ -41,7 +44,14 @@ class _CustomSMSTemplateListPageState extends State<CustomSMSTemplateListPage> {
barTitle: '自定义短信模版'.tr,
haveBack: true,
backgroundColor: AppColors.mainColor),
body: Column(
body: EasyRefreshTool(
onRefresh: () {
logic.getSMSTemplateListRequest(isRefresh: true);
},
onLoad: () {
logic.getSMSTemplateListRequest(isRefresh: false);
},
child: Column(
children: <Widget>[
Obx(() => Visibility(
child: _topTipWidget(),
@ -57,7 +67,7 @@ class _CustomSMSTemplateListPageState extends State<CustomSMSTemplateListPage> {
onClick: () async {
final result = await Get.toNamed(Routers.newSMSTemplatePage);
if (result != null) {
logic.getSMSTemplateListRequest();
logic.getSMSTemplateListRequest(isRefresh: true);
}
}),
SizedBox(
@ -65,6 +75,7 @@ class _CustomSMSTemplateListPageState extends State<CustomSMSTemplateListPage> {
)
],
),
),
);
}
@ -139,13 +150,36 @@ class _CustomSMSTemplateListPageState extends State<CustomSMSTemplateListPage> {
Widget buildMainUI() {
return state.smsTemplateList.isNotEmpty
? ListView.builder(
? SlidableAutoCloseBehavior(
child: ListView.builder(
itemCount: state.smsTemplateList.length,
itemBuilder: (BuildContext c, int index) {
final CustomSMSTemplateItem itemData =
state.smsTemplateList[index];
return _valueAddedServicesListSMSTemplateItem(itemData);
})
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();
}
@ -166,7 +200,7 @@ class _CustomSMSTemplateListPageState extends State<CustomSMSTemplateListPage> {
'currentTemplate': templateData
});
if (result != null) {
logic.getSMSTemplateListRequest();
logic.getSMSTemplateListRequest(isRefresh: true);
}
},
child: Container(

View File

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

View File

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

View File

@ -2231,4 +2231,10 @@ class ApiRepository {
await apiProvider.updateTemplateInfo(id, name, regards, tips);
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:star_lock/app.dart';
import 'package:star_lock/flavors.dart';
import 'package:star_lock/login/login/app_get_version.dart';
import 'package:star_lock/login/login/starLock_login_page.dart';
@ -23,12 +24,7 @@ class _StarLockApplicationState extends State<StarLockApplication> {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
bool? openDeBug = await Storage.getBool(isOpenDeBug);
if (openDeBug == true) {
DeBug.showFloatWidget();
}
});
}
@override
@ -37,7 +33,7 @@ class _StarLockApplicationState extends State<StarLockApplication> {
return FutureBuilder<bool>(
future: getLoginStatus(),
builder: (context, snapshot) {
builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
//
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:star_lock/appRouters.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/flavors.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/tools/customer_tool.dart';
import 'package:star_lock/tools/storage.dart';
import '../versionUndate/versionUndateTool.dart';
import 'bugly/bugly_tool.dart';
import 'xs_jPhush.dart';
class AppFirstEnterHandle {
Future<void> getAppFirstEnter(String flagStr) async {
@ -24,6 +28,7 @@ class AppFirstEnterHandle {
await showPrivacyAgreementAlert();
}
getAppInfo();
await privacySDKInitialization();
break;
case isAgreePosition: //
if (getFlag != isAgreePosition) {
@ -49,7 +54,7 @@ class AppFirstEnterHandle {
Future<void> showPrivacyAgreementAlert() async {
await showCupertinoDialog(
context: Get.context!,
builder: (context) {
builder: (BuildContext context) {
return PopScope(
canPop: false,
child: F.sw(
@ -72,7 +77,7 @@ class AppFirstEnterHandle {
TextSpan(
text: '感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读'.tr,
style: const TextStyle(fontSize: 16.0),
children: [
children: <InlineSpan>[
TextSpan(
text: '《用户协议》'.tr,
style: const TextStyle(
@ -80,7 +85,7 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer()
..onTap = () {
//
Get.toNamed(Routers.webviewShowPage, arguments: {
Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{
"url": XSConstantMacro.userAgreementURL,
"title": '用户协议'.tr
});
@ -94,7 +99,7 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer()
..onTap = () {
//
Get.toNamed(Routers.webviewShowPage, arguments: {
Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{
"url": XSConstantMacro.privacyPolicyURL,
"title": '隐私政策'.tr
});
@ -106,15 +111,13 @@ class AppFirstEnterHandle {
],
),
),
actions: [
actions: <Widget>[
CupertinoDialogAction(
child: Text(
'不同意'.tr,
style: TextStyle(color: Colors.black),
),
onPressed: () {
_exitApp();
},
onPressed: _exitApp,
),
CupertinoDialogAction(
child: Text(
@ -140,7 +143,7 @@ class AppFirstEnterHandle {
TextSpan(
text: '感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读'.tr,
style: const TextStyle(fontSize: 16.0),
children: [
children: <InlineSpan>[
TextSpan(
text: '《用户协议》'.tr,
style: TextStyle(
@ -149,7 +152,7 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer()
..onTap = () {
//
Get.toNamed(Routers.webviewShowPage, arguments: {
Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{
"url": XSConstantMacro.userAgreementURL,
"title": '用户协议'.tr
});
@ -164,7 +167,7 @@ class AppFirstEnterHandle {
recognizer: TapGestureRecognizer()
..onTap = () {
//
Get.toNamed(Routers.webviewShowPage, arguments: {
Get.toNamed(Routers.webviewShowPage, arguments: <String, String>{
"url": XSConstantMacro.privacyPolicyURL,
"title": '隐私政策'.tr
});
@ -176,15 +179,13 @@ class AppFirstEnterHandle {
],
),
),
actions: [
actions: <Widget>[
CupertinoDialogAction(
child: Text(
'不同意'.tr,
style: TextStyle(color: Colors.black),
),
onPressed: () {
_exitApp();
},
onPressed: _exitApp,
),
CupertinoDialogAction(
child: Text(
@ -205,13 +206,13 @@ class AppFirstEnterHandle {
void showPositionAlert() {
showCupertinoDialog(
context: Get.context!,
builder: (context) {
builder: (BuildContext context) {
return PopScope(
canPop: false,
child: CupertinoAlertDialog(
title: const Text('位置权限'),
content: const Text('请开启位置权限,应用需要位置权限才可以完成智能锁和网关的蓝牙操作'),
actions: [
actions: <Widget>[
CupertinoDialogAction(
child: Text('取消'.tr),
onPressed: () {
@ -235,13 +236,13 @@ class AppFirstEnterHandle {
void showCameraAlert() {
showCupertinoDialog(
context: Get.context!,
builder: (context) {
builder: (BuildContext context) {
return PopScope(
canPop: false,
child: CupertinoAlertDialog(
title: const Text('相机/相册权限'),
content: const Text('请开启本地存储权限,允许应用读写设备上的照片及文件'),
actions: [
actions: <Widget>[
CupertinoDialogAction(
child: const Text('取消'),
onPressed: () {

View File

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

View File

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