starwork_flutter/lib/views/login/login_view.dart
2025-08-29 09:16:51 +08:00

163 lines
4.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'login_controller.dart';
class LoginView extends GetView<LoginController> {
const LoginView({super.key});
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
// 收起键盘
FocusScope.of(context).unfocus();
},
child: Scaffold(
body: SafeArea(
child: SingleChildScrollView(
child: _buildBody(),
),
),
),
);
}
Widget _buildBody() {
return Container(
height: 1.sh,
margin: EdgeInsets.symmetric(vertical: 48.h),
padding: EdgeInsets.symmetric(horizontal: 32.w),
child: Column(
children: [
_buildTitle(),
SizedBox(
height: 32.h,
),
_buildPhoneInputAndLoginButton(),
SizedBox(
height: 32.h,
),
_buildPrivacyPolicy(),
],
),
);
}
Widget _buildTitle() {
return SizedBox(
width: double.infinity,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'欢迎使用斯凯签勤'.tr,
style: TextStyle(
fontSize: 22.sp,
fontWeight: FontWeight.w500,
),
),
SizedBox(
height: 4.h,
),
Text(
'未注册手机号验证后将自动创建账号'.tr,
style: TextStyle(
fontSize: 14.sp,
fontWeight: FontWeight.w500,
color: Colors.grey,
),
),
],
),
);
}
_buildPhoneInputAndLoginButton() {
return Obx(
() => Column(
children: [
TextField(
controller: controller.phoneController,
keyboardType: TextInputType.phone,
textInputAction: TextInputAction.done,
maxLength: controller.phoneNumberSize,
decoration: InputDecoration(
counterText: '',
hintText: '请输入手机号码'.tr,
border: const UnderlineInputBorder(),
// 获取焦点时的边框
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: controller.isFormValid.value
? Colors.blue
: Colors.blue.withOpacity(0.5),
), //
// 🔥 你想要的颜色
),
),
),
SizedBox(
height: 24.h,
),
ElevatedButton(
onPressed: controller.isFormValid.value
? controller.requestPhoneCode
: null,
style: ButtonStyle(
minimumSize:
MaterialStateProperty.all(Size(double.infinity, 44.h)),
shape: MaterialStateProperty.all(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.r),
),
),
backgroundColor: MaterialStateProperty.all(
controller.isFormValid.value
? Colors.blue
: Colors.blue.withOpacity(0.5),
),
),
child: Text(
'获取验证码'.tr,
style: TextStyle(
fontSize: 16.sp,
fontWeight: FontWeight.w500,
color: Colors.white,
),
),
),
SizedBox(
height: 22.h,
),
TextButton(
onPressed: () {},
child: Text(
'密码登录'.tr,
style: TextStyle(
fontSize: 14.sp,
fontWeight: FontWeight.w500,
color: Colors.grey,
),
),
)
],
),
);
}
_buildPrivacyPolicy() {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Radio(
value: '1',
groupValue: 1,
onChanged: (value) {},
),
],
);
}
}