diff --git a/lib/ui/login/login_page.dart b/lib/ui/login/login_page.dart index 5a2dcab..5782e43 100644 --- a/lib/ui/login/login_page.dart +++ b/lib/ui/login/login_page.dart @@ -2,13 +2,16 @@ import 'dart:ui'; import 'package:aku_community_manager/style/app_style.dart'; import 'package:aku_community_manager/tools/widget_tool.dart'; +import 'package:aku_community_manager/ui/login/login_sms_page.dart'; import 'package:aku_community_manager/ui/widgets/common/aku_back_button.dart'; import 'package:aku_community_manager/ui/widgets/common/aku_scaffold.dart'; import 'package:aku_ui/common_widgets/aku_material_button.dart'; import 'package:common_utils/common_utils.dart'; import 'package:extended_text/extended_text.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:aku_community_manager/tools/screen_tool.dart'; +import 'package:get/route_manager.dart'; class LoginPage extends StatefulWidget { LoginPage({Key key}) : super(key: key); @@ -24,6 +27,10 @@ class _LoginPageState extends State { return RegexUtil.isMobileSimple(_textController.text); } + bool get emptyText { + return TextUtil.isEmpty(_textController.text); + } + @override void dispose() { _textController?.dispose(); @@ -36,34 +43,28 @@ class _LoginPageState extends State { backgroundColor: Colors.white, leading: AkuBackButton.close(), body: ListView( + padding: EdgeInsets.symmetric( + vertical: 40.w, + horizontal: 32.w, + ), children: [ - Padding( - padding: EdgeInsets.only( - top: 40.w, - bottom: 184.w, - left: 32.w, - ), - child: Text( - '欢迎登录小蜜蜂', - style: TextStyle( - color: AppStyle.primaryTextColor, - fontWeight: FontWeight.bold, - fontSize: 48.sp, - ), + Text( + '欢迎登录小蜜蜂', + style: TextStyle( + color: AppStyle.primaryTextColor, + fontWeight: FontWeight.bold, + fontSize: 48.sp, ), ), - Padding( - padding: EdgeInsets.symmetric(horizontal: 32.w), - child: Text( - '手机号码', - style: TextStyle( - color: AppStyle.primaryTextColor, - fontSize: 24.sp, - ), + AkuBox.h(184), + Text( + '手机号码', + style: TextStyle( + color: AppStyle.primaryTextColor, + fontSize: 24.sp, ), ), Container( - padding: EdgeInsets.symmetric(horizontal: 32.w), width: double.infinity, child: TextField( autofocus: true, @@ -73,6 +74,23 @@ class _LoginPageState extends State { }, keyboardType: TextInputType.phone, decoration: InputDecoration( + suffixIconConstraints: BoxConstraints( + minHeight: 0, + minWidth: 0, + ), + suffixIcon: emptyText + ? SizedBox() + : GestureDetector( + onTap: () { + _textController.clear(); + setState(() {}); + }, + child: Icon( + CupertinoIcons.clear_circled_solid, + size: 30.w, + color: Color(0xFF999999), + ), + ), border: UnderlineInputBorder( borderSide: BorderSide( color: Color(0xFFE8E8E8), @@ -93,7 +111,9 @@ class _LoginPageState extends State { padding: EdgeInsets.symmetric(horizontal: 32.w), child: AkuMaterialButton( color: AppStyle.primaryColor, - onPressed: phoneValid ? () {} : null, + onPressed: phoneValid + ? () => Get.off(LoginSMSPage(phone: _textController.text)) + : null, nullColor: Color(0xFFFFE67D), radius: 8.w, child: Text( diff --git a/lib/ui/login/login_sms_page.dart b/lib/ui/login/login_sms_page.dart new file mode 100644 index 0000000..165ce0e --- /dev/null +++ b/lib/ui/login/login_sms_page.dart @@ -0,0 +1,126 @@ +import 'dart:async'; + +import 'package:aku_community_manager/provider/user_provider.dart'; +import 'package:aku_community_manager/style/app_style.dart'; +import 'package:aku_community_manager/tools/widget_tool.dart'; +import 'package:aku_community_manager/ui/home/home_page.dart'; +import 'package:aku_community_manager/ui/widgets/common/aku_back_button.dart'; +import 'package:aku_community_manager/ui/widgets/common/aku_scaffold.dart'; +import 'package:aku_ui/common_widgets/aku_material_button.dart'; +import 'package:flutter/material.dart'; +import 'package:aku_community_manager/tools/screen_tool.dart'; +import 'package:get/get.dart'; +import 'package:pin_input_text_field/pin_input_text_field.dart'; +import 'package:provider/provider.dart'; + +class LoginSMSPage extends StatefulWidget { + final String phone; + LoginSMSPage({Key key, this.phone}) : super(key: key); + + @override + _LoginSMSPageState createState() => _LoginSMSPageState(); +} + +class _LoginSMSPageState extends State { + TextEditingController _textEditingController = TextEditingController(); + int _count = 60; + Timer _countTimer; + bool get canResend => _count <= 0; + String get countString { + if (_count <= 0) + return ''; + else + return '$_count\s'; + } + + startTick() { + _count = 60; + _countTimer = Timer.periodic(Duration(seconds: 1), (timer) { + if (_count >= 0) + _count--; + else { + _countTimer?.cancel(); + } + setState(() {}); + }); + } + + @override + void initState() { + super.initState(); + startTick(); + } + + @override + void dispose() { + _textEditingController?.dispose(); + _countTimer?.cancel(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return AkuScaffold( + backgroundColor: Colors.white, + leading: AkuBackButton(), + body: ListView( + padding: EdgeInsets.symmetric( + horizontal: 32.w, + vertical: 40.w, + ), + children: [ + Text( + '请输入短信验证码', + style: TextStyle( + color: AppStyle.primaryTextColor, + fontWeight: FontWeight.bold, + fontSize: 48.sp, + ), + ), + AkuBox.h(16), + Text( + '已向${widget.phone}发送了一个验证码', + style: TextStyle( + color: AppStyle.primaryTextColor, + fontSize: 24.sp, + ), + ), + AkuBox.h(160), + PinInputTextField( + controller: _textEditingController, + autoFocus: true, + decoration: UnderlineDecoration( + lineHeight: 1.w, + colorBuilder: FixedColorBuilder(Color(0xFFE8E8E8)), + ), + onChanged: (text) { + final userProvider = + Provider.of(context, listen: false); + if (text == '000000') { + userProvider.setisSigned(true); + Get.offAll(HomePage()); + } + }, + ), + AkuBox.h(40), + Row( + children: [ + AkuMaterialButton( + onPressed: canResend ? () => startTick() : null, + child: Text( + '重新发送 $countString', + style: TextStyle( + color: canResend + ? AppStyle.secondaryColor + : AppStyle.minorTextColor, + fontSize: 28.sp, + ), + ), + ), + ], + ), + ], + ), + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index 3018540..bf7f680 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -181,6 +181,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.8.0-nullsafety.1" + pin_input_text_field: + dependency: "direct main" + description: + name: pin_input_text_field + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.1.1" provider: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 7fc92fd..874766e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -45,6 +45,8 @@ dependencies: extended_text: ^4.0.0 common_utils: ^1.2.1 + #验证码 + pin_input_text_field: ^3.1.1 aku_ui: git: