Merge branch 'release' of https://gitee.com/starlock-cn/app-starlock into release
This commit is contained in:
commit
9c8f722710
162
lib/app.dart
162
lib/app.dart
@ -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 ?? '');
|
||||||
|
}
|
||||||
@ -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(
|
||||||
|
|||||||
@ -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(
|
||||||
|
|||||||
@ -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);
|
||||||
|
},
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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();
|
||||||
|
}
|
||||||
|
|||||||
@ -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>[];
|
||||||
|
|||||||
@ -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(
|
||||||
|
|||||||
@ -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'; //删除模板
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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 ?? '');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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: () {
|
||||||
|
|||||||
@ -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>()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -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!,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user