Commit 7209ed34 authored by skeyboy's avatar skeyboy

登录页新增用户协议检测校验

parent 70d05346
import 'dart:async'; import 'dart:async';
import 'dart:io';
import 'package:flutter_vibrate/flutter_vibrate.dart'; import 'package:flutter_vibrate/flutter_vibrate.dart';
import 'package:sign_in_with_apple/sign_in_with_apple.dart'; import 'package:sign_in_with_apple/sign_in_with_apple.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
...@@ -28,6 +29,9 @@ class SignInController extends GetxController { ...@@ -28,6 +29,9 @@ class SignInController extends GetxController {
RxBool loginBtnEable = false.obs; RxBool loginBtnEable = false.obs;
RxString codeTileStr = "获取验证码".obs; RxString codeTileStr = "获取验证码".obs;
// 隐私政策是否勾选
RxBool privactChecked = false.obs;
/// 倒计时的计时器。 /// 倒计时的计时器。
late Timer _timer; late Timer _timer;
...@@ -45,6 +49,7 @@ class SignInController extends GetxController { ...@@ -45,6 +49,7 @@ class SignInController extends GetxController {
// ---------------------------------------------------------------- // ----------------------------------------------------------------
// email的控制器 // email的控制器
final TextEditingController emailController = TextEditingController(); final TextEditingController emailController = TextEditingController();
// 密码的控制器 // 密码的控制器
final TextEditingController passController = TextEditingController(); final TextEditingController passController = TextEditingController();
...@@ -67,8 +72,11 @@ class SignInController extends GetxController { ...@@ -67,8 +72,11 @@ class SignInController extends GetxController {
// 执行登录操作 // 执行登录操作
handleSignIn() async { handleSignIn() async {
if (Platform.isAndroid && privactChecked == false) {
if(!GetUtils.isPhoneNumber(mobileMemberController.text)) { EasyLoading.showToast("请阅读并同意《用户协议》《隐私政策》");
return;
}
if (!GetUtils.isPhoneNumber(mobileMemberController.text)) {
EasyLoading.showToast("请输入手机号"); EasyLoading.showToast("请输入手机号");
return; return;
} }
...@@ -188,11 +196,11 @@ class SignInController extends GetxController { ...@@ -188,11 +196,11 @@ class SignInController extends GetxController {
} }
chageCodeStatus() async { chageCodeStatus() async {
if(!mobileMemberController.text.isNotEmpty) { if (!mobileMemberController.text.isNotEmpty) {
EasyLoading.showToast('请先输入手机号'); EasyLoading.showToast('请先输入手机号');
return; return;
} }
if(codeEnable.value == false) { if (codeEnable.value == false) {
EasyLoading.show(status: "验证码发送太过频繁,请稍后再试"); EasyLoading.show(status: "验证码发送太过频繁,请稍后再试");
return; return;
} }
...@@ -213,7 +221,6 @@ class SignInController extends GetxController { ...@@ -213,7 +221,6 @@ class SignInController extends GetxController {
} else if (!chinaPhoneNumber(mobileMemberController.text)) { } else if (!chinaPhoneNumber(mobileMemberController.text)) {
EasyLoading.showToast("手机号输入有误"); EasyLoading.showToast("手机号输入有误");
// EasyLoading.show(status: "手机号输入有误"); // EasyLoading.show(status: "手机号输入有误");
} else { } else {
EasyLoading.showToast("验证码已发送"); EasyLoading.showToast("验证码已发送");
} }
......
...@@ -590,169 +590,235 @@ class SignInPage extends GetView<SignInController> { ...@@ -590,169 +590,235 @@ class SignInPage extends GetView<SignInController> {
} }
Widget buildAndroidSigin(BuildContext buildContext) { Widget buildAndroidSigin(BuildContext buildContext) {
return WillPopScope(onWillPop: () async{ return WillPopScope(
return false; onWillPop: () async {
},child: GestureDetector( return false;
behavior: HitTestBehavior.translucent, },
onTap: () => Focus.of(buildContext).unfocus(), child: GestureDetector(
child: Container( behavior: HitTestBehavior.translucent,
height: Get.height, onTap: () => Focus.of(buildContext).unfocus(),
decoration: BoxDecoration( child: Container(
image: DecorationImage( height: Get.height,
image: Image.asset("assets/images/background.png").image, decoration: BoxDecoration(
fit: BoxFit.cover), image: DecorationImage(
), image: Image.asset("assets/images/background.png").image,
child: Stack( fit: BoxFit.cover),
children: [ ),
Positioned( child: Stack(
child: GestureDetector( children: [
onTap: () => Get.back(), child: Icon(Icons.arrow_back)), Positioned(
top: 45, child: GestureDetector(
left: 35, onTap: () => Get.back(), child: Icon(Icons.arrow_back)),
), top: 45,
Column( left: 35,
mainAxisAlignment: MainAxisAlignment.start, ),
children: <Widget>[ Column(
SizedBox(height: defaultPadding * 8), mainAxisAlignment: MainAxisAlignment.start,
Column( children: <Widget>[
children: [ SizedBox(height: defaultPadding * 8),
Row( Column(
children: [ children: [
const Spacer(), Row(
SizedBox( children: [
height: 75, const Spacer(),
width: 75, SizedBox(
child: Image.asset( height: 75,
"assets/images/ic_launcher.png", width: 75,
fit: BoxFit.fill, child: Image.asset(
), "assets/images/ic_launcher.png",
), fit: BoxFit.fill,
const Spacer(),
],
),
SizedBox(height: defaultPadding * 6),
],
),
Row(
children: [
Spacer(),
Expanded(
flex: 8,
child: Form(
child: Column(
children: [
TextFormField(
controller: controller.mobileMemberController,
keyboardType: TextInputType.phone,
textInputAction: TextInputAction.next,
cursorColor: kPrimaryColor,
onSaved: (email) {},
style:
const TextStyle(color: Color(0xFF6F35A5)),
decoration: const InputDecoration(
labelStyle: TextStyle(color: Colors.black),
fillColor: kPrimaryLightColor,
iconColor: Color(0xFF6F35A5),
prefixIconColor: Color(0xFF6F35A5),
filled: true,
contentPadding:
EdgeInsets.fromLTRB(10, 10, 10, 10),
border: OutlineInputBorder(
borderRadius:
BorderRadius.all(Radius.circular(30)),
borderSide: BorderSide.none,
),
hintText: "输入手机号",
hintStyle:
TextStyle(color: Color(0xFF6F35A5)),
prefixIcon: Padding(
padding: EdgeInsets.only(
left: defaultPadding,
right: defaultPadding),
child: Icon(Icons.phone_android),
),
),
), ),
Padding( ),
padding: const EdgeInsets.symmetric( const Spacer(),
vertical: defaultPadding * 1.5), ],
child: TextFormField( ),
controller: controller.codeController, SizedBox(height: defaultPadding * 6),
keyboardType: TextInputType.number, ],
textInputAction: TextInputAction.done, ),
obscureText: true, Row(
children: [
Spacer(),
Expanded(
flex: 8,
child: Form(
child: Column(
children: [
TextFormField(
controller: controller.mobileMemberController,
keyboardType: TextInputType.phone,
textInputAction: TextInputAction.next,
cursorColor: kPrimaryColor, cursorColor: kPrimaryColor,
style: TextStyle(color: Color(0xFF6F35A5)), onSaved: (email) {},
style:
const TextStyle(color: Color(0xFF6F35A5)),
decoration: const InputDecoration( decoration: const InputDecoration(
labelStyle: TextStyle(color: Colors.black), labelStyle: TextStyle(color: Colors.black),
fillColor: kPrimaryLightColor, fillColor: kPrimaryLightColor,
contentPadding:
EdgeInsets.fromLTRB(10, 10, 10, 10),
iconColor: Color(0xFF6F35A5), iconColor: Color(0xFF6F35A5),
prefixIconColor: Color(0xFF6F35A5), prefixIconColor: Color(0xFF6F35A5),
filled: true, filled: true,
contentPadding:
EdgeInsets.fromLTRB(10, 10, 10, 10),
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: borderRadius:
BorderRadius.all(Radius.circular(30)), BorderRadius.all(Radius.circular(30)),
borderSide: BorderSide.none, borderSide: BorderSide.none,
), ),
hintText: "输入验证码", hintText: "输入手机号",
hintStyle: hintStyle:
TextStyle(color: Color(0xFF6F35A5)), TextStyle(color: Color(0xFF6F35A5)),
prefixIcon: Padding( prefixIcon: Padding(
padding: EdgeInsets.all(defaultPadding), padding: EdgeInsets.only(
child: Icon(Icons.lock), left: defaultPadding,
right: defaultPadding),
child: Icon(Icons.phone_android),
), ),
), ),
), ),
), Padding(
const SizedBox(height: defaultPadding), padding: const EdgeInsets.symmetric(
Row( vertical: defaultPadding * 1.5),
children: [ child: TextFormField(
Flexible(child: Container()), controller: controller.codeController,
GestureDetector( keyboardType: TextInputType.number,
onTap: () => controller.chageCodeStatus(), textInputAction: TextInputAction.done,
child: Obx(()=>Text( obscureText: true,
controller.codeTileStr.value, cursorColor: kPrimaryColor,
style: const TextStyle( style: TextStyle(color: Color(0xFF6F35A5)),
color: Colors.white54, fontSize: 12), decoration: const InputDecoration(
)), labelStyle: TextStyle(color: Colors.black),
) fillColor: kPrimaryLightColor,
], contentPadding:
), EdgeInsets.fromLTRB(10, 10, 10, 10),
const SizedBox(height: defaultPadding * 6), iconColor: Color(0xFF6F35A5),
Hero( prefixIconColor: Color(0xFF6F35A5),
tag: "login_btn", filled: true,
child: GestureDetector( border: OutlineInputBorder(
onTap: () => controller.handleSignIn(), borderRadius:
child: Container( BorderRadius.all(Radius.circular(30)),
width: Get.width - 40, borderSide: BorderSide.none,
height: 50, ),
alignment: Alignment.center, hintText: "输入验证码",
decoration: BoxDecoration( hintStyle:
borderRadius: BorderRadius.all( TextStyle(color: Color(0xFF6F35A5)),
Radius.circular(45 / 2.0)), prefixIcon: Padding(
color: Color(0xFF6F35A5)), padding: EdgeInsets.all(defaultPadding),
child: Text( child: Icon(Icons.lock),
"登录".toUpperCase(), ),
), ),
), ),
), ),
), const SizedBox(height: defaultPadding),
const SizedBox(height: defaultPadding), Row(
], children: [
Flexible(child: Container()),
GestureDetector(
onTap: () => controller.chageCodeStatus(),
child: Obx(() => Text(
controller.codeTileStr.value,
style: const TextStyle(
color: Colors.white54,
fontSize: 12),
)),
)
],
),
const SizedBox(height: defaultPadding * 6),
Hero(
tag: "login_btn",
child: GestureDetector(
onTap: () => controller.handleSignIn(),
child: Container(
width: Get.width - 40,
height: 50,
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(45 / 2.0)),
color: Color(0xFF6F35A5)),
child: Text(
"登录".toUpperCase(),
),
),
),
),
const SizedBox(height: defaultPadding),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Obx(() => Checkbox(
shape: const CircleBorder(),
value: controller.privactChecked.value,
checkColor: kPrimaryColor,
onChanged: (onChanged) => controller
.privactChecked
.value = onChanged ?? false)),
RichText(
text: TextSpan(children: <InlineSpan>[
const TextSpan(
text: '请阅读并同意',
style:
TextStyle(color: Colors.white)),
TextSpan(
text: '《用户协议》',
style:
const TextStyle(color: Colors.grey),
recognizer: TapGestureRecognizer()
..onTap = () {
Get.toNamed(AppRoutes.USER_PRIVACT);
},
),
TextSpan(
text: '《隐私政策》',
style:
const TextStyle(color: Colors.grey),
recognizer: TapGestureRecognizer()
..onTap = () {
Get.toNamed(AppRoutes.PRIVACT);
},
),
]),
)
],
)
],
),
), ),
), ),
), Spacer(),
Spacer(),
], // Row(
), // children: [
], // Spacer(),
) // RichText(
], // text: TextSpan(children: [
// const TextSpan(text: "同意"),
// TextSpan(
// text: "《服务协议》",
// recognizer: TapGestureRecognizer()
// ..onTap = () {
// Get.toNamed(AppRoutes.PRIVACT);
// }),
// const TextSpan(text: " "),
// TextSpan(
// text: "《隐私政策》",
// recognizer: TapGestureRecognizer()
// ..onTap = () {
// Get.toNamed(AppRoutes.USER_PRIVACT);
// }),
// ]),
// )
// ],
// )
],
),
],
)
],
),
), ),
), ),
),); );
// return GestureDetector( // return GestureDetector(
// behavior: HitTestBehavior.translucent, // behavior: HitTestBehavior.translucent,
// onTap: () => FocusScope.of(buildContext).unfocus(), // onTap: () => FocusScope.of(buildContext).unfocus(),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment