You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
6.1 KiB
149 lines
6.1 KiB
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:tdesign_flutter/tdesign_flutter.dart';
|
|
|
|
import '../../components/page_appbar.dart';
|
|
import '../../controller/mine/phone_controller.dart';
|
|
|
|
class PhonePage extends StatelessWidget {
|
|
PhonePage({super.key});
|
|
|
|
final PhoneController controller = Get.put(PhoneController());
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
backgroundColor: Color(0xffFFFFFF),
|
|
appBar: PageAppbar(title: "手机认证"),
|
|
body: Obx(() {
|
|
return IndexedStack(
|
|
index: controller.tabIndex.value,
|
|
children: [
|
|
// 推荐列表
|
|
Center(
|
|
child: Column(
|
|
mainAxisAlignment: MainAxisAlignment.center, // 垂直居中
|
|
crossAxisAlignment: CrossAxisAlignment.center, // 水平居中
|
|
children: [
|
|
const Text('已经认证的手机号码', style: TextStyle(fontSize: 18, color: Color(0xFF999999))),
|
|
const SizedBox(height: 12),
|
|
Text(_encryptPhone(controller.phone.value), style: TextStyle(fontSize: 40, fontWeight: FontWeight.bold)),
|
|
SizedBox(height: 64),
|
|
TDButton(
|
|
text: '更换手机号码',
|
|
width: MediaQuery.of(context).size.width - 50,
|
|
size: TDButtonSize.large,
|
|
type: TDButtonType.fill,
|
|
shape: TDButtonShape.round,
|
|
style: TDButtonStyle(
|
|
textColor: Colors.white,
|
|
backgroundColor: Color(0xFF7562F9),
|
|
),
|
|
activeStyle: TDButtonStyle(
|
|
textColor: Colors.white,
|
|
backgroundColor: Color(0xC37562F9),
|
|
),
|
|
onTap: (){
|
|
controller.tabIndex.value = 1;
|
|
},
|
|
),
|
|
SizedBox(height: 200),
|
|
],
|
|
),
|
|
),
|
|
// 同城列表
|
|
Center(
|
|
child: Column(
|
|
children: [
|
|
const SizedBox(height:32),
|
|
const Text('请输入新的手机号码', style: TextStyle(fontSize: 16, color: Color(0xFF333333))),
|
|
const SizedBox(height: 8),
|
|
const Text('手机号码仅用于登录和账号保护', style: TextStyle(fontSize: 14, color: Color(0xFF999999))),
|
|
const SizedBox(height: 56),
|
|
TDInput(
|
|
type: TDInputType.cardStyle,
|
|
inputType: TextInputType.phone,
|
|
maxLength: 11,
|
|
cardStyle: TDCardStyle.topText,
|
|
width: MediaQuery.of(context).size.width - 50,
|
|
hintText: '请输入你的手机号',
|
|
onChanged: (text) {
|
|
controller.phoneNumber.value = text;
|
|
}
|
|
),
|
|
const SizedBox(height: 24),
|
|
TDInput(
|
|
type: TDInputType.cardStyle,
|
|
inputType: TextInputType.number,
|
|
maxLength: 6,
|
|
cardStyle: TDCardStyle.topText,
|
|
width: MediaQuery.of(context).size.width - 50,
|
|
hintText: '请输入验证码',
|
|
onChanged: (text) {
|
|
controller.verificationCode.value = text;
|
|
},
|
|
rightBtn: SizedBox(
|
|
width: 100,
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Padding(
|
|
padding: const EdgeInsets.only(right: 10),
|
|
child: Container(
|
|
width: 0.5,
|
|
height: 24,
|
|
color: TDTheme.of(context).grayColor3,
|
|
),
|
|
),
|
|
controller.countdownSeconds.value > 0 ?
|
|
TDText('${controller.countdownSeconds.value}秒后重试', textColor: TDTheme.of(context).fontGyColor4)
|
|
: TDText('获取验证码', textColor: Color(0xFF7562F9)),
|
|
],
|
|
),
|
|
),
|
|
needClear: false,
|
|
onBtnTap: () {
|
|
controller.getVerificationCode();
|
|
}
|
|
),
|
|
const SizedBox(height: 48),
|
|
TDButton(
|
|
text: '确定更换',
|
|
width: MediaQuery.of(context).size.width - 50,
|
|
size: TDButtonSize.large,
|
|
type: TDButtonType.fill,
|
|
shape: TDButtonShape.round,
|
|
style: TDButtonStyle(
|
|
textColor: Colors.white,
|
|
backgroundColor: Color(0xFF7562F9),
|
|
),
|
|
activeStyle: TDButtonStyle(
|
|
textColor: Colors.white,
|
|
backgroundColor: Color(0xC37562F9),
|
|
),
|
|
onTap: (){
|
|
controller.changePhone();
|
|
},
|
|
),
|
|
],
|
|
),
|
|
)
|
|
],
|
|
);
|
|
})
|
|
);
|
|
}
|
|
|
|
String _encryptPhone(String phone) {
|
|
if (phone.isEmpty) return '';
|
|
if (phone.length < 7) return phone;
|
|
|
|
// 保留前3位和后4位,中间用*代替
|
|
String start = phone.substring(0, 3);
|
|
String end = phone.substring(phone.length - 4);
|
|
String middle = '*' * (phone.length - 7);
|
|
|
|
return '$start$middle$end';
|
|
}
|
|
|
|
}
|