Blame view

lib/login/loginpage/login_page.dart 10 KB
4bf67b91   liangchengyou   feat:设置密码
1
  import 'package:common_utils/common_utils.dart';
2a29701f   liangchengyou   feat:提交代码
2
3
  import 'package:flutter/material.dart';
  import 'package:flutter_bloc/flutter_bloc.dart';
062f0df2   liangchengyou   feat:登录模块代码提交
4
  import 'package:flutter_screenutil/flutter_screenutil.dart';
4bf67b91   liangchengyou   feat:设置密码
5
  import 'package:fluttertoast/fluttertoast.dart';
062f0df2   liangchengyou   feat:登录模块代码提交
6
  import 'package:wow_english/common/extension/string_extension.dart';
1d5315dd   liangchengyou   feat:添加字体,调整文件结构
7
8
  import 'package:wow_english/common/widgets/textfield_customer_widget.dart';
  import 'package:wow_english/login/loginpage/bloc/login_bloc.dart';
95edef4f   liangchengyou   feat:更新适配代码
9
  import 'package:wow_english/route/route.dart';
2a29701f   liangchengyou   feat:提交代码
10
  
1d5315dd   liangchengyou   feat:添加字体,调整文件结构
11
  
2a29701f   liangchengyou   feat:提交代码
12
  class LoginPage extends StatelessWidget {
062f0df2   liangchengyou   feat:登录模块代码提交
13
    const LoginPage({super.key});
2a29701f   liangchengyou   feat:提交代码
14
15
16
  
    @override
    Widget build(BuildContext context) {
2a29701f   liangchengyou   feat:提交代码
17
18
19
20
21
22
23
24
25
26
      return BlocProvider(
        create: (context) => LoginBloc(),
        child: _buildLoginViewWidget(),
      );
    }
  
    Widget _buildLoginViewWidget() => BlocBuilder<LoginBloc,LoginState> (
      builder: (context, state) {
        final bloc = BlocProvider.of<LoginBloc>(context);
        return Scaffold(
062f0df2   liangchengyou   feat:登录模块代码提交
27
28
          body: SafeArea(
            child: ListView(
2a29701f   liangchengyou   feat:提交代码
29
              children: [
062f0df2   liangchengyou   feat:登录模块代码提交
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
                Container(
                  padding: EdgeInsets.only(top: 25.h),
                  child: Stack(
                    children: [
                      Positioned(
                          right: 29.w,
                          child: GestureDetector(
                            onTap: () => bloc.add(ChangeLoginTypeEvent()),
                            child: Container(
                              decoration: BoxDecoration(
                                image: DecorationImage(
                                    image: AssetImage(
                                        'login_logo'.assetPng
                                    ),
                                    fit: BoxFit.fill
                                ),
                              ),
                              padding: const EdgeInsets.symmetric(horizontal: 18.0),
                              child:  Text(
                                  bloc.loginType == LoginType.sms?'密码登陆':'验证码密码'
                              ),
                            ),
                          )
                      ),
                      Center(
                        child: Column(
                          children: [
                            Image.asset(
                              'wow_logo'.assetPng,
                              height: 81.h,
1a43bf7c   liangchengyou   feat:更新UI
60
61
                              width: 131.w,
                            ),
062f0df2   liangchengyou   feat:登录模块代码提交
62
63
64
65
66
67
68
69
                            Offstage(
                              offstage: bloc.loginType == LoginType.pwd,
                              child: _buildSmsViewWidget(),
                            ),
                            Offstage(
                              offstage: bloc.loginType == LoginType.sms,
                              child: _buildPwdViewWidget(),
                            ),
062f0df2   liangchengyou   feat:登录模块代码提交
70
71
72
73
74
75
76
77
78
79
80
81
82
                            Row(
                              mainAxisAlignment: MainAxisAlignment.center,
                              children: [
                                GestureDetector(
                                  onTap: () => bloc.add(AgreementChangeEvent()),
                                  child: Icon(
                                      bloc.agreement ? Icons.check_circle_outlined:Icons.circle_outlined,
                                      color:bloc.agreement ? Colors.green:Colors.black),
                                ),
                                6.horizontalSpace,
                                const Text('我已阅读并同意《用户隐私协议》,《儿童隐私策略》')
                              ],
                            ),
062f0df2   liangchengyou   feat:登录模块代码提交
83
                            GestureDetector(
1a43bf7c   liangchengyou   feat:更新UI
84
85
86
87
88
                              onTap: () {
                                if (bloc.canLogin) {
                                  bloc.add(RequestLoginEvent());
                                }
                              },
062f0df2   liangchengyou   feat:登录模块代码提交
89
90
91
92
93
94
95
96
97
98
                              child: Container(
                                decoration: BoxDecoration(
                                  image: DecorationImage(
                                      image: AssetImage(
                                          bloc.canLogin?'login_enter'.assetPng:'login_enter_dis'.assetPng
                                      ),
                                      fit: BoxFit.fill
                                  ),
                                ),
                                padding: const EdgeInsets.symmetric(
2ca1b8bf   liangchengyou   feat:更新适配
99
100
                                    horizontal: 28.0,
                                    vertical: 14.0
062f0df2   liangchengyou   feat:登录模块代码提交
101
102
103
104
105
106
107
108
109
110
                                ),
                                child:  const Text(
                                    '登录'
                                ),
                              ),
                            )
                          ],
                        ),
                      )
                    ],
2a29701f   liangchengyou   feat:提交代码
111
112
113
114
115
116
117
118
                  ),
                )
              ],
            ),
          ),
        );
      },
    );
062f0df2   liangchengyou   feat:登录模块代码提交
119
120
121
122
  
    Widget _buildSmsViewWidget()=> BlocBuilder<LoginBloc,LoginState>(
        builder: (context,state){
          final bloc = BlocProvider.of<LoginBloc>(context);
2ca1b8bf   liangchengyou   feat:更新适配
123
          return Padding(
1a43bf7c   liangchengyou   feat:更新UI
124
            padding: EdgeInsets.symmetric(horizontal: 135.w),
2ca1b8bf   liangchengyou   feat:更新适配
125
126
127
            child: Column(
              children: [
                15.verticalSpace,
1d5315dd   liangchengyou   feat:添加字体,调整文件结构
128
                TextFieldCustomerWidget(
4bf67b91   liangchengyou   feat:设置密码
129
130
131
132
133
134
135
136
                  height: 55.h,
                  hitText: '请输入手机号',
                  textInputType: TextInputType.phone,
                  bgImageName: 'Input_layer_up',
                  onChangeValue: (String value) {
                    bloc.add(PhoneNumChangeEvent());
                  },
                  controller: bloc.phoneNumController,
2ca1b8bf   liangchengyou   feat:更新适配
137
138
139
140
141
                ),
                6.5.verticalSpace,
                const Text('未注册用户登录默认注册'),
                4.5.verticalSpace,
                Row(
062f0df2   liangchengyou   feat:登录模块代码提交
142
143
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
1a43bf7c   liangchengyou   feat:更新UI
144
                    Expanded(
1d5315dd   liangchengyou   feat:添加字体,调整文件结构
145
                      child: TextFieldCustomerWidget(
4bf67b91   liangchengyou   feat:设置密码
146
147
148
149
150
151
152
153
154
                        height: 50.h,
                        hitText: '请输入验证码',
                        textInputType: TextInputType.number,
                        bgImageName: 'Input_layer_down',
                        onChangeValue: (String value) {
                          bloc.add(CheckFieldChangeEvent());
                        },
                        controller: bloc.checkNumController,
                      )
062f0df2   liangchengyou   feat:登录模块代码提交
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
                    ),
                    GestureDetector(
                      onTap: () {
                        if (bloc.canSendSms) {
                          bloc.add(ChangeLoginTypeEvent());
                        }
                      },
                      child: Container(
                        decoration: BoxDecoration(
                          image: DecorationImage(
                              image: AssetImage(
                                  bloc.canSendSms?'securitycode'.assetPng:'securitycode_dis'.assetPng
                              ),
                              fit: BoxFit.fill
                          ),
                        ),
                        padding: const EdgeInsets.symmetric(horizontal:12.0,vertical: 15.0),
                        child:  const Text(
                            '获取验证码'
                        ),
                      ),
                    )
                  ],
2ca1b8bf   liangchengyou   feat:更新适配
178
179
180
                )
              ],
            ),
062f0df2   liangchengyou   feat:登录模块代码提交
181
182
183
184
185
186
          );
        });
  
    Widget _buildPwdViewWidget()=> BlocBuilder<LoginBloc,LoginState>(
        builder: (context,state){
          final bloc = BlocProvider.of<LoginBloc>(context);
1a43bf7c   liangchengyou   feat:更新UI
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
          return Padding(
            padding: EdgeInsets.symmetric(horizontal: 90.w),
            child: Column(
              children: [
                15.verticalSpace,
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Image.asset(
                      'phone'.assetPng,
                      height: 45.h,
                      width: 35.w,
                    ),
                    10.5.horizontalSpace,
                    Expanded(
1d5315dd   liangchengyou   feat:添加字体,调整文件结构
202
                        child: TextFieldCustomerWidget(
4bf67b91   liangchengyou   feat:设置密码
203
204
205
206
207
208
209
210
211
212
                          height: 50.h,
                          hitText: '请输入手机号',
                          textInputType: TextInputType.phone,
                          bgImageName: 'Input_layer_up',
                          onChangeValue: (String value) {
                            bloc.add(PhoneNumChangeEvent());
                          },
                          controller: bloc.phoneNumController,
                        )
                    ),
1a43bf7c   liangchengyou   feat:更新UI
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
                    5.horizontalSpace,
                    SizedBox(
                      width: 100.w,
                      height: 55.h,
                    )
                  ],
                ),
                12.verticalSpace,
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Image.asset(
                      'lock'.assetPng,
                      height: 34.h,
                      width: 31.w,
                    ),
                    10.5.horizontalSpace,
                    Expanded(
1d5315dd   liangchengyou   feat:添加字体,调整文件结构
231
                      child: TextFieldCustomerWidget(
4bf67b91   liangchengyou   feat:设置密码
232
233
234
235
236
237
238
                        hitText: '请输入密码',
                        bgImageName: 'Input_layer_down',
                        onChangeValue: (String value) {
                          bloc.add(CheckFieldChangeEvent());
                        },
                        controller: bloc.checkNumController,
                      )
1a43bf7c   liangchengyou   feat:更新UI
239
240
241
                    ),
                    5.horizontalSpace,
                    GestureDetector(
95edef4f   liangchengyou   feat:更新适配代码
242
                      onTap: () {
4bf67b91   liangchengyou   feat:设置密码
243
244
245
246
                        if(!RegexUtil.isMobileExact(bloc.phoneNumController.text)) {
                          Fluttertoast.showToast(msg: '手机号不正确!');
                          return;
                        }
1d5315dd   liangchengyou   feat:添加字体,调整文件结构
247
                        Navigator.of(context).pushNamed(AppRouteName.fogPwd);
95edef4f   liangchengyou   feat:更新适配代码
248
                      },
1a43bf7c   liangchengyou   feat:更新UI
249
250
251
252
253
254
                      child: Container(
                        width: 100.w,
                        height: 55.h,
                        alignment: Alignment.centerLeft,
                        child: const Text(
                            '忘记密码 ?'
2ca1b8bf   liangchengyou   feat:更新适配
255
                        ),
062f0df2   liangchengyou   feat:登录模块代码提交
256
                      ),
1a43bf7c   liangchengyou   feat:更新UI
257
258
259
260
261
                    )
                  ],
                )
              ],
            ),
062f0df2   liangchengyou   feat:登录模块代码提交
262
263
264
          );
        });
  
2a29701f   liangchengyou   feat:提交代码
265
  }