提交 9850da9c authored 作者: yueweilu's avatar yueweilu

重置密码

上级 e5605df8
......@@ -16,7 +16,7 @@ class _CoursePageState extends State<CoursePage> {
appBar: CustomAppBar(
titleSpacing: 0,
title: Padding(
padding: EdgeInsets.symmetric(horizontal: AppTheme.margin),
padding: const EdgeInsets.symmetric(horizontal: AppTheme.margin),
child: CustomInputSearch(
readOnly:true,
hintText: '请输入书籍名称',
......@@ -34,8 +34,8 @@ class _CoursePageState extends State<CoursePage> {
),
badges.Badge(
position: badges.BadgePosition.topEnd(top: -5, end: 0),
badgeContent: Text('10',style: TextStyle(fontSize: 7,color: Colors.white),),
badgeStyle: badges.BadgeStyle(
badgeContent: const Text('10',style: TextStyle(fontSize: 7,color: Colors.white),),
badgeStyle: const badges.BadgeStyle(
badgeColor: AppTheme.primary,
shape: badges.BadgeShape.circle
),
......@@ -54,87 +54,39 @@ class _CoursePageState extends State<CoursePage> {
// ),
],
),
body:Column(
children: [
const BuildBanner(items: ['111','222','333'],),
Expanded(
child: CustomPullScrollView(
controller: controller.refreshController,
onRefresh: controller.onRefresh,
onLoading: controller.onLoading,
child: GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 10,
mainAxisSpacing: 10,
childAspectRatio: 1.5
),
itemBuilder: (BuildContext context, int index) {
return createCellWidget();
},
itemCount: 10,
),
// builder: (context,physics) => GridView.builder(
// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
// crossAxisCount: 2,
// crossAxisSpacing: 10,
// mainAxisSpacing: 10,
// childAspectRatio: 1.5
// ),
// itemBuilder: (BuildContext context, int index) {
// createCellWidget();
// },
// itemCount: 10,
// )
body:Container(
color: const Color(0xFFF9F9F9),
child: Column(
children: [
Container(
color: Colors.transparent,
padding: const EdgeInsets.symmetric(horizontal: 10),
child: const BuildBanner(items: ['111','222','333'],),
),
),
],
)
));
}
Widget createCellWidget(){
return GestureDetector(
child: Container(
// height: 40,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5),
color: Colors.cyan,
border: Border.all(color: Colours.c9,width: 2,style: BorderStyle.solid),
),
child: Stack(
children: [
Container(
color: Colors.white,
// height: double.infinity,
alignment: Alignment.center,
child:SizedBox()
),
Positioned(
bottom: 0,
left: 0,
right: 0,
child: Container(
alignment: Alignment.center,
height: 24,
width: double.infinity,
child: Text('假按揭啊'),
decoration: BoxDecoration(
borderRadius: BorderRadius.vertical(bottom:Radius.circular(5)),
color:Color(0x20FE250B),
Expanded(
child: CustomPullScrollView(
controller: controller.refreshController,
onRefresh: controller.onRefresh,
onLoading: controller.onLoading,
child: GridView.builder(
padding: EdgeInsets.only(left: 13,top: 10),
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 0,
mainAxisSpacing: 10,
childAspectRatio: 0.85
),
itemBuilder: (BuildContext context, int index) {
return const Book();
},
itemCount: 10,
),
),
),
),
],
],
),
)
),
onTap: (){
},
);
));
}
}
......
......@@ -6,29 +6,51 @@ class Book extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: const Color(0xFFF9F9F9),
boxShadow: [
BoxShadow(
color: const Color(0xFFC7C7C7).withOpacity(0.5),
offset: const Offset(3, 0),
blurRadius: 10.w,
spreadRadius: 0.w,
),
],
),
margin: const EdgeInsets.only(right: 13),
padding: const EdgeInsets.only(left: 10,right: 10,bottom: 13.5,top: 16.5),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
// icon
Container(
color: Colors.red,
height: 102,
width: 85,
Expanded(
child: AspectRatio(
aspectRatio: 0.85,
child: Container(
// margin: const EdgeInsets.only(top: 16,bottom: 10),
color: Colors.red,
// width: 85,
),
),
),
Text('从现在开始,为精彩活从现在开始,为精彩活'),
Text('作者'),
Gaps.vGaps10,
const Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('从现在开始,为精彩活从现在开始,为精彩活',style: TextStyle(fontSize: 13,height: 1.5,color: Colours.c3),maxLines: 1,overflow: TextOverflow.ellipsis,),
Text('作者',style: TextStyle(fontSize:12,height: 1.3,color: Colours.c6,),textAlign: TextAlign.left,),
],
),
Gaps.vGaps5,
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
color: Colors.cyan,
padding: EdgeInsets.symmetric(horizontal: 3.5),
child: Text('未学习'),
padding: const EdgeInsets.symmetric(horizontal: 3.5),
child: const Text('未学习',style: TextStyle(fontSize: 11,height: 1.3,color: Colours.c9),),
),
Container(
color: Colors.cyan,
width: 40,
height: 40,
)
const Text('继续学习',style: TextStyle(fontSize: 11,height: 1.3,color: AppTheme.primary),)
],
)
],
......
......@@ -6,7 +6,9 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:go_router/go_router.dart';
import '../../routes/index.dart';
import '../../theme.dart';
import '../../utils/index.dart';
import '../../widgets/index.dart';
......
......@@ -68,10 +68,10 @@ class _ForgetPwdPageState extends State<ForgetPwdPage> {
),
Gaps.vGaps40,
CustomGradientButton(
text: '立即登录',
text: '下一步',
isEnabled: !controller.enable,
onPressed: () {
context.pushNamed(Routes.resetPwd);
},
)
],
......
......@@ -20,6 +20,7 @@ class _LoginPageState extends State<LoginPage> {
builder:(controller) => GestureDetector(
onTap: () => Tools.unfocus(),
child: Scaffold(
resizeToAvoidBottomInset:true,
appBar: CustomAppBar(
systemOverlayStyle: Theme.of(context).brightness == Brightness.light
? SystemUiOverlayStyle.dark
......
part of reset_pwd;
class ResetPwdController extends GetxController {
// 新密码
final TextEditingController pwdInput = TextEditingController();
// 确认密码
final TextEditingController pwd2Input = TextEditingController();
// 显示密码
final ValueNotifier<bool> showPassword = ValueNotifier(false);
// 显示密码
final ValueNotifier<bool> showPassword2 = ValueNotifier(false);
// 按钮是否可用
bool _enable = false;
bool get enable => _enable;
void onShowPassword() => showPassword.value = !showPassword.value;
void onShowPassword2() => showPassword2.value = !showPassword2.value;
void setCanClick(){
if (pwdInput.text == pwd2Input.text){
_enable = true;
}
else{
_enable = false;
}
update();
}
@override
void onClose() {
pwd2Input.dispose();
pwdInput.dispose();
super.onClose();
}
}
library reset_pwd;
import 'package:flutter_book/utils/index.dart';
import 'package:get/get.dart';
import 'package:flutter/material.dart';
import '../../widgets/index.dart';
part 'view.dart';
part 'controller.dart';
\ No newline at end of file
part of reset_pwd;
class ResetPwdPage extends StatefulWidget {
const ResetPwdPage({Key? key}) : super(key: key);
@override
State<ResetPwdPage> createState() => _ResetPwdPageState();
}
class _ResetPwdPageState extends State<ResetPwdPage> {
@override
Widget build(BuildContext context) {
return GetBuilder<ResetPwdController>(
init: ResetPwdController(),
builder: (controller) =>Scaffold(
appBar: AppBar(
centerTitle: true,
title: const Text('重置密码'),
),
body: Container(
margin: const EdgeInsets.only(left: 10,top: 15,right: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ValueListenableBuilder<bool>(
valueListenable: controller.showPassword,
builder:(context, value, child) => CustomFormInput(
obscureText: !value,
hintText: '请输入新密码',
iconData:
value ? Icons.visibility : Icons.visibility_off,
controller: controller.pwdInput,
onChanged: (text){
controller.setCanClick();
},
onIcon: controller.onShowPassword,
),
),
ValueListenableBuilder<bool>(
valueListenable: controller.showPassword2,
builder:(context, value, child) => CustomFormInput(
obscureText: !value,
hintText: '请再次输入密码',
iconData:
value ? Icons.visibility : Icons.visibility_off,
controller: controller.pwd2Input,
onChanged: (text){
controller.setCanClick();
},
onIcon: controller.onShowPassword2,
),
),
Container(
margin: const EdgeInsets.only(left: 5,top: 5),
child: const Text('密码必须是6-20个英文字母、数字或符号',style: TextStyle(fontSize: 10,color: Colours.c9),),
)
],
),
),
),
);
}
}
......@@ -8,6 +8,7 @@ import 'package:flutter_book/pages/book_pay/index.dart';
import 'package:flutter_book/pages/forget_pwd/index.dart';
import 'package:flutter_book/pages/login/index.dart';
import 'package:flutter_book/pages/main/index.dart';
import 'package:flutter_book/pages/reset_pwd/index.dart';
import 'package:flutter_book/pages/splash/index.dart';
import 'package:flutter_book/pages/user_coin/index.dart';
import 'package:flutter_book/pages/user_info/index.dart';
......
......@@ -47,8 +47,8 @@ abstract class Routes {
static final GoRouter config = GoRouter(
initialLocation: '/$login',
// initialLocation: '/',
// initialLocation: '/$login',
initialLocation: '/',
observers: [observer],
routes: [
GoRoute(
......@@ -78,6 +78,7 @@ abstract class Routes {
child: const AdPage()
)
),
/// 登录模块
GoRoute(
path: '/$login',
name: login,
......@@ -87,6 +88,24 @@ abstract class Routes {
child: const LoginPage()
)
),
GoRoute(
path: '/$forgetPwd',
name: forgetPwd,
pageBuilder: (context, state) =>CupertinoPage(
name: state.uri.toString(),
key: state.pageKey,
child: const ForgetPwdPage()
)
),
GoRoute(
path: '/$resetPwd',
name: resetPwd,
pageBuilder: (context, state) =>CupertinoPage(
name: state.uri.toString(),
key: state.pageKey,
child: const ResetPwdPage()
)
),
GoRoute(
path: '/$web',
name: web,
......@@ -159,15 +178,7 @@ abstract class Routes {
child: const UserCoinPage()
)
),
GoRoute(
path: '/$forgetPwd',
name: forgetPwd,
pageBuilder: (context, state) =>CupertinoPage(
name: state.uri.toString(),
key: state.pageKey,
child: const ForgetPwdPage()
)
)
]
);
......
......@@ -71,7 +71,7 @@ abstract class AppTheme {
static ThemeData get light {
var scheme = ColorScheme.light(
background: const Color(0xFFF9F9F9),
background: Colors.white,
onBackground: const Color(0xFF333333),
surface: Colors.white,
onSurface: const Color(0xFF333333),
......@@ -79,7 +79,7 @@ abstract class AppTheme {
onPrimary: Colors.white,
secondary: const Color(0xFFFFB800),
onSecondary: Colors.white,
tertiary: const Color(0xFFF4F6F9),
tertiary: Colors.white,
outline: const Color(0xFFD5D5D5),
shadow: const Color(0xFFAB1941).withOpacity(0.08),
error: error,
......
......@@ -274,7 +274,7 @@ class CustomInput extends StatelessWidget {
),
decoration: decoration.copyWith(
hintText: hintText,
hintStyle: const TextStyle(fontWeight: FontWeight.normal,color: Colours.c9),
hintStyle: const TextStyle(fontWeight: FontWeight.normal,color: Colours.c9,fontSize: 13),
suffixIconConstraints: const BoxConstraints(),
suffixIcon: _suffixIcon(decorationTheme),
),
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论