Commit 6d61919a27d0d1918de3bf7658e66cb66139d83b
1 parent
07599105
feat:增加过渡页&集成串联游戏
Showing
19 changed files
with
430 additions
and
3 deletions
android/app/build.gradle
@@ -29,7 +29,7 @@ android { | @@ -29,7 +29,7 @@ android { | ||
29 | namespace "com.kouyuxingqiu.wow_english" | 29 | namespace "com.kouyuxingqiu.wow_english" |
30 | // compileSdkVersion flutter.compileSdkVersion | 30 | // compileSdkVersion flutter.compileSdkVersion |
31 | compileSdkVersion 33 | 31 | compileSdkVersion 33 |
32 | - // 展示没有ndk需求 | 32 | + // 暂时没有ndk需求 |
33 | // ndkVersion flutter.ndkVersion | 33 | // ndkVersion flutter.ndkVersion |
34 | 34 | ||
35 | compileOptions { | 35 | compileOptions { |
@@ -87,4 +87,5 @@ dependencies { | @@ -87,4 +87,5 @@ dependencies { | ||
87 | implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' | 87 | implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' |
88 | // kotlin扩展(可选) | 88 | // kotlin扩展(可选) |
89 | implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.2' | 89 | implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.2' |
90 | + implementation 'io.keyss.android.library:bjgame:1.0.2' | ||
90 | } | 91 | } |
android/app/src/main/kotlin/com/kouyuxingqiu/wow_english/MainActivity.kt
@@ -8,6 +8,7 @@ import androidx.core.view.WindowInsetsCompat | @@ -8,6 +8,7 @@ import androidx.core.view.WindowInsetsCompat | ||
8 | import androidx.core.view.WindowInsetsControllerCompat | 8 | import androidx.core.view.WindowInsetsControllerCompat |
9 | import com.gyf.immersionbar.BarHide | 9 | import com.gyf.immersionbar.BarHide |
10 | import com.gyf.immersionbar.ImmersionBar | 10 | import com.gyf.immersionbar.ImmersionBar |
11 | +import com.kouyuxingqiu.wow_english.methodChannels.GameMethodChannel | ||
11 | import com.kouyuxingqiu.wow_english.methodChannels.SingSoungMethodChannel | 12 | import com.kouyuxingqiu.wow_english.methodChannels.SingSoungMethodChannel |
12 | import io.flutter.embedding.android.FlutterActivity | 13 | import io.flutter.embedding.android.FlutterActivity |
13 | 14 | ||
@@ -17,7 +18,10 @@ class MainActivity : FlutterActivity() { | @@ -17,7 +18,10 @@ class MainActivity : FlutterActivity() { | ||
17 | Log.i("WowEnglish", "MainActivity onCreate") | 18 | Log.i("WowEnglish", "MainActivity onCreate") |
18 | //隐藏状态栏和导航栏 | 19 | //隐藏状态栏和导航栏 |
19 | ImmersionBar.with(this).hideBar(BarHide.FLAG_HIDE_BAR).init() | 20 | ImmersionBar.with(this).hideBar(BarHide.FLAG_HIDE_BAR).init() |
20 | - flutterEngine?.let { SingSoungMethodChannel(this, it) } | 21 | + flutterEngine?.let { |
22 | + SingSoungMethodChannel(this, it) | ||
23 | + GameMethodChannel(this, it) | ||
24 | + } | ||
21 | } | 25 | } |
22 | 26 | ||
23 | override fun onResume() { | 27 | override fun onResume() { |
android/app/src/main/kotlin/com/kouyuxingqiu/wow_english/methodChannels/GameMethodChannel.kt
0 → 100644
1 | +package com.kouyuxingqiu.wow_english.methodChannels | ||
2 | + | ||
3 | +import android.content.Intent | ||
4 | +import android.content.Intent.getIntent | ||
5 | +import android.util.Log | ||
6 | +import androidx.core.content.ContextCompat.startActivity | ||
7 | +import com.kouyuxingqiu.wow_english.singsound.SingEngineHelper | ||
8 | +import com.kouyuxingqiu.wow_english.util.GlobalHandler | ||
9 | +import io.flutter.embedding.android.FlutterActivity | ||
10 | +import io.flutter.embedding.engine.FlutterEngine | ||
11 | +import io.flutter.plugin.common.MethodChannel | ||
12 | +import org.cocos2dx.cpp.AppActivity | ||
13 | +import java.lang.ref.WeakReference | ||
14 | + | ||
15 | + | ||
16 | +/** | ||
17 | + * @author: stay | ||
18 | + * @date: 2024/4/22 18:36 | ||
19 | + * @description: 游戏方法通道 | ||
20 | + */ | ||
21 | +class GameMethodChannel(activity: FlutterActivity, flutterEngine: FlutterEngine) { | ||
22 | + private var methodChannel: MethodChannel? = null | ||
23 | + private val TAG = "GameMethodChannel" | ||
24 | + | ||
25 | + companion object { | ||
26 | + var channel: WeakReference<GameMethodChannel>? = null | ||
27 | + | ||
28 | + fun invokeMethod(method: String, arguments: Any?) { | ||
29 | + channel?.get()?.methodChannel?.invokeMethod(method, arguments) | ||
30 | + } | ||
31 | + } | ||
32 | + | ||
33 | + init { | ||
34 | + // name需与flutter端一致 | ||
35 | + methodChannel = | ||
36 | + MethodChannel( | ||
37 | + flutterEngine.dartExecutor.binaryMessenger, | ||
38 | + "wow_english/game_method_channel" | ||
39 | + ) | ||
40 | + methodChannel?.setMethodCallHandler { call, result -> | ||
41 | + Log.d(TAG, "call=${call.method} ${call.arguments} result=$result") | ||
42 | + when (call.method) { | ||
43 | + "openGamePage" -> { | ||
44 | + if (call.hasArgument("gameId")) { | ||
45 | + val gameId = call.argument<Int>("gameId") | ||
46 | + activity.startActivity( | ||
47 | + Intent(activity, AppActivity::class.java).apply { | ||
48 | + putExtra("game", gameId) | ||
49 | + }) | ||
50 | + result.success(true) | ||
51 | + } else { | ||
52 | + result.success(false) | ||
53 | + } | ||
54 | + } | ||
55 | + } | ||
56 | + } | ||
57 | + channel = WeakReference(this) | ||
58 | + } | ||
59 | +} | ||
0 | \ No newline at end of file | 60 | \ No newline at end of file |
android/build.gradle
@@ -17,6 +17,7 @@ allprojects { | @@ -17,6 +17,7 @@ allprojects { | ||
17 | google() | 17 | google() |
18 | mavenCentral() | 18 | mavenCentral() |
19 | maven { url 'https://repo.singsound.com/repository/singsound_ginger_android_sdk/' } | 19 | maven { url 'https://repo.singsound.com/repository/singsound_ginger_android_sdk/' } |
20 | + maven { url 'https://maven.zjzxsl.com/repository/android-public/' } | ||
20 | } | 21 | } |
21 | } | 22 | } |
22 | 23 |
assets/images/bg_frame_module_pic.png
0 → 100644
54.1 KB
assets/images/bg_header_sliver.png
0 → 100644
120 KB
assets/images/ic_countdown.png
0 → 100644
2.1 KB
assets/images/label_module_game.png
0 → 100644
15.7 KB
assets/images/label_module_study.png
0 → 100644
15.9 KB
assets/images/pic_module_game.png
0 → 100644
217 KB
assets/images/pic_module_study.png
0 → 100644
248 KB
lib/app/splash_page.dart
@@ -69,7 +69,7 @@ class _TransitionViewState extends State<TransitionView> { | @@ -69,7 +69,7 @@ class _TransitionViewState extends State<TransitionView> { | ||
69 | } else { | 69 | } else { |
70 | pushNamedAndRemoveUntil(AppRouteName.login, (route) => false); | 70 | pushNamedAndRemoveUntil(AppRouteName.login, (route) => false); |
71 | }*/ | 71 | }*/ |
72 | - pushNamedAndRemoveUntil(AppRouteName.home, (route) => false); | 72 | + pushNamedAndRemoveUntil(AppRouteName.moduleSelect, (route) => false); |
73 | }); | 73 | }); |
74 | } | 74 | } |
75 | 75 |
lib/pages/moduleSelect/bloc.dart
0 → 100644
1 | +import 'package:bloc/bloc.dart'; | ||
2 | + | ||
3 | +import 'event.dart'; | ||
4 | +import 'state.dart'; | ||
5 | + | ||
6 | + | ||
7 | +class ModuleSelectBloc extends Bloc<ModuleSelectEvent, ModuleSelectState> { | ||
8 | + | ||
9 | + ModuleSelectBloc() : super(ModuleSelectState().init()) { | ||
10 | + on<InitEvent>(_init); | ||
11 | + } | ||
12 | + | ||
13 | + void _init(InitEvent event, Emitter<ModuleSelectState> emit) async { | ||
14 | + emit(state.clone()); | ||
15 | + } | ||
16 | +} |
lib/pages/moduleSelect/event.dart
0 → 100644
lib/pages/moduleSelect/state.dart
0 → 100644
lib/pages/moduleSelect/view.dart
0 → 100644
1 | +import 'package:flutter/material.dart'; | ||
2 | +import 'package:flutter_bloc/flutter_bloc.dart'; | ||
3 | +import 'package:wow_english/common/extension/string_extension.dart'; | ||
4 | +import 'package:wow_english/pages/moduleSelect/state.dart'; | ||
5 | +import 'package:wow_english/pages/moduleSelect/widgets/BaseHomeHeaderWidget.dart'; | ||
6 | + | ||
7 | +import 'bloc.dart'; | ||
8 | +import 'event.dart'; | ||
9 | +import 'package:flutter_screenutil/flutter_screenutil.dart'; | ||
10 | +import 'package:wow_english/route/route.dart'; | ||
11 | + | ||
12 | +class ModuleSelectPage extends StatelessWidget { | ||
13 | + const ModuleSelectPage({super.key}); | ||
14 | + | ||
15 | + @override | ||
16 | + Widget build(BuildContext context) { | ||
17 | + return BlocProvider( | ||
18 | + create: (BuildContext context) => ModuleSelectBloc()..add(InitEvent()), | ||
19 | + child: Builder(builder: (context) => _HomePageView()), | ||
20 | + ); | ||
21 | + } | ||
22 | +} | ||
23 | + | ||
24 | +class _HomePageView extends StatelessWidget { | ||
25 | + @override | ||
26 | + Widget build(BuildContext context) { | ||
27 | + final bloc = BlocProvider.of<ModuleSelectBloc>(context); | ||
28 | + return BlocListener<ModuleSelectBloc, ModuleSelectState>( | ||
29 | + listener: (context, state) {}, | ||
30 | + child: _homeView(), | ||
31 | + ); | ||
32 | + } | ||
33 | + | ||
34 | + Widget _homeView() => BlocBuilder<ModuleSelectBloc, ModuleSelectState>( | ||
35 | + builder: (context, state) { | ||
36 | + final bloc = BlocProvider.of<ModuleSelectBloc>(context); | ||
37 | + return Scaffold( | ||
38 | + body: Container( | ||
39 | + color: Colors.white, | ||
40 | + child: Column( | ||
41 | + children: [ | ||
42 | + const BaseHomeHeaderWidget(), | ||
43 | + Expanded( | ||
44 | + child: Center( | ||
45 | + child: Row( | ||
46 | + children: [ | ||
47 | + Expanded( | ||
48 | + child: GestureDetector( | ||
49 | + onTap: () { | ||
50 | + pushNamed(AppRouteName.home); | ||
51 | + }, | ||
52 | + child: Column( | ||
53 | + mainAxisAlignment: MainAxisAlignment.center, | ||
54 | + children: [ | ||
55 | + Image.asset('pic_module_study'.assetPng, | ||
56 | + width: 162.5.w, height: 203.5.h), | ||
57 | + 10.verticalSpace, | ||
58 | + Image.asset('label_module_study'.assetPng, | ||
59 | + width: 124.w, height: 34.h), | ||
60 | + ], | ||
61 | + ), | ||
62 | + ), | ||
63 | + ), | ||
64 | + Expanded( | ||
65 | + child: GestureDetector( | ||
66 | + onTap: () { | ||
67 | + pushNamed(AppRouteName.games); | ||
68 | + }, | ||
69 | + child: Column( | ||
70 | + mainAxisAlignment: MainAxisAlignment.center, | ||
71 | + children: [ | ||
72 | + Image.asset('pic_module_game'.assetPng, | ||
73 | + width: 162.5.w, height: 203.5.h), | ||
74 | + 10.verticalSpace, | ||
75 | + Image.asset('label_module_game'.assetPng, | ||
76 | + width: 124.w, height: 34.h), | ||
77 | + ], | ||
78 | + )), | ||
79 | + ), | ||
80 | + ], | ||
81 | + ), | ||
82 | + ), | ||
83 | + ) | ||
84 | + ], | ||
85 | + ), | ||
86 | + ), | ||
87 | + ); | ||
88 | + }); | ||
89 | +} |
lib/pages/moduleSelect/widgets/BaseHomeHeaderWidget.dart
0 → 100644
1 | +import 'package:flutter/material.dart'; | ||
2 | +import 'package:flutter_bloc/flutter_bloc.dart'; | ||
3 | +import 'package:flutter_screenutil/flutter_screenutil.dart'; | ||
4 | +import 'package:wow_english/common/extension/string_extension.dart'; | ||
5 | + | ||
6 | +import '../../../common/core/user_util.dart'; | ||
7 | +import '../../../models/course_entity.dart'; | ||
8 | +import '../../../route/route.dart'; | ||
9 | +import '../../../utils/image_util.dart'; | ||
10 | +import '../../user/bloc/user_bloc.dart'; | ||
11 | + | ||
12 | +class BaseHomeHeaderWidget extends StatelessWidget { | ||
13 | + const BaseHomeHeaderWidget({super.key, this.entity}); | ||
14 | + | ||
15 | + final CourseEntity? entity; | ||
16 | + | ||
17 | + @override | ||
18 | + Widget build(BuildContext context) { | ||
19 | + return BlocBuilder<UserBloc, UserState>( | ||
20 | + builder: (context, state) { | ||
21 | + return Container( | ||
22 | + height: 45, | ||
23 | + width: double.infinity, | ||
24 | + decoration: BoxDecoration( | ||
25 | + image: DecorationImage( | ||
26 | + image: AssetImage('bg_header_sliver'.assetPng), | ||
27 | + fit: BoxFit.cover, | ||
28 | + ), | ||
29 | + ), | ||
30 | + padding: EdgeInsets.symmetric(horizontal: 9.5.w), | ||
31 | + child: Row( | ||
32 | + children: [ | ||
33 | + ScreenUtil().bottomBarHeight.horizontalSpace, | ||
34 | + GestureDetector( | ||
35 | + onTap: () => {onUserClick()}, | ||
36 | + child: Container( | ||
37 | + decoration: BoxDecoration( | ||
38 | + border: Border.all( | ||
39 | + width: 1.0, | ||
40 | + color: const Color(0xFF140C10), | ||
41 | + ), | ||
42 | + borderRadius: BorderRadius.circular(21), | ||
43 | + ), | ||
44 | + child: CircleAvatar( | ||
45 | + radius: 21, | ||
46 | + backgroundImage: ImageUtil.getImageProviderOnDefault( | ||
47 | + UserUtil.getUser()?.avatarUrl), | ||
48 | + ), | ||
49 | + ), | ||
50 | + ), | ||
51 | + GestureDetector( | ||
52 | + onTap: () { | ||
53 | + onUserClick(); | ||
54 | + }, | ||
55 | + child: Container( | ||
56 | + margin: const EdgeInsets.only(left: 7), | ||
57 | + padding: const EdgeInsets.all(4.0), | ||
58 | + decoration: BoxDecoration( | ||
59 | + color: Colors.white, | ||
60 | + borderRadius: BorderRadius.circular(2), | ||
61 | + border: Border.all( | ||
62 | + width: 1.0, | ||
63 | + color: const Color(0xFF140C10), | ||
64 | + style: BorderStyle.solid), | ||
65 | + ), | ||
66 | + child: Text( | ||
67 | + UserUtil.getUser()?.name ?? '未登录', | ||
68 | + style: TextStyle( | ||
69 | + color: const Color(0xFF333333), fontSize: 16.sp), | ||
70 | + ), | ||
71 | + ), | ||
72 | + ), | ||
73 | + 20.horizontalSpace, | ||
74 | + const Expanded( | ||
75 | + child: Text( | ||
76 | + "WOW ENGLISH", | ||
77 | + textAlign: TextAlign.left, | ||
78 | + style: TextStyle(color: Colors.white, fontSize: 30.0), | ||
79 | + )), | ||
80 | + Row(children: <Widget>[ | ||
81 | + Image( | ||
82 | + width: 20.0.w, | ||
83 | + height: 20.0.h, | ||
84 | + image: AssetImage('ic_countdown'.assetPng)), | ||
85 | + // 替换为你的图片资源路径 | ||
86 | + const SizedBox(width: 10.0), | ||
87 | + // 图片和文本之间的间隔 | ||
88 | + const Text('还剩29天'), | ||
89 | + ]), | ||
90 | + ScreenUtil().bottomBarHeight.horizontalSpace, | ||
91 | + ], | ||
92 | + )); | ||
93 | + }, | ||
94 | + ); | ||
95 | + } | ||
96 | +} | ||
97 | + | ||
98 | +void onUserClick() { | ||
99 | + if (UserUtil.token.isEmpty) { | ||
100 | + pushNamed(AppRouteName.login); | ||
101 | + } else { | ||
102 | + pushNamed(AppRouteName.user); | ||
103 | + } | ||
104 | +} |
lib/pages/shop/home/widgets/product_item.dart
0 → 100644
1 | +import 'package:cached_network_image/cached_network_image.dart'; | ||
2 | +import 'package:flutter/material.dart'; | ||
3 | +import 'package:flutter_screenutil/flutter_screenutil.dart'; | ||
4 | +import 'package:wow_english/models/product_entity.dart'; | ||
5 | + | ||
6 | +class ProductItem extends StatelessWidget { | ||
7 | + const ProductItem({super.key, | ||
8 | + required this.onTap, this.entity}); | ||
9 | + | ||
10 | + final ProductEntity? entity; | ||
11 | + | ||
12 | + final Function() onTap; | ||
13 | + | ||
14 | + @override | ||
15 | + Widget build(BuildContext context) { | ||
16 | + return Container( | ||
17 | + decoration: BoxDecoration( | ||
18 | + borderRadius: BorderRadius.circular(10.r), | ||
19 | + border: Border.all( | ||
20 | + width: 1.0, | ||
21 | + color: Colors.black | ||
22 | + ) | ||
23 | + // image: DecorationImage( | ||
24 | + // image: AssetImage( | ||
25 | + // ''.assetPng, | ||
26 | + // ), | ||
27 | + // fit: BoxFit.fill | ||
28 | + // ) | ||
29 | + ), | ||
30 | + padding: EdgeInsets.symmetric(horizontal: 16.w,vertical: 16.h), | ||
31 | + child: Row( | ||
32 | + mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
33 | + children: [ | ||
34 | + // Container( | ||
35 | + // width: 124.w, | ||
36 | + // decoration: BoxDecoration( | ||
37 | + // border: Border.all( | ||
38 | + // width: 1.0, | ||
39 | + // color: const Color(0xFF333333), | ||
40 | + // ), | ||
41 | + // image: const DecorationImage( | ||
42 | + // | ||
43 | + // image: NetworkImage(entity?.coverUrl??''), | ||
44 | + // ) | ||
45 | + // ), | ||
46 | + // ), | ||
47 | + CachedNetworkImage( | ||
48 | + imageUrl: entity?.picUrl ?? '', | ||
49 | + fit: BoxFit.fill, | ||
50 | + imageBuilder: (context, imageProvider) => | ||
51 | + Container( | ||
52 | + decoration: BoxDecoration( | ||
53 | + border: Border.all( | ||
54 | + width: 1.0, | ||
55 | + color: const Color(0xFF333333), | ||
56 | + ), | ||
57 | + borderRadius: BorderRadius.circular(5.0), | ||
58 | + ), | ||
59 | + ), | ||
60 | + placeholder: (context, url) => CircularProgressIndicator(), | ||
61 | + // errorWidget: (context, url, error) => const Icon(Icons.error), | ||
62 | + height: 124.h, | ||
63 | + width: 124.w, | ||
64 | + ), | ||
65 | + 21.5.horizontalSpace, | ||
66 | + Expanded( | ||
67 | + child: Column( | ||
68 | + mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
69 | + crossAxisAlignment: CrossAxisAlignment.end, | ||
70 | + children: [ | ||
71 | + Text( | ||
72 | + entity?.name ?? '', | ||
73 | + softWrap: true, | ||
74 | + textAlign: TextAlign.left, | ||
75 | + style: TextStyle( | ||
76 | + fontSize: 12.sp, | ||
77 | + color: const Color(0xFF333333) | ||
78 | + ), | ||
79 | + ), | ||
80 | + RichText( | ||
81 | + text: TextSpan( | ||
82 | + children:[ | ||
83 | + TextSpan( | ||
84 | + text: '¥', | ||
85 | + style: TextStyle( | ||
86 | + fontSize: 21.sp, | ||
87 | + color: const Color(0xFFF51A1A), | ||
88 | + ) | ||
89 | + ), | ||
90 | + TextSpan( | ||
91 | + text: entity?.price?.toString() ?? '', | ||
92 | + style: TextStyle( | ||
93 | + fontSize: 40.sp, | ||
94 | + color: const Color(0xFFF51A1A), | ||
95 | + ), | ||
96 | + ) | ||
97 | + ] | ||
98 | + ), | ||
99 | + ), | ||
100 | + GestureDetector( | ||
101 | + onTap: () { | ||
102 | + onTap(); | ||
103 | + }, | ||
104 | + child: Container( | ||
105 | + decoration: BoxDecoration( | ||
106 | + color: const Color(0xFFF5C51F), | ||
107 | + borderRadius: BorderRadius.circular(5.r), | ||
108 | + border: Border.all( | ||
109 | + color: const Color(0xFF333333), | ||
110 | + width: 1.0, | ||
111 | + ) | ||
112 | + ), | ||
113 | + padding: EdgeInsets.symmetric( | ||
114 | + vertical: 1.h, | ||
115 | + horizontal: 26.5.w, | ||
116 | + ), | ||
117 | + child: Text( | ||
118 | + '立即购买', | ||
119 | + style: TextStyle( | ||
120 | + fontSize: 10.sp, | ||
121 | + color: const Color(0xFF333333) | ||
122 | + ), | ||
123 | + ), | ||
124 | + ), | ||
125 | + ) | ||
126 | + ], | ||
127 | + ), | ||
128 | + ) | ||
129 | + ], | ||
130 | + ), | ||
131 | + ); | ||
132 | + } | ||
133 | +} | ||
0 | \ No newline at end of file | 134 | \ No newline at end of file |
lib/route/route.dart
@@ -3,12 +3,14 @@ import 'package:flutter/material.dart'; | @@ -3,12 +3,14 @@ import 'package:flutter/material.dart'; | ||
3 | import 'package:wow_english/app/splash_page.dart'; | 3 | import 'package:wow_english/app/splash_page.dart'; |
4 | import 'package:wow_english/common/pages/wow_web_page.dart'; | 4 | import 'package:wow_english/common/pages/wow_web_page.dart'; |
5 | import 'package:wow_english/models/product_entity.dart'; | 5 | import 'package:wow_english/models/product_entity.dart'; |
6 | +import 'package:wow_english/pages/games/view.dart'; | ||
6 | import 'package:wow_english/pages/home/home_page.dart'; | 7 | import 'package:wow_english/pages/home/home_page.dart'; |
7 | import 'package:wow_english/pages/lessons/lesson_page.dart'; | 8 | import 'package:wow_english/pages/lessons/lesson_page.dart'; |
8 | import 'package:wow_english/pages/listen/listen_page.dart'; | 9 | import 'package:wow_english/pages/listen/listen_page.dart'; |
9 | import 'package:wow_english/pages/login/forgetpwd/forget_password_home_page.dart'; | 10 | import 'package:wow_english/pages/login/forgetpwd/forget_password_home_page.dart'; |
10 | import 'package:wow_english/pages/login/loginpage/login_page.dart'; | 11 | import 'package:wow_english/pages/login/loginpage/login_page.dart'; |
11 | import 'package:wow_english/pages/login/setpwd/set_pwd_page.dart'; | 12 | import 'package:wow_english/pages/login/setpwd/set_pwd_page.dart'; |
13 | +import 'package:wow_english/pages/moduleSelect/view.dart'; | ||
12 | import 'package:wow_english/pages/practice/topic_picture_page.dart'; | 14 | import 'package:wow_english/pages/practice/topic_picture_page.dart'; |
13 | import 'package:wow_english/pages/repeatafter/repeat_after_page.dart'; | 15 | import 'package:wow_english/pages/repeatafter/repeat_after_page.dart'; |
14 | import 'package:wow_english/pages/repeataftercontent/repeat_after_content_page.dart'; | 16 | import 'package:wow_english/pages/repeataftercontent/repeat_after_content_page.dart'; |
@@ -32,6 +34,8 @@ import '../utils/log_util.dart'; | @@ -32,6 +34,8 @@ import '../utils/log_util.dart'; | ||
32 | class AppRouteName { | 34 | class AppRouteName { |
33 | static const String splash = 'splash'; | 35 | static const String splash = 'splash'; |
34 | static const String login = 'login'; | 36 | static const String login = 'login'; |
37 | + static const String moduleSelect = 'moduleSelect'; | ||
38 | + static const String games = 'games'; | ||
35 | static const String home = 'home'; | 39 | static const String home = 'home'; |
36 | static const String fogPwd = 'fogPwd'; | 40 | static const String fogPwd = 'fogPwd'; |
37 | 41 | ||
@@ -88,6 +92,10 @@ class AppRouter { | @@ -88,6 +92,10 @@ class AppRouter { | ||
88 | transitionsBuilder: (_, __, ___, child) => child); | 92 | transitionsBuilder: (_, __, ___, child) => child); |
89 | case AppRouteName.login: | 93 | case AppRouteName.login: |
90 | return CupertinoPageRoute(builder: (_) => const LoginPage()); | 94 | return CupertinoPageRoute(builder: (_) => const LoginPage()); |
95 | + case AppRouteName.moduleSelect: | ||
96 | + return CupertinoPageRoute(builder: (_) => const ModuleSelectPage()); | ||
97 | + case AppRouteName.games: | ||
98 | + return CupertinoPageRoute(builder: (_) => const GamesPage()); | ||
91 | case AppRouteName.home: | 99 | case AppRouteName.home: |
92 | var moduleId = ''; | 100 | var moduleId = ''; |
93 | if (settings.arguments != null) { | 101 | if (settings.arguments != null) { |