Commit 5b87e560f8bc90b58dd1ea1292e26a9efaa55a40

Authored by 吴启风
1 parent e620143b

feat:导航栏视觉优化

lib/pages/login/forgetpwd/forget_password_home_page.dart
@@ -7,6 +7,7 @@ import 'package:wow_english/pages/login/loginpage/time_widget.dart'; @@ -7,6 +7,7 @@ import 'package:wow_english/pages/login/loginpage/time_widget.dart';
7 import 'package:wow_english/pages/login/setpwd/set_pwd_page.dart'; 7 import 'package:wow_english/pages/login/setpwd/set_pwd_page.dart';
8 import 'package:wow_english/utils/toast_util.dart'; 8 import 'package:wow_english/utils/toast_util.dart';
9 9
  10 +import '../../../common/widgets/we_app_bar.dart';
10 import 'bloc/forget_pwd_home_bloc.dart'; 11 import 'bloc/forget_pwd_home_bloc.dart';
11 12
12 class ForgetPasswordHomePage extends StatelessWidget { 13 class ForgetPasswordHomePage extends StatelessWidget {
@@ -50,136 +51,118 @@ class _ForgetPasswordHomePageView extends StatelessWidget { @@ -50,136 +51,118 @@ class _ForgetPasswordHomePageView extends StatelessWidget {
50 Widget _buildForgetPwdView() => BlocBuilder<ForgetPwdHomeBloc, ForgetPwdHomeState>(builder: (context, state) { 51 Widget _buildForgetPwdView() => BlocBuilder<ForgetPwdHomeBloc, ForgetPwdHomeState>(builder: (context, state) {
51 final bloc = BlocProvider.of<ForgetPwdHomeBloc>(context); 52 final bloc = BlocProvider.of<ForgetPwdHomeBloc>(context);
52 return Scaffold( 53 return Scaffold(
  54 + appBar: const WEAppBar(),
53 body: Container( 55 body: Container(
54 color: Colors.white, 56 color: Colors.white,
55 child: SafeArea( 57 child: SafeArea(
56 - child: Stack(  
57 - children: [  
58 - SingleChildScrollView(  
59 - child: Padding(  
60 - padding: EdgeInsets.only(left: 49.w, right: 10.w),  
61 - child: Column(  
62 - children: [  
63 - 34.verticalSpace,  
64 - Row(  
65 - children: [  
66 - Image.asset(  
67 - 'wow_logo'.assetPng,  
68 - height: 49.w,  
69 - width: 83.5.h,  
70 - ),  
71 - 12.5.horizontalSpace,  
72 - Text(  
73 - '修改密码\n请输入您的手机号和验证码吧',  
74 - style: TextStyle(fontSize: 16.sp, color: const Color(0xFF666666)),  
75 - )  
76 - ],  
77 - ),  
78 - Row(  
79 - crossAxisAlignment: CrossAxisAlignment.start,  
80 - children: [  
81 - Expanded(  
82 - child: Column(  
83 - children: [  
84 - 44.5.verticalSpace,  
85 - Row(  
86 - children: [  
87 - Image.asset(  
88 - 'phone'.assetPng,  
89 - height: 45.h,  
90 - width: 35.w,  
91 - ),  
92 - 15.horizontalSpace,  
93 - Expanded(  
94 - child: TextFieldCustomerWidget(  
95 - height: 50.h,  
96 - hitText: '请输入当前手机号',  
97 - textInputType: TextInputType.phone,  
98 - bgImageName: 'Input_layer_up',  
99 - onChangeValue: (String value) {  
100 - bloc.add(PhoneNumChangeEvent());  
101 - },  
102 - controller: bloc.phoneNumController,  
103 - ))  
104 - ],  
105 - ),  
106 - 11.5.verticalSpace,  
107 - Row(  
108 - mainAxisAlignment: MainAxisAlignment.spaceBetween,  
109 - children: [  
110 - Image.asset(  
111 - 'lock'.assetPng,  
112 - height: 34.h,  
113 - width: 31.w,  
114 - ),  
115 - 18.5.horizontalSpace,  
116 - Expanded(  
117 - child: TextFieldCustomerWidget(  
118 - hitText: '请输入验证码',  
119 - bgImageName: 'Input_layer_down',  
120 - onChangeValue: (String value) {  
121 - bloc.add(CheckCodeChangeEvent());  
122 - },  
123 - textInputType: TextInputType.emailAddress,  
124 - controller: bloc.checkNumController,  
125 - )),  
126 - 16.5.horizontalSpace,  
127 - TimerWidget(  
128 - pageType: 1,  
129 - canSendSms: bloc.canSendSms,  
130 - sendSmsEvent: () => bloc.add(SendSmsCodeEvent()),  
131 - )  
132 - ],  
133 - )  
134 - ],  
135 - )),  
136 - 2.verticalSpace,  
137 - Image.asset(  
138 - 'steven_bride'.assetPng,  
139 - height: 173.h,  
140 - width: 157.w,  
141 - )  
142 - ],  
143 - ),  
144 - GestureDetector(  
145 - onTap: () {  
146 - if (bloc.canSetPwd) {  
147 - bloc.add(SetPassWordEvent());  
148 - }  
149 - },  
150 - child: Container(  
151 - decoration: BoxDecoration(  
152 - image: DecorationImage(  
153 - image: AssetImage(bloc.canSetPwd ? 'login_enter'.assetPng : 'login_enter_dis'.assetPng),  
154 - fit: BoxFit.fill),  
155 - ),  
156 - padding: EdgeInsets.symmetric(horizontal: 28.w, vertical: 14.h),  
157 - child: Text(  
158 - '确定',  
159 - style: TextStyle(fontSize: 16.sp, color: Colors.white),  
160 - ),  
161 - ),  
162 - )  
163 - ],  
164 - ), 58 + child: SingleChildScrollView(
  59 + child: Padding(
  60 + padding: EdgeInsets.only(left: 49.w, right: 10.w),
  61 + child: Column(
  62 + children: [
  63 + Row(
  64 + children: [
  65 + Image.asset(
  66 + 'wow_logo'.assetPng,
  67 + height: 49.w,
  68 + width: 83.5.h,
  69 + ),
  70 + 12.5.horizontalSpace,
  71 + Text(
  72 + '修改密码\n请输入您的手机号和验证码吧',
  73 + style: TextStyle(fontSize: 16.sp, color: const Color(0xFF666666)),
  74 + )
  75 + ],
165 ), 76 ),
166 - ),  
167 - Container(  
168 - padding: EdgeInsets.only(top: 16.h),  
169 - alignment: Alignment.topLeft,  
170 - child: IconButton(  
171 - onPressed: () {  
172 - Navigator.pop(context);  
173 - },  
174 - icon: Image.asset(  
175 - 'back_around'.assetPng,  
176 - width: 40.w,  
177 - height: 40.h,  
178 - ) 77 + Row(
  78 + crossAxisAlignment: CrossAxisAlignment.start,
  79 + children: [
  80 + Expanded(
  81 + child: Column(
  82 + children: [
  83 + 44.5.verticalSpace,
  84 + Row(
  85 + children: [
  86 + Image.asset(
  87 + 'phone'.assetPng,
  88 + height: 45.h,
  89 + width: 35.w,
  90 + ),
  91 + 15.horizontalSpace,
  92 + Expanded(
  93 + child: TextFieldCustomerWidget(
  94 + height: 50.h,
  95 + hitText: '请输入当前手机号',
  96 + textInputType: TextInputType.phone,
  97 + bgImageName: 'Input_layer_up',
  98 + onChangeValue: (String value) {
  99 + bloc.add(PhoneNumChangeEvent());
  100 + },
  101 + controller: bloc.phoneNumController,
  102 + ))
  103 + ],
  104 + ),
  105 + 11.5.verticalSpace,
  106 + Row(
  107 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
  108 + children: [
  109 + Image.asset(
  110 + 'lock'.assetPng,
  111 + height: 34.h,
  112 + width: 31.w,
  113 + ),
  114 + 18.5.horizontalSpace,
  115 + Expanded(
  116 + child: TextFieldCustomerWidget(
  117 + hitText: '请输入验证码',
  118 + bgImageName: 'Input_layer_down',
  119 + onChangeValue: (String value) {
  120 + bloc.add(CheckCodeChangeEvent());
  121 + },
  122 + textInputType: TextInputType.emailAddress,
  123 + controller: bloc.checkNumController,
  124 + )),
  125 + 16.5.horizontalSpace,
  126 + TimerWidget(
  127 + pageType: 1,
  128 + canSendSms: bloc.canSendSms,
  129 + sendSmsEvent: () => bloc.add(SendSmsCodeEvent()),
  130 + )
  131 + ],
  132 + )
  133 + ],
  134 + )),
  135 + 2.verticalSpace,
  136 + Image.asset(
  137 + 'steven_bride'.assetPng,
  138 + height: 173.h,
  139 + width: 157.w,
  140 + )
  141 + ],
179 ), 142 ),
180 - ),  
181 - ]  
182 - ) 143 + GestureDetector(
  144 + onTap: () {
  145 + if (bloc.canSetPwd) {
  146 + bloc.add(SetPassWordEvent());
  147 + }
  148 + },
  149 + child: Container(
  150 + decoration: BoxDecoration(
  151 + image: DecorationImage(
  152 + image: AssetImage(bloc.canSetPwd ? 'login_enter'.assetPng : 'login_enter_dis'.assetPng),
  153 + fit: BoxFit.fill),
  154 + ),
  155 + padding: EdgeInsets.symmetric(horizontal: 28.w, vertical: 14.h),
  156 + child: Text(
  157 + '确定',
  158 + style: TextStyle(fontSize: 16.sp, color: Colors.white),
  159 + ),
  160 + ),
  161 + )
  162 + ],
  163 + ),
  164 + ),
  165 + ),
183 ), 166 ),
184 ), 167 ),
185 ); 168 );
lib/pages/module/module_page.dart renamed to lib/pages/module/course_module_page.dart
@@ -9,9 +9,9 @@ import &#39;package:wow_english/route/route.dart&#39;; @@ -9,9 +9,9 @@ import &#39;package:wow_english/route/route.dart&#39;;
9 import 'bloc/module_bloc.dart'; 9 import 'bloc/module_bloc.dart';
10 import 'widgets/module_item_widget.dart'; 10 import 'widgets/module_item_widget.dart';
11 11
12 -// 阶段(模块)列表页  
13 -class ModulePage extends StatelessWidget {  
14 - const ModulePage({super.key, this.starPageIndex}); 12 +// 课程阶段(模块)列表页
  13 +class CourseModulePage extends StatelessWidget {
  14 + const CourseModulePage({super.key, this.starPageIndex});
15 15
16 final int? starPageIndex; 16 final int? starPageIndex;
17 17
@@ -37,26 +37,7 @@ class _LessonPageView extends StatelessWidget { @@ -37,26 +37,7 @@ class _LessonPageView extends StatelessWidget {
37 return BlocListener<ModuleBloc, ModuleState>( 37 return BlocListener<ModuleBloc, ModuleState>(
38 listener: (context, state) {}, 38 listener: (context, state) {},
39 child: Scaffold( 39 child: Scaffold(
40 - appBar: WEAppBar(  
41 - leading: IconButton(  
42 - onPressed: () {  
43 - popPage();  
44 - },  
45 - icon: Image.asset(  
46 - 'back'.assetPng,  
47 - height: 43,  
48 - width: 43,  
49 - )),  
50 - // actions: <Widget>[  
51 - // IconButton(  
52 - // icon: Image.asset('shop'.assetPng),  
53 - // color: Colors.white,  
54 - // onPressed: () {  
55 - // showToast('购买');  
56 - // },  
57 - // )  
58 - // ],  
59 - ), 40 + appBar: const WEAppBar(),
60 body: _lessViewWidget(), 41 body: _lessViewWidget(),
61 ), 42 ),
62 ); 43 );
lib/pages/shop/exchane/exchange_lesson_page.dart
@@ -6,6 +6,7 @@ import &#39;package:wow_english/common/widgets/textfield_customer_widget.dart&#39;; @@ -6,6 +6,7 @@ import &#39;package:wow_english/common/widgets/textfield_customer_widget.dart&#39;;
6 import 'package:wow_english/pages/shop/exchane/widegts/exchange_result_dialog.dart'; 6 import 'package:wow_english/pages/shop/exchane/widegts/exchange_result_dialog.dart';
7 import 'package:wow_english/route/route.dart'; 7 import 'package:wow_english/route/route.dart';
8 8
  9 +import '../../../common/widgets/we_app_bar.dart';
9 import 'bloc/exchange_lesson_bloc.dart'; 10 import 'bloc/exchange_lesson_bloc.dart';
10 11
11 class ExchangeLessonPage extends StatelessWidget { 12 class ExchangeLessonPage extends StatelessWidget {
@@ -29,102 +30,102 @@ class _ExchangeLessonPage extends StatelessWidget { @@ -29,102 +30,102 @@ class _ExchangeLessonPage extends StatelessWidget {
29 showDialog<ExChangeResultDialog>( 30 showDialog<ExChangeResultDialog>(
30 context: context, 31 context: context,
31 barrierDismissible: !state.result, 32 barrierDismissible: !state.result,
32 - builder: (context){ 33 + builder: (context) {
33 return ExChangeResultDialog( 34 return ExChangeResultDialog(
34 - resultType:state.result,  
35 - onTap:(){ 35 + resultType: state.result,
  36 + onTap: () {
36 popPage(); 37 popPage();
37 - }  
38 - );  
39 - }); 38 + });
  39 + });
40 } 40 }
41 }, 41 },
42 child: _exchangeLessonPageView(), 42 child: _exchangeLessonPageView(),
43 ); 43 );
44 } 44 }
45 45
46 - Widget _exchangeLessonPageView() => BlocBuilder<ExchangeLessonBloc, ExchangeLessonState>(builder: (context, state) { 46 + Widget _exchangeLessonPageView() =>
  47 + BlocBuilder<ExchangeLessonBloc, ExchangeLessonState>(
  48 + builder: (context, state) {
47 final bloc = BlocProvider.of<ExchangeLessonBloc>(context); 49 final bloc = BlocProvider.of<ExchangeLessonBloc>(context);
48 return Scaffold( 50 return Scaffold(
49 - resizeToAvoidBottomInset: false,  
50 - body: Container(  
51 - color: Colors.white,  
52 - child: Column(  
53 - mainAxisAlignment: MainAxisAlignment.center, 51 + resizeToAvoidBottomInset: false,
  52 + body: Stack(
54 children: [ 53 children: [
55 - 10.5.verticalSpace,  
56 - Padding(  
57 - padding: EdgeInsets.symmetric(horizontal: 15.w),  
58 - child: Row(  
59 - mainAxisAlignment: MainAxisAlignment.spaceBetween,  
60 - crossAxisAlignment: CrossAxisAlignment.start, 54 + Container(
  55 + color: Colors.white,
  56 + child: Column(
  57 + mainAxisAlignment: MainAxisAlignment.center,
61 children: [ 58 children: [
62 - IconButton(  
63 - icon: Image.asset(  
64 - 'back_around'.assetPng,  
65 - width: 40,  
66 - height: 40, 59 + 10.5.verticalSpace,
  60 + Padding(
  61 + padding: EdgeInsets.symmetric(horizontal: 15.w),
  62 + child: Center(
  63 + child: Image.asset(
  64 + 'wow_ex_lesson'.assetPng,
  65 + width: 139.w,
  66 + height: 81.h,
  67 + ),
  68 + ),
  69 + ),
  70 + Expanded(
  71 + child: Padding(
  72 + padding: EdgeInsets.symmetric(horizontal: 135.w),
  73 + child: Column(
  74 + mainAxisAlignment: MainAxisAlignment.center,
  75 + children: [
  76 + TextFieldCustomerWidget(
  77 + height: 55.h,
  78 + hitText: '请输入兑换码',
  79 + bgImageName: 'Input_layer_up',
  80 + textInputType: TextInputType.emailAddress,
  81 + controller: bloc.codeNumberController,
  82 + onChangeValue: (String value) {
  83 + bloc.add(CodeNumberChangeEvent());
  84 + },
  85 + ),
  86 + 21.5.verticalSpace,
  87 + GestureDetector(
  88 + onTap: () {
  89 + if (bloc.checkCode) {
  90 + bloc.add(CheckCodeEvent());
  91 + }
  92 + },
  93 + child: Container(
  94 + decoration: BoxDecoration(
  95 + image: DecorationImage(
  96 + image: AssetImage(bloc.checkCode
  97 + ? 'ex_sure'.assetPng
  98 + : 'ex_dis'.assetPng),
  99 + fit: BoxFit.fill),
  100 + ),
  101 + padding: EdgeInsets.symmetric(
  102 + horizontal: 27.w, vertical: 14.h),
  103 + child: Text(
  104 + '兑换',
  105 + style: TextStyle(
  106 + fontSize: 16.sp, color: Colors.white),
  107 + ),
  108 + ),
  109 + )
  110 + ],
  111 + ),
67 ), 112 ),
68 - color: Colors.white,  
69 - onPressed: () {  
70 - Navigator.pop(context);  
71 - },  
72 ), 113 ),
73 Image.asset( 114 Image.asset(
74 - 'wow_ex_lesson'.assetPng,  
75 - width: 139.w,  
76 - height: 81.h, 115 + 'bottom_grass'.assetPng,
77 ), 116 ),
78 - SizedBox.fromSize(size: const Size(40.0, 40.0))  
79 ], 117 ],
80 ), 118 ),
81 ), 119 ),
82 - Expanded(  
83 - child: Padding(  
84 - padding: EdgeInsets.symmetric(horizontal: 135.w),  
85 - child: Column(  
86 - mainAxisAlignment: MainAxisAlignment.center,  
87 - children: [  
88 - TextFieldCustomerWidget(  
89 - height: 55.h,  
90 - hitText: '请输入兑换码',  
91 - bgImageName: 'Input_layer_up',  
92 - textInputType: TextInputType.emailAddress,  
93 - controller: bloc.codeNumberController,  
94 - onChangeValue: (String value) {  
95 - bloc.add(CodeNumberChangeEvent());  
96 - },  
97 - ),  
98 - 21.5.verticalSpace,  
99 - GestureDetector(  
100 - onTap: () {  
101 - if (bloc.checkCode) {  
102 - bloc.add(CheckCodeEvent());  
103 - }  
104 - },  
105 - child: Container(  
106 - decoration: BoxDecoration(  
107 - image: DecorationImage(  
108 - image: AssetImage(bloc.checkCode ? 'ex_sure'.assetPng : 'ex_dis'.assetPng),  
109 - fit: BoxFit.fill),  
110 - ),  
111 - padding: EdgeInsets.symmetric(horizontal: 27.w, vertical: 14.h),  
112 - child: Text(  
113 - '兑换',  
114 - style: TextStyle(fontSize: 16.sp, color: Colors.white),  
115 - ),  
116 - ),  
117 - )  
118 - ],  
119 - ), 120 + const Positioned(
  121 + top: 0,
  122 + left: 0,
  123 + right: 0,
  124 + child: WEAppBar(
  125 + backgroundColor: Colors.transparent,
120 ), 126 ),
121 ), 127 ),
122 - Image.asset(  
123 - 'bottom_grass'.assetPng,  
124 - ),  
125 ], 128 ],
126 - ),  
127 - ),  
128 - ); 129 + ));
129 }); 130 });
130 } 131 }
lib/pages/tab/tab_page.dart
1 import 'package:flutter/material.dart'; 1 import 'package:flutter/material.dart';
2 import 'package:flutter_bloc/flutter_bloc.dart'; 2 import 'package:flutter_bloc/flutter_bloc.dart';
3 -import 'package:wow_english/pages/module/module_page.dart'; 3 +import 'package:wow_english/pages/module/course_module_page.dart';
4 4
5 import '../unit/view.dart'; 5 import '../unit/view.dart';
6 import 'blocs/tab_bloc.dart'; 6 import 'blocs/tab_bloc.dart';
@@ -10,7 +10,7 @@ class TabPage extends StatelessWidget { @@ -10,7 +10,7 @@ class TabPage extends StatelessWidget {
10 10
11 final _pages =const <Widget>[ 11 final _pages =const <Widget>[
12 UnitPage(), 12 UnitPage(),
13 - ModulePage() 13 + CourseModulePage()
14 ]; 14 ];
15 15
16 final _tabIcons = const <Icon>[ 16 final _tabIcons = const <Icon>[
lib/route/route.dart
@@ -11,7 +11,7 @@ import &#39;package:wow_english/pages/listen/listen_page.dart&#39;; @@ -11,7 +11,7 @@ import &#39;package:wow_english/pages/listen/listen_page.dart&#39;;
11 import 'package:wow_english/pages/login/forgetpwd/forget_password_home_page.dart'; 11 import 'package:wow_english/pages/login/forgetpwd/forget_password_home_page.dart';
12 import 'package:wow_english/pages/login/loginpage/login_page.dart'; 12 import 'package:wow_english/pages/login/loginpage/login_page.dart';
13 import 'package:wow_english/pages/login/setpwd/set_pwd_page.dart'; 13 import 'package:wow_english/pages/login/setpwd/set_pwd_page.dart';
14 -import 'package:wow_english/pages/module/module_page.dart'; 14 +import 'package:wow_english/pages/module/course_module_page.dart';
15 import 'package:wow_english/pages/practice/topic_picture_page.dart'; 15 import 'package:wow_english/pages/practice/topic_picture_page.dart';
16 import 'package:wow_english/pages/repeatafter/repeat_after_page.dart'; 16 import 'package:wow_english/pages/repeatafter/repeat_after_page.dart';
17 import 'package:wow_english/pages/repeataftercontent/repeat_after_content_page.dart'; 17 import 'package:wow_english/pages/repeataftercontent/repeat_after_content_page.dart';
@@ -115,7 +115,7 @@ class AppRouter { @@ -115,7 +115,7 @@ class AppRouter {
115 return CupertinoPageRoute( 115 return CupertinoPageRoute(
116 builder: (_) => const ForgetPasswordHomePage()); 116 builder: (_) => const ForgetPasswordHomePage());
117 case AppRouteName.courseModule: 117 case AppRouteName.courseModule:
118 - return CupertinoPageRoute(builder: (_) => const ModulePage()); 118 + return CupertinoPageRoute(builder: (_) => const CourseModulePage());
119 case AppRouteName.courseUnit: 119 case AppRouteName.courseUnit:
120 CourseModuleEntity courseModuleEntity = CourseModuleEntity(); 120 CourseModuleEntity courseModuleEntity = CourseModuleEntity();
121 if (settings.arguments != null) { 121 if (settings.arguments != null) {