Commit 842b7132f392105f396d8d52fba4d9bb321abe8f
1 parent
c95453ce
feat:磨耳朵/练习页面调整
Showing
37 changed files
with
526 additions
and
1038 deletions
lib/pages/home/bloc/home_bloc.dart
| @@ -21,23 +21,10 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> { | @@ -21,23 +21,10 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> { | ||
| 21 | on<RequestDataEvent>(_requestData); | 21 | on<RequestDataEvent>(_requestData); |
| 22 | } | 22 | } |
| 23 | 23 | ||
| 24 | - Future<void> requestData() async { | ||
| 25 | - try { | ||
| 26 | - await loading(() async { | ||
| 27 | - _modelData = await HomeDao.courseLesson(moduleId: moduleId??''); | ||
| 28 | - emit(HomeDataLoadState()); | ||
| 29 | - }); | ||
| 30 | - } catch (e) { | ||
| 31 | - if (e is ApiException) { | ||
| 32 | - EasyLoading.showToast(e.message.toString()); | ||
| 33 | - } | ||
| 34 | - } | ||
| 35 | - } | ||
| 36 | - | ||
| 37 | void _requestData(RequestDataEvent event, Emitter<HomeState> emitter) async { | 24 | void _requestData(RequestDataEvent event, Emitter<HomeState> emitter) async { |
| 38 | try { | 25 | try { |
| 39 | await loading(() async { | 26 | await loading(() async { |
| 40 | - HomeDao.courseLesson(); | 27 | + _modelData = await HomeDao.courseLesson(moduleId: moduleId??''); |
| 41 | emitter(HomeDataLoadState()); | 28 | emitter(HomeDataLoadState()); |
| 42 | }); | 29 | }); |
| 43 | } catch (e) { | 30 | } catch (e) { |
lib/pages/home/home_page.dart
| @@ -20,7 +20,7 @@ class HomePage extends StatelessWidget { | @@ -20,7 +20,7 @@ class HomePage extends StatelessWidget { | ||
| 20 | @override | 20 | @override |
| 21 | Widget build(BuildContext context) { | 21 | Widget build(BuildContext context) { |
| 22 | return BlocProvider( | 22 | return BlocProvider( |
| 23 | - create: (context) => HomeBloc(moduleId)..requestData(), | 23 | + create: (context) => HomeBloc(moduleId)..add(RequestDataEvent()), |
| 24 | child: _HomePageView(), | 24 | child: _HomePageView(), |
| 25 | ); | 25 | ); |
| 26 | } | 26 | } |
| @@ -37,7 +37,8 @@ class _HomePageView extends StatelessWidget { | @@ -37,7 +37,8 @@ class _HomePageView extends StatelessWidget { | ||
| 37 | } else if (type == HeaderActionType.shop) { | 37 | } else if (type == HeaderActionType.shop) { |
| 38 | Navigator.of(AppRouter.context).pushNamed(AppRouteName.shop); | 38 | Navigator.of(AppRouter.context).pushNamed(AppRouteName.shop); |
| 39 | } else if (type == HeaderActionType.user) { | 39 | } else if (type == HeaderActionType.user) { |
| 40 | - Navigator.of(AppRouter.context).pushNamed(AppRouteName.user); | 40 | + Navigator.of(AppRouter.context).pushNamed(AppRouteName.topicPic); |
| 41 | + // Navigator.of(AppRouter.context).pushNamed(AppRouteName.user); | ||
| 41 | } else { | 42 | } else { |
| 42 | // Navigator.of(AppRouter.context).pushNamed(AppRouteName.topicPic); | 43 | // Navigator.of(AppRouter.context).pushNamed(AppRouteName.topicPic); |
| 43 | // Navigator.of(AppRouter.context).pushNamed(AppRouteName.topicWord); | 44 | // Navigator.of(AppRouter.context).pushNamed(AppRouteName.topicWord); |
| @@ -132,6 +133,7 @@ class _HomePageView extends StatelessWidget { | @@ -132,6 +133,7 @@ class _HomePageView extends StatelessWidget { | ||
| 132 | 'blue-positive'.assetPng, | 133 | 'blue-positive'.assetPng, |
| 133 | height: 47.h, | 134 | height: 47.h, |
| 134 | width: 80.w, | 135 | width: 80.w, |
| 136 | + // color: Colors.red, | ||
| 135 | ), | 137 | ), |
| 136 | ], | 138 | ], |
| 137 | ), | 139 | ), |
lib/pages/lessons/bloc/lesson_bloc.dart
| 1 | import 'package:flutter/cupertino.dart'; | 1 | import 'package:flutter/cupertino.dart'; |
| 2 | import 'package:flutter_bloc/flutter_bloc.dart'; | 2 | import 'package:flutter_bloc/flutter_bloc.dart'; |
| 3 | +import 'package:flutter_easyloading/flutter_easyloading.dart'; | ||
| 3 | import 'package:wow_english/common/request/dao/home_dao.dart'; | 4 | import 'package:wow_english/common/request/dao/home_dao.dart'; |
| 4 | import 'package:wow_english/common/request/exception.dart'; | 5 | import 'package:wow_english/common/request/exception.dart'; |
| 5 | import 'package:wow_english/models/course_module_entity.dart'; | 6 | import 'package:wow_english/models/course_module_entity.dart'; |
| @@ -25,26 +26,28 @@ class LessonBloc extends Bloc<LessonEvent, LessonState> { | @@ -25,26 +26,28 @@ class LessonBloc extends Bloc<LessonEvent, LessonState> { | ||
| 25 | LessonBloc(this.pageIndex,this.pageController) : super(LessonInitial()) { | 26 | LessonBloc(this.pageIndex,this.pageController) : super(LessonInitial()) { |
| 26 | _currentPageIndex = pageIndex; | 27 | _currentPageIndex = pageIndex; |
| 27 | on<PageViewChangeIndexEvent>(_pageIndexChange); | 28 | on<PageViewChangeIndexEvent>(_pageIndexChange); |
| 29 | + on<RequestDataEvent>(_requestData); | ||
| 28 | } | 30 | } |
| 29 | 31 | ||
| 30 | - Future<void> requestData() async { | 32 | + |
| 33 | + void _pageIndexChange(PageViewChangeIndexEvent event,Emitter<LessonState> emitter) async { | ||
| 34 | + _currentPageIndex = event.index; | ||
| 35 | + emitter(PageIndexChangeState()); | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + void _requestData(RequestDataEvent event, Emitter<LessonState> emitter) async { | ||
| 31 | try { | 39 | try { |
| 32 | await loading(() async { | 40 | await loading(() async { |
| 33 | _listData = await HomeDao.courseModule()??[]; | 41 | _listData = await HomeDao.courseModule()??[]; |
| 34 | - emit(LessonDataLoadState()); | 42 | + emitter(LessonDataLoadState()); |
| 35 | }); | 43 | }); |
| 36 | } catch (e) { | 44 | } catch (e) { |
| 37 | if (e is ApiException) { | 45 | if (e is ApiException) { |
| 38 | - | 46 | + EasyLoading.showToast(e.message??'请求失败,请检查网络连接'); |
| 39 | } | 47 | } |
| 40 | } | 48 | } |
| 41 | } | 49 | } |
| 42 | 50 | ||
| 43 | - void _pageIndexChange(PageViewChangeIndexEvent event,Emitter<LessonState> emitter) async { | ||
| 44 | - _currentPageIndex = event.index; | ||
| 45 | - emitter(PageIndexChangeState()); | ||
| 46 | - } | ||
| 47 | - | ||
| 48 | @override | 51 | @override |
| 49 | Future<void> close() { | 52 | Future<void> close() { |
| 50 | pageController.dispose(); | 53 | pageController.dispose(); |
lib/pages/lessons/bloc/lesson_event.dart
| @@ -7,3 +7,5 @@ class PageViewChangeIndexEvent extends LessonEvent { | @@ -7,3 +7,5 @@ class PageViewChangeIndexEvent extends LessonEvent { | ||
| 7 | final int index; | 7 | final int index; |
| 8 | PageViewChangeIndexEvent(this.index); | 8 | PageViewChangeIndexEvent(this.index); |
| 9 | } | 9 | } |
| 10 | + | ||
| 11 | +class RequestDataEvent extends LessonEvent {} |
lib/pages/lessons/lesson_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:flutter_easyloading/flutter_easyloading.dart'; | ||
| 4 | import 'package:flutter_screenutil/flutter_screenutil.dart'; | 3 | import 'package:flutter_screenutil/flutter_screenutil.dart'; |
| 5 | import 'package:wow_english/common/extension/string_extension.dart'; | 4 | import 'package:wow_english/common/extension/string_extension.dart'; |
| 6 | import 'package:wow_english/common/widgets/we_app_bar.dart'; | 5 | import 'package:wow_english/common/widgets/we_app_bar.dart'; |
| @@ -24,7 +23,7 @@ class LessonPage extends StatelessWidget { | @@ -24,7 +23,7 @@ class LessonPage extends StatelessWidget { | ||
| 24 | initialPage: starPageIndex??0, | 23 | initialPage: starPageIndex??0, |
| 25 | viewportFraction: 0.3 | 24 | viewportFraction: 0.3 |
| 26 | ), | 25 | ), |
| 27 | - )..requestData(), | 26 | + )..add(RequestDataEvent()), |
| 28 | child: _LessonPageView(), | 27 | child: _LessonPageView(), |
| 29 | ); | 28 | ); |
| 30 | } | 29 | } |
lib/pages/listen/bloc/listen_bloc.dart
| @@ -13,20 +13,19 @@ part 'listen_state.dart'; | @@ -13,20 +13,19 @@ part 'listen_state.dart'; | ||
| 13 | 13 | ||
| 14 | class ListenBloc extends Bloc<ListenEvent, ListenState> { | 14 | class ListenBloc extends Bloc<ListenEvent, ListenState> { |
| 15 | 15 | ||
| 16 | - List<ListenEntity?>? _listData; | ||
| 17 | - List<ListenEntity?>? get listData => _listData; | 16 | + List<ListenEntity?> _listData = []; |
| 17 | + List<ListenEntity?> get listData => _listData; | ||
| 18 | 18 | ||
| 19 | ListenBloc() : super(ListenInitial()) { | 19 | ListenBloc() : super(ListenInitial()) { |
| 20 | - on<ListenEvent>((event, emit) { | ||
| 21 | - // TODO: implement event handler | ||
| 22 | - }); | 20 | + on<RequestDataEvent>(_requestData); |
| 23 | } | 21 | } |
| 24 | 22 | ||
| 25 | - Future<void> requestData() async { | 23 | + |
| 24 | + void _requestData(RequestDataEvent event,Emitter<ListenState> emitter) async { | ||
| 26 | try { | 25 | try { |
| 27 | await loading(() async { | 26 | await loading(() async { |
| 28 | _listData = await ListenDao.listen()??[]; | 27 | _listData = await ListenDao.listen()??[]; |
| 29 | - emit(RequestListenDataState()); | 28 | + emitter(RequestListenDataState()); |
| 30 | }); | 29 | }); |
| 31 | } catch (e) { | 30 | } catch (e) { |
| 32 | if (e is ApiException) { | 31 | if (e is ApiException) { |
lib/pages/listen/bloc/listen_event.dart
lib/pages/listen/listen_page.dart
| @@ -13,7 +13,7 @@ class ListenPage extends StatelessWidget { | @@ -13,7 +13,7 @@ class ListenPage extends StatelessWidget { | ||
| 13 | @override | 13 | @override |
| 14 | Widget build(BuildContext context) { | 14 | Widget build(BuildContext context) { |
| 15 | return BlocProvider( | 15 | return BlocProvider( |
| 16 | - create: (context) => ListenBloc()..requestData(), | 16 | + create: (context) => ListenBloc()..add(RequestDataEvent()), |
| 17 | child: _ListenPageView(), | 17 | child: _ListenPageView(), |
| 18 | ); | 18 | ); |
| 19 | } | 19 | } |
| @@ -40,14 +40,15 @@ class _ListenPageView extends StatelessWidget { | @@ -40,14 +40,15 @@ class _ListenPageView extends StatelessWidget { | ||
| 40 | builder: (context, state) { | 40 | builder: (context, state) { |
| 41 | final bloc = BlocProvider.of<ListenBloc>(context); | 41 | final bloc = BlocProvider.of<ListenBloc>(context); |
| 42 | return ListView.builder( | 42 | return ListView.builder( |
| 43 | - itemCount: bloc.listData?.length, | 43 | + itemCount: bloc.listData.length, |
| 44 | scrollDirection: Axis.horizontal, | 44 | scrollDirection: Axis.horizontal, |
| 45 | padding: EdgeInsets.symmetric(horizontal: 30.w,vertical: 36.h), | 45 | padding: EdgeInsets.symmetric(horizontal: 30.w,vertical: 36.h), |
| 46 | itemBuilder: (BuildContext context,int index){ | 46 | itemBuilder: (BuildContext context,int index){ |
| 47 | + final entity = bloc.listData[index]; | ||
| 47 | return ListenItemWidget( | 48 | return ListenItemWidget( |
| 48 | - entity: bloc.listData?[index], | 49 | + entity: entity, |
| 49 | clickEvent: (){ | 50 | clickEvent: (){ |
| 50 | - Navigator.of(context).pushNamed(AppRouteName.lookVideo,arguments: {'videoUrl':'https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/7194236f31b2e1e3da0fe06cfed4ba2b.mp4'}); | 51 | + Navigator.of(context).pushNamed(AppRouteName.lookVideo,arguments: {'videoUrl':entity?.videoUrl,'title':'listen'}); |
| 51 | }); | 52 | }); |
| 52 | }); | 53 | }); |
| 53 | }); | 54 | }); |
lib/pages/listen/widgets/listen_item_widget.dart
| 1 | -import 'package:cached_network_image/cached_network_image.dart'; | ||
| 2 | import 'package:flutter/material.dart'; | 1 | import 'package:flutter/material.dart'; |
| 3 | import 'package:flutter_screenutil/flutter_screenutil.dart'; | 2 | import 'package:flutter_screenutil/flutter_screenutil.dart'; |
| 4 | import 'package:wow_english/common/extension/string_extension.dart'; | 3 | import 'package:wow_english/common/extension/string_extension.dart'; |
lib/pages/practice/chosetopic/topicpicture/bloc/topic_picture_bloc.dart renamed to lib/pages/practice/bloc/topic_picture_bloc.dart
lib/pages/practice/chosetopic/topicpicture/bloc/topic_picture_event.dart renamed to lib/pages/practice/bloc/topic_picture_event.dart
lib/pages/practice/chosetopic/topicpicture/bloc/topic_picture_state.dart renamed to lib/pages/practice/bloc/topic_picture_state.dart
lib/pages/practice/chosetopic/topicpicture/topic_picture_page.dart deleted
| 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 '../../widgets/practice_header_widget.dart'; | ||
| 7 | -import 'bloc/topic_picture_bloc.dart'; | ||
| 8 | - | ||
| 9 | -class TopicPicturePage extends StatelessWidget { | ||
| 10 | - const TopicPicturePage({super.key}); | ||
| 11 | - | ||
| 12 | - @override | ||
| 13 | - Widget build(BuildContext context) { | ||
| 14 | - return BlocProvider( | ||
| 15 | - create: (context) => TopicPictureBloc(PageController(),3), | ||
| 16 | - child: _TopicPicturePage(), | ||
| 17 | - ); | ||
| 18 | - } | ||
| 19 | -} | ||
| 20 | - | ||
| 21 | -class _TopicPicturePage extends StatelessWidget { | ||
| 22 | - @override | ||
| 23 | - Widget build(BuildContext context) { | ||
| 24 | - return BlocListener<TopicPictureBloc,TopicPictureState>( | ||
| 25 | - listener: (context, state){}, | ||
| 26 | - child: _topicPictureView(), | ||
| 27 | - ); | ||
| 28 | - } | ||
| 29 | - | ||
| 30 | - Widget _topicPictureView() => BlocBuilder<TopicPictureBloc,TopicPictureState>( | ||
| 31 | - buildWhen: (_,s) => s is CurrentPageIndexState, | ||
| 32 | - builder: (context,state){ | ||
| 33 | - final bloc = BlocProvider.of<TopicPictureBloc>(context); | ||
| 34 | - return Container( | ||
| 35 | - color: Colors.white, | ||
| 36 | - child: Stack( | ||
| 37 | - children: [ | ||
| 38 | - Column( | ||
| 39 | - children: [ | ||
| 40 | - PracticeHeaderWidget( | ||
| 41 | - title: '${bloc.currentPage}/8', | ||
| 42 | - onTap: (){Navigator.pop(context);}, | ||
| 43 | - ), | ||
| 44 | - Expanded( | ||
| 45 | - child: PageView.builder( | ||
| 46 | - itemCount: 8, | ||
| 47 | - scrollDirection: Axis.horizontal, | ||
| 48 | - controller: bloc.pageController, | ||
| 49 | - onPageChanged: (int index) { | ||
| 50 | - bloc.add(CurrentPageIndexChangeEvent(index)); | ||
| 51 | - }, | ||
| 52 | - itemBuilder: (BuildContext context,int index){ | ||
| 53 | - return _pageViewItemWidget(); | ||
| 54 | - }), | ||
| 55 | - ) | ||
| 56 | - ], | ||
| 57 | - ), | ||
| 58 | - Positioned( | ||
| 59 | - left: 0, | ||
| 60 | - right: 0, | ||
| 61 | - bottom: 0, | ||
| 62 | - child: Image.asset('bottom_grass'.assetPng) | ||
| 63 | - ) | ||
| 64 | - ], | ||
| 65 | - ), | ||
| 66 | - ); | ||
| 67 | - }); | ||
| 68 | - | ||
| 69 | - Widget _pageViewItemWidget() => BlocBuilder<TopicPictureBloc,TopicPictureState>( | ||
| 70 | - builder: (context, state){ | ||
| 71 | - final bloc = BlocProvider.of<TopicPictureBloc>(context); | ||
| 72 | - return SafeArea( | ||
| 73 | - child: Column( | ||
| 74 | - children: [ | ||
| 75 | - Text( | ||
| 76 | - 'What to do when the sentence question is very long and needs a line break', | ||
| 77 | - softWrap: true, | ||
| 78 | - style: TextStyle( | ||
| 79 | - fontSize: 21.sp, | ||
| 80 | - color: const Color(0xFF333333) | ||
| 81 | - ) | ||
| 82 | - ), | ||
| 83 | - 26.verticalSpace, | ||
| 84 | - Row( | ||
| 85 | - mainAxisAlignment: MainAxisAlignment.center, | ||
| 86 | - children: [ | ||
| 87 | - Offstage( | ||
| 88 | - offstage: (bloc.modelCount < 1), | ||
| 89 | - child: _decodeImageWidget(1), | ||
| 90 | - ), | ||
| 91 | - Offstage( | ||
| 92 | - offstage: (bloc.modelCount < 2), | ||
| 93 | - child: _decodeImageWidget(2), | ||
| 94 | - ), | ||
| 95 | - Offstage( | ||
| 96 | - offstage: (bloc.modelCount < 3), | ||
| 97 | - child: _decodeImageWidget(3), | ||
| 98 | - ), | ||
| 99 | - Offstage( | ||
| 100 | - offstage: (bloc.modelCount < 4), | ||
| 101 | - child: _decodeImageWidget(4), | ||
| 102 | - ) | ||
| 103 | - ], | ||
| 104 | - ) | ||
| 105 | - ], | ||
| 106 | - ), | ||
| 107 | - ); | ||
| 108 | - }); | ||
| 109 | - | ||
| 110 | - Widget _decodeImageWidget(int index) => BlocBuilder<TopicPictureBloc,TopicPictureState>( | ||
| 111 | - buildWhen: (_, s) => s is SelectItemChangeState, | ||
| 112 | - builder: (context,state){ | ||
| 113 | - final bloc = BlocProvider.of<TopicPictureBloc>(context); | ||
| 114 | - return GestureDetector( | ||
| 115 | - onTap: () => bloc.add(SelectItemEvent(index)), | ||
| 116 | - child: Container( | ||
| 117 | - padding: const EdgeInsets.all(4.5), | ||
| 118 | - decoration: BoxDecoration( | ||
| 119 | - color: bloc.selectItem == index?const Color(0xFF00B6F1):Colors.white, | ||
| 120 | - borderRadius: BorderRadius.circular(15), | ||
| 121 | - ), | ||
| 122 | - height: 143.h, | ||
| 123 | - width: 143.w, | ||
| 124 | - child: Container( | ||
| 125 | - decoration: BoxDecoration( | ||
| 126 | - color: Colors.white, | ||
| 127 | - borderRadius: BorderRadius.circular(15), | ||
| 128 | - border: Border.all( | ||
| 129 | - width: 1.0, | ||
| 130 | - color: const Color(0xFF140C10) | ||
| 131 | - ), | ||
| 132 | - image: const DecorationImage( | ||
| 133 | - fit: BoxFit.fitWidth, | ||
| 134 | - image: NetworkImage('https://img1.baidu.com/it/u=3392591833,1640391553&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=714') | ||
| 135 | - ) | ||
| 136 | - ), | ||
| 137 | - ), | ||
| 138 | - ), | ||
| 139 | - ); | ||
| 140 | - }); | ||
| 141 | -} | ||
| 142 | \ No newline at end of file | 0 | \ No newline at end of file |
lib/pages/practice/chosetopic/topicword/bloc/topic_word_bloc.dart deleted
| 1 | - | ||
| 2 | -import 'package:flutter/cupertino.dart'; | ||
| 3 | -import 'package:flutter_bloc/flutter_bloc.dart'; | ||
| 4 | - | ||
| 5 | -part 'topic_word_event.dart'; | ||
| 6 | -part 'topic_word_state.dart'; | ||
| 7 | - | ||
| 8 | -class TopicWordBloc extends Bloc<TopicWordEvent, TopicWordState> { | ||
| 9 | - final PageController pageController; | ||
| 10 | - | ||
| 11 | - final int modelCount; | ||
| 12 | - | ||
| 13 | - int _currentPage = 0; | ||
| 14 | - | ||
| 15 | - int _selectItem = 0; | ||
| 16 | - | ||
| 17 | - int get currentPage => _currentPage + 1; | ||
| 18 | - | ||
| 19 | - int get selectItem => _selectItem; | ||
| 20 | - | ||
| 21 | - TopicWordBloc(this.pageController, this.modelCount) : super(TopicWordInitial()) { | ||
| 22 | - on<CurrentPageIndexChangeEvent>(_pageControllerChange); | ||
| 23 | - on<SelectItemEvent>(_selectItemLoad); | ||
| 24 | - } | ||
| 25 | - | ||
| 26 | - @override | ||
| 27 | - Future<void> close() { | ||
| 28 | - pageController.dispose(); | ||
| 29 | - return super.close(); | ||
| 30 | - } | ||
| 31 | - | ||
| 32 | - void _pageControllerChange(CurrentPageIndexChangeEvent event,Emitter<TopicWordState> emitter) async { | ||
| 33 | - _currentPage = event.pageIndex; | ||
| 34 | - emitter(CurrentPageIndexState()); | ||
| 35 | - } | ||
| 36 | - | ||
| 37 | - void _selectItemLoad(SelectItemEvent event,Emitter<TopicWordState> emitter) async { | ||
| 38 | - _selectItem = event.selectIndex; | ||
| 39 | - emitter(SelectItemChangeState()); | ||
| 40 | - } | ||
| 41 | -} |
lib/pages/practice/chosetopic/topicword/bloc/topic_word_event.dart deleted
| 1 | -part of 'topic_word_bloc.dart'; | ||
| 2 | - | ||
| 3 | -@immutable | ||
| 4 | -abstract class TopicWordEvent {} | ||
| 5 | - | ||
| 6 | -class CurrentPageIndexChangeEvent extends TopicWordEvent { | ||
| 7 | - final int pageIndex; | ||
| 8 | - CurrentPageIndexChangeEvent(this.pageIndex); | ||
| 9 | -} | ||
| 10 | - | ||
| 11 | -class SelectItemEvent extends TopicWordEvent { | ||
| 12 | - final int selectIndex; | ||
| 13 | - SelectItemEvent(this.selectIndex); | ||
| 14 | -} | ||
| 15 | \ No newline at end of file | 0 | \ No newline at end of file |
lib/pages/practice/chosetopic/topicword/bloc/topic_word_state.dart deleted
| 1 | -part of 'topic_word_bloc.dart'; | ||
| 2 | - | ||
| 3 | -@immutable | ||
| 4 | -abstract class TopicWordState {} | ||
| 5 | - | ||
| 6 | -class TopicWordInitial extends TopicWordState {} | ||
| 7 | - | ||
| 8 | -class CurrentPageIndexState extends TopicWordState {} | ||
| 9 | - | ||
| 10 | -class SelectItemChangeState extends TopicWordState {} | ||
| 11 | \ No newline at end of file | 0 | \ No newline at end of file |
lib/pages/practice/chosetopic/topicword/topic_word_page.dart deleted
| 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 | -import 'package:wow_english/pages/practice/widgets/practice_header_widget.dart'; | ||
| 6 | - | ||
| 7 | -import 'bloc/topic_word_bloc.dart'; | ||
| 8 | - | ||
| 9 | -class TopicWordPage extends StatelessWidget { | ||
| 10 | - const TopicWordPage({super.key}); | ||
| 11 | - | ||
| 12 | - @override | ||
| 13 | - Widget build(BuildContext context) { | ||
| 14 | - return BlocProvider( | ||
| 15 | - create: (context) => TopicWordBloc(PageController(), 4), | ||
| 16 | - child: _TopicWordPage(), | ||
| 17 | - ); | ||
| 18 | - } | ||
| 19 | -} | ||
| 20 | - | ||
| 21 | -class _TopicWordPage extends StatelessWidget { | ||
| 22 | - @override | ||
| 23 | - Widget build(BuildContext context) { | ||
| 24 | - return BlocListener<TopicWordBloc,TopicWordState>( | ||
| 25 | - listener: (context, state) { | ||
| 26 | - | ||
| 27 | - }, | ||
| 28 | - child: _topicWordView(), | ||
| 29 | - ); | ||
| 30 | - } | ||
| 31 | - | ||
| 32 | - Widget _topicWordView() => BlocBuilder<TopicWordBloc,TopicWordState>( | ||
| 33 | - builder: (context,state){ | ||
| 34 | - final bloc = BlocProvider.of<TopicWordBloc>(context); | ||
| 35 | - return Container( | ||
| 36 | - color: Colors.white, | ||
| 37 | - child: Stack( | ||
| 38 | - children: [ | ||
| 39 | - Positioned( | ||
| 40 | - left: 0, | ||
| 41 | - right: 0, | ||
| 42 | - bottom: 0, | ||
| 43 | - child: Image.asset('background_grass'.assetPng,fit: BoxFit.fitWidth,) | ||
| 44 | - ), | ||
| 45 | - Column( | ||
| 46 | - children: [ | ||
| 47 | - PracticeHeaderWidget( | ||
| 48 | - title: '${bloc.currentPage}/8', | ||
| 49 | - onTap: (){Navigator.pop(context);}, | ||
| 50 | - ), | ||
| 51 | - Expanded( | ||
| 52 | - child: PageView.builder( | ||
| 53 | - itemCount: 8, | ||
| 54 | - scrollDirection: Axis.horizontal, | ||
| 55 | - controller: bloc.pageController, | ||
| 56 | - onPageChanged: (int index) { | ||
| 57 | - bloc.add(CurrentPageIndexChangeEvent(index)); | ||
| 58 | - }, | ||
| 59 | - itemBuilder: (BuildContext context,int index){ | ||
| 60 | - return _pageViewItemWidget(); | ||
| 61 | - }), | ||
| 62 | - ) | ||
| 63 | - ], | ||
| 64 | - ), | ||
| 65 | - ], | ||
| 66 | - ), | ||
| 67 | - ); | ||
| 68 | - }); | ||
| 69 | - | ||
| 70 | - Widget _pageViewItemWidget() => BlocBuilder<TopicWordBloc,TopicWordState>( | ||
| 71 | - builder: (context, state){ | ||
| 72 | - final bloc = BlocProvider.of<TopicWordBloc>(context); | ||
| 73 | - return SafeArea( | ||
| 74 | - child: Column( | ||
| 75 | - children: [ | ||
| 76 | - Text( | ||
| 77 | - 'What to do when the sentence question is very long and needs a line break', | ||
| 78 | - softWrap: true, | ||
| 79 | - style: TextStyle( | ||
| 80 | - fontSize: 21.sp, | ||
| 81 | - color: const Color(0xFF333333) | ||
| 82 | - ) | ||
| 83 | - ), | ||
| 84 | - 26.verticalSpace, | ||
| 85 | - Row( | ||
| 86 | - mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
| 87 | - children: [ | ||
| 88 | - Offstage( | ||
| 89 | - offstage: (bloc.modelCount < 1), | ||
| 90 | - child: _decodeImageWidget(1), | ||
| 91 | - ), | ||
| 92 | - Offstage( | ||
| 93 | - offstage: (bloc.modelCount < 2), | ||
| 94 | - child: _decodeImageWidget(2), | ||
| 95 | - ), | ||
| 96 | - Offstage( | ||
| 97 | - offstage: (bloc.modelCount < 3), | ||
| 98 | - child: _decodeImageWidget(3), | ||
| 99 | - ), | ||
| 100 | - Offstage( | ||
| 101 | - offstage: (bloc.modelCount < 4), | ||
| 102 | - child: _decodeImageWidget(4), | ||
| 103 | - ) | ||
| 104 | - ], | ||
| 105 | - ) | ||
| 106 | - ], | ||
| 107 | - ), | ||
| 108 | - ); | ||
| 109 | - }); | ||
| 110 | - | ||
| 111 | - Widget _decodeImageWidget(int index) => BlocBuilder<TopicWordBloc,TopicWordState>( | ||
| 112 | - buildWhen: (_, s) => s is SelectItemChangeState, | ||
| 113 | - builder: (context,state){ | ||
| 114 | - final bloc = BlocProvider.of<TopicWordBloc>(context); | ||
| 115 | - return GestureDetector( | ||
| 116 | - onTap: () => bloc.add(SelectItemEvent(index)), | ||
| 117 | - child: Container( | ||
| 118 | - width: 143.w, | ||
| 119 | - height: 143.h, | ||
| 120 | - padding: EdgeInsets.only(left: 13.w,right: 13.w,top: 13.h,bottom: 13.h), | ||
| 121 | - decoration: BoxDecoration( | ||
| 122 | - color: Colors.white, | ||
| 123 | - borderRadius: BorderRadius.circular(15), | ||
| 124 | - border: Border.all( | ||
| 125 | - width: 1.0, | ||
| 126 | - color: const Color(0xFF140C10) | ||
| 127 | - ), | ||
| 128 | - ), | ||
| 129 | - child: Column( | ||
| 130 | - mainAxisAlignment: MainAxisAlignment.end, | ||
| 131 | - children: [ | ||
| 132 | - Expanded( | ||
| 133 | - child: Container( | ||
| 134 | - alignment: Alignment.center, | ||
| 135 | - child: Text( | ||
| 136 | - 'yellow', | ||
| 137 | - style: TextStyle( | ||
| 138 | - fontSize: 20.sp, | ||
| 139 | - color: const Color(0xFF333333) | ||
| 140 | - ) | ||
| 141 | - ), | ||
| 142 | - ), | ||
| 143 | - ), | ||
| 144 | - Container( | ||
| 145 | - height: 30.h, | ||
| 146 | - width: double.infinity, | ||
| 147 | - decoration: BoxDecoration( | ||
| 148 | - color: bloc.selectItem == index?const Color(0xFF00B6F1):Colors.white, | ||
| 149 | - borderRadius: BorderRadius.circular(15.r), | ||
| 150 | - border: Border.all( | ||
| 151 | - width: 1.5, | ||
| 152 | - color: const Color(0xFF140C10) | ||
| 153 | - ), | ||
| 154 | - ), | ||
| 155 | - alignment: Alignment.center, | ||
| 156 | - child: Image.asset('choose'.assetPng), | ||
| 157 | - ) | ||
| 158 | - ], | ||
| 159 | - ), | ||
| 160 | - ), | ||
| 161 | - ); | ||
| 162 | - }); | ||
| 163 | -} | ||
| 164 | \ No newline at end of file | 0 | \ No newline at end of file |
lib/pages/practice/topic_picture_page.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 | +import 'package:wow_english/common/widgets/ow_image_widget.dart'; | ||
| 6 | + | ||
| 7 | +import 'bloc/topic_picture_bloc.dart'; | ||
| 8 | +import 'widgets/practice_header_widget.dart'; | ||
| 9 | + | ||
| 10 | +class TopicPicturePage extends StatelessWidget { | ||
| 11 | + const TopicPicturePage({super.key}); | ||
| 12 | + | ||
| 13 | + @override | ||
| 14 | + Widget build(BuildContext context) { | ||
| 15 | + return BlocProvider( | ||
| 16 | + create: (context) => TopicPictureBloc(PageController(),3), | ||
| 17 | + child: _TopicPicturePage(), | ||
| 18 | + ); | ||
| 19 | + } | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +class _TopicPicturePage extends StatelessWidget { | ||
| 23 | + @override | ||
| 24 | + Widget build(BuildContext context) { | ||
| 25 | + return BlocListener<TopicPictureBloc,TopicPictureState>( | ||
| 26 | + listener: (context, state){}, | ||
| 27 | + child: _topicPictureView(), | ||
| 28 | + ); | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + Widget _topicPictureView() => BlocBuilder<TopicPictureBloc,TopicPictureState>( | ||
| 32 | + buildWhen: (_,s) => s is CurrentPageIndexState, | ||
| 33 | + builder: (context,state){ | ||
| 34 | + final bloc = BlocProvider.of<TopicPictureBloc>(context); | ||
| 35 | + return Container( | ||
| 36 | + color: Colors.white, | ||
| 37 | + child: Stack( | ||
| 38 | + children: [ | ||
| 39 | + Column( | ||
| 40 | + children: [ | ||
| 41 | + PracticeHeaderWidget( | ||
| 42 | + title: '${bloc.currentPage}/8', | ||
| 43 | + onTap: (){Navigator.pop(context);}, | ||
| 44 | + ), | ||
| 45 | + Expanded( | ||
| 46 | + child: PageView.builder( | ||
| 47 | + itemCount: 8, | ||
| 48 | + scrollDirection: Axis.horizontal, | ||
| 49 | + controller: bloc.pageController, | ||
| 50 | + onPageChanged: (int index) { | ||
| 51 | + bloc.add(CurrentPageIndexChangeEvent(index)); | ||
| 52 | + }, | ||
| 53 | + itemBuilder: (BuildContext context,int index){ | ||
| 54 | + if (index % 5 == 0) { | ||
| 55 | + return _pageViewWordItemWidget(); | ||
| 56 | + } else if (index % 5 == 1) { | ||
| 57 | + return _pageViewItemWidget(); | ||
| 58 | + } else if (index % 5 == 2){ | ||
| 59 | + return _pageViewVoicePictureItemWidget(); | ||
| 60 | + } else if (index % 5 == 3){ | ||
| 61 | + return _voiceAnswerItem(); | ||
| 62 | + } else { | ||
| 63 | + return _pageViewVoiceWordItemWidget(); | ||
| 64 | + } | ||
| 65 | + }), | ||
| 66 | + ) | ||
| 67 | + ], | ||
| 68 | + ), | ||
| 69 | + Positioned( | ||
| 70 | + left: 0, | ||
| 71 | + right: 0, | ||
| 72 | + bottom: 0, | ||
| 73 | + child: Image.asset('bottom_grass'.assetPng) | ||
| 74 | + ) | ||
| 75 | + ], | ||
| 76 | + ), | ||
| 77 | + ); | ||
| 78 | + }); | ||
| 79 | + | ||
| 80 | + ///看题选图 | ||
| 81 | + Widget _pageViewItemWidget() => BlocBuilder<TopicPictureBloc,TopicPictureState>( | ||
| 82 | + builder: (context, state){ | ||
| 83 | + final bloc = BlocProvider.of<TopicPictureBloc>(context); | ||
| 84 | + return SafeArea( | ||
| 85 | + child: Column( | ||
| 86 | + children: [ | ||
| 87 | + Text( | ||
| 88 | + 'What to do when the sentence question is very long and needs a line break', | ||
| 89 | + softWrap: true, | ||
| 90 | + style: TextStyle( | ||
| 91 | + fontSize: 21.sp, | ||
| 92 | + color: const Color(0xFF333333) | ||
| 93 | + ) | ||
| 94 | + ), | ||
| 95 | + 26.verticalSpace, | ||
| 96 | + Row( | ||
| 97 | + mainAxisAlignment: MainAxisAlignment.center, | ||
| 98 | + children: [ | ||
| 99 | + Offstage( | ||
| 100 | + offstage: (bloc.modelCount < 1), | ||
| 101 | + child: _decodeImageWidget(1), | ||
| 102 | + ), | ||
| 103 | + Offstage( | ||
| 104 | + offstage: (bloc.modelCount < 2), | ||
| 105 | + child: _decodeImageWidget(2), | ||
| 106 | + ), | ||
| 107 | + Offstage( | ||
| 108 | + offstage: (bloc.modelCount < 3), | ||
| 109 | + child: _decodeImageWidget(3), | ||
| 110 | + ), | ||
| 111 | + Offstage( | ||
| 112 | + offstage: (bloc.modelCount < 4), | ||
| 113 | + child: _decodeImageWidget(4), | ||
| 114 | + ) | ||
| 115 | + ], | ||
| 116 | + ) | ||
| 117 | + ], | ||
| 118 | + ), | ||
| 119 | + ); | ||
| 120 | + }); | ||
| 121 | + | ||
| 122 | + Widget _decodeImageWidget(int index) => BlocBuilder<TopicPictureBloc,TopicPictureState>( | ||
| 123 | + buildWhen: (_, s) => s is SelectItemChangeState, | ||
| 124 | + builder: (context,state){ | ||
| 125 | + final bloc = BlocProvider.of<TopicPictureBloc>(context); | ||
| 126 | + return GestureDetector( | ||
| 127 | + onTap: () => bloc.add(SelectItemEvent(index)), | ||
| 128 | + child: Container( | ||
| 129 | + padding: const EdgeInsets.all(4.5), | ||
| 130 | + decoration: BoxDecoration( | ||
| 131 | + color: bloc.selectItem == index?const Color(0xFF00B6F1):Colors.white, | ||
| 132 | + borderRadius: BorderRadius.circular(15), | ||
| 133 | + ), | ||
| 134 | + height: 143.h, | ||
| 135 | + width: 143.w, | ||
| 136 | + child: Container( | ||
| 137 | + decoration: BoxDecoration( | ||
| 138 | + color: Colors.white, | ||
| 139 | + borderRadius: BorderRadius.circular(15), | ||
| 140 | + border: Border.all( | ||
| 141 | + width: 1.0, | ||
| 142 | + color: const Color(0xFF140C10) | ||
| 143 | + ), | ||
| 144 | + image: const DecorationImage( | ||
| 145 | + fit: BoxFit.fitWidth, | ||
| 146 | + image: NetworkImage('https://img1.baidu.com/it/u=3392591833,1640391553&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=714') | ||
| 147 | + ) | ||
| 148 | + ), | ||
| 149 | + ), | ||
| 150 | + ), | ||
| 151 | + ); | ||
| 152 | + }); | ||
| 153 | + | ||
| 154 | + ///看题选字 | ||
| 155 | + Widget _pageViewWordItemWidget() => BlocBuilder<TopicPictureBloc,TopicPictureState>( | ||
| 156 | + builder: (context, state){ | ||
| 157 | + final bloc = BlocProvider.of<TopicPictureBloc>(context); | ||
| 158 | + return SafeArea( | ||
| 159 | + child: Column( | ||
| 160 | + children: [ | ||
| 161 | + Text( | ||
| 162 | + 'What to do when the sentence question is very long and needs a line break', | ||
| 163 | + softWrap: true, | ||
| 164 | + style: TextStyle( | ||
| 165 | + fontSize: 21.sp, | ||
| 166 | + color: const Color(0xFF333333) | ||
| 167 | + ) | ||
| 168 | + ), | ||
| 169 | + 26.verticalSpace, | ||
| 170 | + Row( | ||
| 171 | + mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
| 172 | + children: [ | ||
| 173 | + Offstage( | ||
| 174 | + offstage: (bloc.modelCount < 1), | ||
| 175 | + child: _decodeWordWidget(1), | ||
| 176 | + ), | ||
| 177 | + Offstage( | ||
| 178 | + offstage: (bloc.modelCount < 2), | ||
| 179 | + child: _decodeWordWidget(2), | ||
| 180 | + ), | ||
| 181 | + Offstage( | ||
| 182 | + offstage: (bloc.modelCount < 3), | ||
| 183 | + child: _decodeWordWidget(3), | ||
| 184 | + ), | ||
| 185 | + Offstage( | ||
| 186 | + offstage: (bloc.modelCount < 4), | ||
| 187 | + child: _decodeWordWidget(4), | ||
| 188 | + ) | ||
| 189 | + ], | ||
| 190 | + ) | ||
| 191 | + ], | ||
| 192 | + ), | ||
| 193 | + ); | ||
| 194 | + }); | ||
| 195 | + | ||
| 196 | + Widget _decodeWordWidget(int index) => BlocBuilder<TopicPictureBloc,TopicPictureState>( | ||
| 197 | + buildWhen: (_, s) => s is SelectItemChangeState, | ||
| 198 | + builder: (context,state){ | ||
| 199 | + final bloc = BlocProvider.of<TopicPictureBloc>(context); | ||
| 200 | + return GestureDetector( | ||
| 201 | + onTap: () => bloc.add(SelectItemEvent(index)), | ||
| 202 | + child: Container( | ||
| 203 | + width: 143.w, | ||
| 204 | + height: 143.h, | ||
| 205 | + padding: EdgeInsets.only(left: 13.w,right: 13.w,top: 13.h,bottom: 13.h), | ||
| 206 | + decoration: BoxDecoration( | ||
| 207 | + color: Colors.white, | ||
| 208 | + borderRadius: BorderRadius.circular(15), | ||
| 209 | + border: Border.all( | ||
| 210 | + width: 1.0, | ||
| 211 | + color: const Color(0xFF140C10) | ||
| 212 | + ), | ||
| 213 | + ), | ||
| 214 | + child: Column( | ||
| 215 | + mainAxisAlignment: MainAxisAlignment.end, | ||
| 216 | + children: [ | ||
| 217 | + Expanded( | ||
| 218 | + child: Container( | ||
| 219 | + alignment: Alignment.center, | ||
| 220 | + child: Text( | ||
| 221 | + 'yellow', | ||
| 222 | + style: TextStyle( | ||
| 223 | + fontSize: 20.sp, | ||
| 224 | + color: const Color(0xFF333333) | ||
| 225 | + ) | ||
| 226 | + ), | ||
| 227 | + ), | ||
| 228 | + ), | ||
| 229 | + Container( | ||
| 230 | + height: 30.h, | ||
| 231 | + width: double.infinity, | ||
| 232 | + decoration: BoxDecoration( | ||
| 233 | + color: bloc.selectItem == index?const Color(0xFF00B6F1):Colors.white, | ||
| 234 | + borderRadius: BorderRadius.circular(15.r), | ||
| 235 | + border: Border.all( | ||
| 236 | + width: 1.5, | ||
| 237 | + color: const Color(0xFF140C10) | ||
| 238 | + ), | ||
| 239 | + ), | ||
| 240 | + alignment: Alignment.center, | ||
| 241 | + child: Image.asset('choose'.assetPng), | ||
| 242 | + ) | ||
| 243 | + ], | ||
| 244 | + ), | ||
| 245 | + ), | ||
| 246 | + ); | ||
| 247 | + }); | ||
| 248 | + | ||
| 249 | + ///听音选图 | ||
| 250 | + Widget _pageViewVoicePictureItemWidget() => BlocBuilder<TopicPictureBloc,TopicPictureState>( | ||
| 251 | + builder: (context, state){ | ||
| 252 | + final bloc = BlocProvider.of<TopicPictureBloc>(context); | ||
| 253 | + return SafeArea( | ||
| 254 | + child: Column( | ||
| 255 | + children: [ | ||
| 256 | + Row( | ||
| 257 | + mainAxisAlignment: MainAxisAlignment.center, | ||
| 258 | + children: [ | ||
| 259 | + Image.asset('voice'.assetPng,height: 33.h,width: 30.w,), | ||
| 260 | + 10.horizontalSpace, | ||
| 261 | + Text( | ||
| 262 | + 'yellow', | ||
| 263 | + style: TextStyle( | ||
| 264 | + fontSize: 20.sp, | ||
| 265 | + color: const Color(0xFF333333) | ||
| 266 | + ) | ||
| 267 | + ) | ||
| 268 | + ], | ||
| 269 | + ), | ||
| 270 | + 26.verticalSpace, | ||
| 271 | + Row( | ||
| 272 | + mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
| 273 | + children: [ | ||
| 274 | + Offstage( | ||
| 275 | + offstage: (bloc.modelCount < 1), | ||
| 276 | + child: _decodeVoiceImageWidget(1), | ||
| 277 | + ), | ||
| 278 | + Offstage( | ||
| 279 | + offstage: (bloc.modelCount < 2), | ||
| 280 | + child: _decodeVoiceImageWidget(2), | ||
| 281 | + ), | ||
| 282 | + Offstage( | ||
| 283 | + offstage: (bloc.modelCount < 3), | ||
| 284 | + child: _decodeVoiceImageWidget(3), | ||
| 285 | + ), | ||
| 286 | + Offstage( | ||
| 287 | + offstage: (bloc.modelCount < 4), | ||
| 288 | + child: _decodeVoiceImageWidget(4), | ||
| 289 | + ) | ||
| 290 | + ], | ||
| 291 | + ) | ||
| 292 | + ], | ||
| 293 | + ), | ||
| 294 | + ); | ||
| 295 | + }); | ||
| 296 | + | ||
| 297 | + Widget _decodeVoiceImageWidget(int index) => BlocBuilder<TopicPictureBloc,TopicPictureState>( | ||
| 298 | + buildWhen: (_, s) => s is SelectItemChangeState, | ||
| 299 | + builder: (context,state){ | ||
| 300 | + final bloc = BlocProvider.of<TopicPictureBloc>(context); | ||
| 301 | + return GestureDetector( | ||
| 302 | + onTap: () => bloc.add(SelectItemEvent(index)), | ||
| 303 | + child: Container( | ||
| 304 | + padding: const EdgeInsets.all(4.5), | ||
| 305 | + decoration: BoxDecoration( | ||
| 306 | + color: bloc.selectItem == index?const Color(0xFF00B6F1):Colors.white, | ||
| 307 | + borderRadius: BorderRadius.circular(15), | ||
| 308 | + ), | ||
| 309 | + height: 143.h, | ||
| 310 | + width: 143.w, | ||
| 311 | + child: Container( | ||
| 312 | + decoration: BoxDecoration( | ||
| 313 | + color: Colors.white, | ||
| 314 | + borderRadius: BorderRadius.circular(15), | ||
| 315 | + border: Border.all( | ||
| 316 | + width: 1.0, | ||
| 317 | + color: const Color(0xFF140C10) | ||
| 318 | + ), | ||
| 319 | + image: const DecorationImage( | ||
| 320 | + fit: BoxFit.fitWidth, | ||
| 321 | + image: NetworkImage('https://img1.baidu.com/it/u=3392591833,1640391553&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=714') | ||
| 322 | + ) | ||
| 323 | + ), | ||
| 324 | + ), | ||
| 325 | + ), | ||
| 326 | + ); | ||
| 327 | + }); | ||
| 328 | + | ||
| 329 | + ///听音选字 | ||
| 330 | + Widget _pageViewVoiceWordItemWidget() => BlocBuilder<TopicPictureBloc,TopicPictureState>( | ||
| 331 | + builder: (context, state){ | ||
| 332 | + final bloc = BlocProvider.of<TopicPictureBloc>(context); | ||
| 333 | + return SafeArea( | ||
| 334 | + child: Column( | ||
| 335 | + children: [ | ||
| 336 | + Image.asset('voice'.assetPng,height: 33.h,width: 30.w,), | ||
| 337 | + 26.verticalSpace, | ||
| 338 | + Row( | ||
| 339 | + mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
| 340 | + children: [ | ||
| 341 | + Offstage( | ||
| 342 | + offstage: (bloc.modelCount < 1), | ||
| 343 | + child: _decodeVoiceWordImageWidget(1), | ||
| 344 | + ), | ||
| 345 | + Offstage( | ||
| 346 | + offstage: (bloc.modelCount < 2), | ||
| 347 | + child: _decodeVoiceWordImageWidget(2), | ||
| 348 | + ), | ||
| 349 | + Offstage( | ||
| 350 | + offstage: (bloc.modelCount < 3), | ||
| 351 | + child: _decodeVoiceWordImageWidget(3), | ||
| 352 | + ), | ||
| 353 | + Offstage( | ||
| 354 | + offstage: (bloc.modelCount < 4), | ||
| 355 | + child: _decodeVoiceWordImageWidget(4), | ||
| 356 | + ) | ||
| 357 | + ], | ||
| 358 | + ) | ||
| 359 | + ], | ||
| 360 | + ), | ||
| 361 | + ); | ||
| 362 | + }); | ||
| 363 | + | ||
| 364 | + Widget _decodeVoiceWordImageWidget(int index) => BlocBuilder<TopicPictureBloc,TopicPictureState>( | ||
| 365 | + buildWhen: (_, s) => s is SelectItemChangeState, | ||
| 366 | + builder: (context,state){ | ||
| 367 | + final bloc = BlocProvider.of<TopicPictureBloc>(context); | ||
| 368 | + return GestureDetector( | ||
| 369 | + onTap: () => bloc.add(SelectItemEvent(index)), | ||
| 370 | + child: Container( | ||
| 371 | + width: 143.w, | ||
| 372 | + height: 143.h, | ||
| 373 | + padding: EdgeInsets.only(left: 13.w,right: 13.w,top: 13.h,bottom: 13.h), | ||
| 374 | + decoration: BoxDecoration( | ||
| 375 | + color: Colors.white, | ||
| 376 | + borderRadius: BorderRadius.circular(15), | ||
| 377 | + border: Border.all( | ||
| 378 | + width: 1.0, | ||
| 379 | + color: const Color(0xFF140C10) | ||
| 380 | + ), | ||
| 381 | + ), | ||
| 382 | + child: Column( | ||
| 383 | + mainAxisAlignment: MainAxisAlignment.end, | ||
| 384 | + children: [ | ||
| 385 | + Expanded( | ||
| 386 | + child: Container( | ||
| 387 | + alignment: Alignment.center, | ||
| 388 | + child: Text( | ||
| 389 | + 'yellow', | ||
| 390 | + style: TextStyle( | ||
| 391 | + fontSize: 20.sp, | ||
| 392 | + color: const Color(0xFF333333) | ||
| 393 | + ) | ||
| 394 | + ), | ||
| 395 | + ), | ||
| 396 | + ), | ||
| 397 | + Container( | ||
| 398 | + height: 30.h, | ||
| 399 | + width: double.infinity, | ||
| 400 | + decoration: BoxDecoration( | ||
| 401 | + color: bloc.selectItem == index?const Color(0xFF00B6F1):Colors.white, | ||
| 402 | + borderRadius: BorderRadius.circular(15.r), | ||
| 403 | + border: Border.all( | ||
| 404 | + width: 1.5, | ||
| 405 | + color: const Color(0xFF140C10) | ||
| 406 | + ), | ||
| 407 | + ), | ||
| 408 | + alignment: Alignment.center, | ||
| 409 | + child: Image.asset('choose'.assetPng), | ||
| 410 | + ) | ||
| 411 | + ], | ||
| 412 | + ), | ||
| 413 | + ), | ||
| 414 | + ); | ||
| 415 | + }); | ||
| 416 | + | ||
| 417 | + ///语音问答 | ||
| 418 | + Widget _voiceAnswerItem() => BlocBuilder<TopicPictureBloc,TopicPictureState>( | ||
| 419 | + builder: (context, state) { | ||
| 420 | + return Row( | ||
| 421 | + mainAxisAlignment: MainAxisAlignment.center, | ||
| 422 | + children: [ | ||
| 423 | + OwImageWidget( | ||
| 424 | + name:'https://up.enterdesk.com/edpic_source/16/e7/0d/16e70d550daff77cbac31fae5e1651d4.jpg', | ||
| 425 | + height: 186.h, | ||
| 426 | + width: 186.w, | ||
| 427 | + ), | ||
| 428 | + 160.horizontalSpace, | ||
| 429 | + Column( | ||
| 430 | + mainAxisAlignment: MainAxisAlignment.center, | ||
| 431 | + children: [ | ||
| 432 | + Image.asset( | ||
| 433 | + 'voice'.assetPng, | ||
| 434 | + height: 52.h, | ||
| 435 | + width: 46.w, | ||
| 436 | + ), | ||
| 437 | + 70.verticalSpace, | ||
| 438 | + Image.asset( | ||
| 439 | + 'micro_phone'.assetPng, | ||
| 440 | + height: 75.w, | ||
| 441 | + width: 75.w, | ||
| 442 | + ) | ||
| 443 | + ], | ||
| 444 | + ) | ||
| 445 | + ], | ||
| 446 | + ); | ||
| 447 | + }); | ||
| 448 | +} | ||
| 0 | \ No newline at end of file | 449 | \ No newline at end of file |
lib/pages/practice/voicetopic/voicepicture/bloc/voice_pic_bloc.dart deleted
| 1 | -import 'package:flutter/cupertino.dart'; | ||
| 2 | -import 'package:flutter_bloc/flutter_bloc.dart'; | ||
| 3 | - | ||
| 4 | -part 'voice_pic_event.dart'; | ||
| 5 | -part 'voice_pic_state.dart'; | ||
| 6 | - | ||
| 7 | -class VoicePicBloc extends Bloc<VoicePicEvent, VoicePicState> { | ||
| 8 | - final PageController pageController; | ||
| 9 | - | ||
| 10 | - final int modelCount; | ||
| 11 | - | ||
| 12 | - int _currentPage = 0; | ||
| 13 | - | ||
| 14 | - int _selectItem = 0; | ||
| 15 | - | ||
| 16 | - int get currentPage => _currentPage + 1; | ||
| 17 | - | ||
| 18 | - int get selectItem => _selectItem; | ||
| 19 | - VoicePicBloc(this.pageController, this.modelCount) : super(VoicePicInitial()) { | ||
| 20 | - on<CurrentPageIndexChangeEvent>(_pageControllerChange); | ||
| 21 | - on<SelectItemEvent>(_selectItemLoad); | ||
| 22 | - } | ||
| 23 | - | ||
| 24 | - @override | ||
| 25 | - Future<void> close() { | ||
| 26 | - pageController.dispose(); | ||
| 27 | - return super.close(); | ||
| 28 | - } | ||
| 29 | - | ||
| 30 | - void _pageControllerChange(CurrentPageIndexChangeEvent event,Emitter<VoicePicState> emitter) async { | ||
| 31 | - _currentPage = event.pageIndex; | ||
| 32 | - emitter(CurrentPageIndexState()); | ||
| 33 | - } | ||
| 34 | - | ||
| 35 | - void _selectItemLoad(SelectItemEvent event,Emitter<VoicePicState> emitter) async { | ||
| 36 | - _selectItem = event.selectIndex; | ||
| 37 | - emitter(SelectItemChangeState()); | ||
| 38 | - } | ||
| 39 | -} |
lib/pages/practice/voicetopic/voicepicture/bloc/voice_pic_event.dart deleted
| 1 | -part of 'voice_pic_bloc.dart'; | ||
| 2 | - | ||
| 3 | -@immutable | ||
| 4 | -abstract class VoicePicEvent {} | ||
| 5 | - | ||
| 6 | -class CurrentPageIndexChangeEvent extends VoicePicEvent { | ||
| 7 | - final int pageIndex; | ||
| 8 | - CurrentPageIndexChangeEvent(this.pageIndex); | ||
| 9 | -} | ||
| 10 | - | ||
| 11 | -class SelectItemEvent extends VoicePicEvent { | ||
| 12 | - final int selectIndex; | ||
| 13 | - SelectItemEvent(this.selectIndex); | ||
| 14 | -} | ||
| 15 | \ No newline at end of file | 0 | \ No newline at end of file |
lib/pages/practice/voicetopic/voicepicture/bloc/voice_pic_state.dart deleted
| 1 | -part of 'voice_pic_bloc.dart'; | ||
| 2 | - | ||
| 3 | -@immutable | ||
| 4 | -abstract class VoicePicState {} | ||
| 5 | - | ||
| 6 | -class VoicePicInitial extends VoicePicState {} | ||
| 7 | - | ||
| 8 | -class CurrentPageIndexState extends VoicePicState {} | ||
| 9 | - | ||
| 10 | -class SelectItemChangeState extends VoicePicState {} | ||
| 11 | \ No newline at end of file | 0 | \ No newline at end of file |
lib/pages/practice/voicetopic/voicepicture/voice_pic_page.dart deleted
| 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 | -import 'package:wow_english/pages/practice/widgets/practice_header_widget.dart'; | ||
| 6 | - | ||
| 7 | -import 'bloc/voice_pic_bloc.dart'; | ||
| 8 | - | ||
| 9 | -class VoicePicPage extends StatelessWidget { | ||
| 10 | - const VoicePicPage({super.key}); | ||
| 11 | - | ||
| 12 | - @override | ||
| 13 | - Widget build(BuildContext context) { | ||
| 14 | - return BlocProvider( | ||
| 15 | - create: (context) => VoicePicBloc(PageController(),4), | ||
| 16 | - child: _VoicePicPage(), | ||
| 17 | - ); | ||
| 18 | - } | ||
| 19 | -} | ||
| 20 | - | ||
| 21 | -class _VoicePicPage extends StatelessWidget { | ||
| 22 | - @override | ||
| 23 | - Widget build(BuildContext context) { | ||
| 24 | - return BlocListener<VoicePicBloc, VoicePicState>( | ||
| 25 | - listener: (context, state){}, | ||
| 26 | - child: _voicePicView(), | ||
| 27 | - ); | ||
| 28 | - } | ||
| 29 | - | ||
| 30 | - Widget _voicePicView() => BlocBuilder<VoicePicBloc, VoicePicState>( | ||
| 31 | - builder: (context, state){ | ||
| 32 | - return _voicePictureView(); | ||
| 33 | - }); | ||
| 34 | - | ||
| 35 | - Widget _voicePictureView() => BlocBuilder<VoicePicBloc, VoicePicState>( | ||
| 36 | - buildWhen: (_,s) => s is CurrentPageIndexState, | ||
| 37 | - builder: (context,state){ | ||
| 38 | - final bloc = BlocProvider.of<VoicePicBloc>(context); | ||
| 39 | - return Container( | ||
| 40 | - color: Colors.white, | ||
| 41 | - child: Stack( | ||
| 42 | - children: [ | ||
| 43 | - Image.asset( | ||
| 44 | - 'road_bg'.assetPng, | ||
| 45 | - height: double.infinity, | ||
| 46 | - width: double.infinity | ||
| 47 | - ), | ||
| 48 | - Column( | ||
| 49 | - children: [ | ||
| 50 | - PracticeHeaderWidget( | ||
| 51 | - title: '${bloc.currentPage}/8', | ||
| 52 | - onTap: (){Navigator.pop(context);}, | ||
| 53 | - ), | ||
| 54 | - Row( | ||
| 55 | - mainAxisAlignment: MainAxisAlignment.center, | ||
| 56 | - children: [ | ||
| 57 | - Image.asset('voice'.assetPng,height: 33.h,width: 30.w,), | ||
| 58 | - 10.horizontalSpace, | ||
| 59 | - Text( | ||
| 60 | - 'yellow', | ||
| 61 | - style: TextStyle( | ||
| 62 | - fontSize: 20.sp, | ||
| 63 | - color: const Color(0xFF333333) | ||
| 64 | - ) | ||
| 65 | - ) | ||
| 66 | - ], | ||
| 67 | - ), | ||
| 68 | - 26.verticalSpace, | ||
| 69 | - Expanded( | ||
| 70 | - child: PageView.builder( | ||
| 71 | - itemCount: 8, | ||
| 72 | - scrollDirection: Axis.horizontal, | ||
| 73 | - controller: bloc.pageController, | ||
| 74 | - onPageChanged: (int index) { | ||
| 75 | - bloc.add(CurrentPageIndexChangeEvent(index)); | ||
| 76 | - }, | ||
| 77 | - itemBuilder: (BuildContext context,int index){ | ||
| 78 | - return _pageViewItemWidget(); | ||
| 79 | - }), | ||
| 80 | - ) | ||
| 81 | - ], | ||
| 82 | - ) | ||
| 83 | - ], | ||
| 84 | - ), | ||
| 85 | - ); | ||
| 86 | - }); | ||
| 87 | - | ||
| 88 | - Widget _pageViewItemWidget() => BlocBuilder<VoicePicBloc, VoicePicState>( | ||
| 89 | - builder: (context, state){ | ||
| 90 | - final bloc = BlocProvider.of<VoicePicBloc>(context); | ||
| 91 | - return SafeArea( | ||
| 92 | - child: Column( | ||
| 93 | - children: [ | ||
| 94 | - Row( | ||
| 95 | - mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
| 96 | - children: [ | ||
| 97 | - Offstage( | ||
| 98 | - offstage: (bloc.modelCount < 1), | ||
| 99 | - child: _decodeImageWidget(1), | ||
| 100 | - ), | ||
| 101 | - Offstage( | ||
| 102 | - offstage: (bloc.modelCount < 2), | ||
| 103 | - child: _decodeImageWidget(2), | ||
| 104 | - ), | ||
| 105 | - Offstage( | ||
| 106 | - offstage: (bloc.modelCount < 3), | ||
| 107 | - child: _decodeImageWidget(3), | ||
| 108 | - ), | ||
| 109 | - Offstage( | ||
| 110 | - offstage: (bloc.modelCount < 4), | ||
| 111 | - child: _decodeImageWidget(4), | ||
| 112 | - ) | ||
| 113 | - ], | ||
| 114 | - ) | ||
| 115 | - ], | ||
| 116 | - ), | ||
| 117 | - ); | ||
| 118 | - }); | ||
| 119 | - | ||
| 120 | - Widget _decodeImageWidget(int index) => BlocBuilder<VoicePicBloc, VoicePicState>( | ||
| 121 | - buildWhen: (_, s) => s is SelectItemChangeState, | ||
| 122 | - builder: (context,state){ | ||
| 123 | - final bloc = BlocProvider.of<VoicePicBloc>(context); | ||
| 124 | - return GestureDetector( | ||
| 125 | - onTap: () => bloc.add(SelectItemEvent(index)), | ||
| 126 | - child: Container( | ||
| 127 | - padding: const EdgeInsets.all(4.5), | ||
| 128 | - decoration: BoxDecoration( | ||
| 129 | - color: bloc.selectItem == index?const Color(0xFF00B6F1):Colors.white, | ||
| 130 | - borderRadius: BorderRadius.circular(15), | ||
| 131 | - ), | ||
| 132 | - height: 143.h, | ||
| 133 | - width: 143.w, | ||
| 134 | - child: Container( | ||
| 135 | - decoration: BoxDecoration( | ||
| 136 | - color: Colors.white, | ||
| 137 | - borderRadius: BorderRadius.circular(15), | ||
| 138 | - border: Border.all( | ||
| 139 | - width: 1.0, | ||
| 140 | - color: const Color(0xFF140C10) | ||
| 141 | - ), | ||
| 142 | - image: const DecorationImage( | ||
| 143 | - fit: BoxFit.fitWidth, | ||
| 144 | - image: NetworkImage('https://img1.baidu.com/it/u=3392591833,1640391553&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=714') | ||
| 145 | - ) | ||
| 146 | - ), | ||
| 147 | - ), | ||
| 148 | - ), | ||
| 149 | - ); | ||
| 150 | - }); | ||
| 151 | -} | ||
| 152 | \ No newline at end of file | 0 | \ No newline at end of file |
lib/pages/practice/voicetopic/voiceword/bloc/voice_word_bloc.dart deleted
| 1 | - | ||
| 2 | -import 'package:flutter/cupertino.dart'; | ||
| 3 | -import 'package:flutter_bloc/flutter_bloc.dart'; | ||
| 4 | - | ||
| 5 | -part 'voice_word_event.dart'; | ||
| 6 | -part 'voice_word_state.dart'; | ||
| 7 | - | ||
| 8 | -class VoiceWordBloc extends Bloc<VoiceWordEvent, VoiceWordState> { | ||
| 9 | - final PageController pageController; | ||
| 10 | - | ||
| 11 | - final int modelCount; | ||
| 12 | - | ||
| 13 | - int _currentPage = 0; | ||
| 14 | - | ||
| 15 | - int _selectItem = 0; | ||
| 16 | - | ||
| 17 | - int get currentPage => _currentPage + 1; | ||
| 18 | - | ||
| 19 | - int get selectItem => _selectItem; | ||
| 20 | - VoiceWordBloc(this.pageController, this.modelCount) : super(VoiceWordInitial()) { | ||
| 21 | - on<CurrentPageIndexChangeEvent>(_pageControllerChange); | ||
| 22 | - on<SelectItemEvent>(_selectItemLoad); | ||
| 23 | - } | ||
| 24 | - | ||
| 25 | - @override | ||
| 26 | - Future<void> close() { | ||
| 27 | - pageController.dispose(); | ||
| 28 | - return super.close(); | ||
| 29 | - } | ||
| 30 | - | ||
| 31 | - void _pageControllerChange(CurrentPageIndexChangeEvent event,Emitter<VoiceWordState> emitter) async { | ||
| 32 | - _currentPage = event.pageIndex; | ||
| 33 | - emitter(CurrentPageIndexState()); | ||
| 34 | - } | ||
| 35 | - | ||
| 36 | - void _selectItemLoad(SelectItemEvent event,Emitter<VoiceWordState> emitter) async { | ||
| 37 | - _selectItem = event.selectIndex; | ||
| 38 | - emitter(SelectItemChangeState()); | ||
| 39 | - } | ||
| 40 | -} | ||
| 41 | - |
lib/pages/practice/voicetopic/voiceword/bloc/voice_word_event.dart deleted
| 1 | -part of 'voice_word_bloc.dart'; | ||
| 2 | - | ||
| 3 | -@immutable | ||
| 4 | -abstract class VoiceWordEvent {} | ||
| 5 | - | ||
| 6 | -class CurrentPageIndexChangeEvent extends VoiceWordEvent { | ||
| 7 | - final int pageIndex; | ||
| 8 | - CurrentPageIndexChangeEvent(this.pageIndex); | ||
| 9 | -} | ||
| 10 | - | ||
| 11 | -class SelectItemEvent extends VoiceWordEvent { | ||
| 12 | - final int selectIndex; | ||
| 13 | - SelectItemEvent(this.selectIndex); | ||
| 14 | -} | ||
| 15 | \ No newline at end of file | 0 | \ No newline at end of file |
lib/pages/practice/voicetopic/voiceword/bloc/voice_word_state.dart deleted
lib/pages/practice/voicetopic/voiceword/voice_word_page.dart deleted
| 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 | -import 'package:wow_english/pages/practice/widgets/practice_header_widget.dart'; | ||
| 6 | - | ||
| 7 | -import 'bloc/voice_word_bloc.dart'; | ||
| 8 | - | ||
| 9 | -class VoiceWordPage extends StatelessWidget { | ||
| 10 | - const VoiceWordPage({super.key}); | ||
| 11 | - | ||
| 12 | - | ||
| 13 | - @override | ||
| 14 | - Widget build(BuildContext context) { | ||
| 15 | - return BlocProvider( | ||
| 16 | - create: (context) => VoiceWordBloc(PageController(),4), | ||
| 17 | - child: _VoiceWordPage(), | ||
| 18 | - ); | ||
| 19 | - } | ||
| 20 | -} | ||
| 21 | - | ||
| 22 | -class _VoiceWordPage extends StatelessWidget { | ||
| 23 | - @override | ||
| 24 | - Widget build(BuildContext context) { | ||
| 25 | - return BlocListener<VoiceWordBloc, VoiceWordState>( | ||
| 26 | - listener: (context, state){}, | ||
| 27 | - child: _voiceWorView(), | ||
| 28 | - ); | ||
| 29 | - } | ||
| 30 | - | ||
| 31 | - Widget _voiceWorView() => BlocBuilder<VoiceWordBloc, VoiceWordState>( | ||
| 32 | - builder: (context, state){ | ||
| 33 | - return _voiceWordView(); | ||
| 34 | - }); | ||
| 35 | - | ||
| 36 | - Widget _voiceWordView() => BlocBuilder<VoiceWordBloc, VoiceWordState>( | ||
| 37 | - buildWhen: (_,s) => s is CurrentPageIndexState, | ||
| 38 | - builder: (context,state){ | ||
| 39 | - final bloc = BlocProvider.of<VoiceWordBloc>(context); | ||
| 40 | - return Container( | ||
| 41 | - color: Colors.white, | ||
| 42 | - child: Stack( | ||
| 43 | - children: [ | ||
| 44 | - Image.asset( | ||
| 45 | - 'road_bg'.assetPng, | ||
| 46 | - height: double.infinity, | ||
| 47 | - width: double.infinity | ||
| 48 | - ), | ||
| 49 | - Column( | ||
| 50 | - children: [ | ||
| 51 | - PracticeHeaderWidget( | ||
| 52 | - title: '${bloc.currentPage}/8', | ||
| 53 | - onTap: (){Navigator.pop(context);}, | ||
| 54 | - ), | ||
| 55 | - Image.asset('voice'.assetPng,height: 33.h,width: 30.w,), | ||
| 56 | - 26.verticalSpace, | ||
| 57 | - Expanded( | ||
| 58 | - child: PageView.builder( | ||
| 59 | - itemCount: 8, | ||
| 60 | - scrollDirection: Axis.horizontal, | ||
| 61 | - controller: bloc.pageController, | ||
| 62 | - onPageChanged: (int index) { | ||
| 63 | - bloc.add(CurrentPageIndexChangeEvent(index)); | ||
| 64 | - }, | ||
| 65 | - itemBuilder: (BuildContext context,int index){ | ||
| 66 | - return _pageViewItemWidget(); | ||
| 67 | - }), | ||
| 68 | - ) | ||
| 69 | - ], | ||
| 70 | - ) | ||
| 71 | - ], | ||
| 72 | - ), | ||
| 73 | - ); | ||
| 74 | - }); | ||
| 75 | - | ||
| 76 | - Widget _pageViewItemWidget() => BlocBuilder<VoiceWordBloc, VoiceWordState>( | ||
| 77 | - builder: (context, state){ | ||
| 78 | - final bloc = BlocProvider.of<VoiceWordBloc>(context); | ||
| 79 | - return SafeArea( | ||
| 80 | - child: Column( | ||
| 81 | - children: [ | ||
| 82 | - Row( | ||
| 83 | - mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
| 84 | - children: [ | ||
| 85 | - Offstage( | ||
| 86 | - offstage: (bloc.modelCount < 1), | ||
| 87 | - child: _decodeImageWidget(1), | ||
| 88 | - ), | ||
| 89 | - Offstage( | ||
| 90 | - offstage: (bloc.modelCount < 2), | ||
| 91 | - child: _decodeImageWidget(2), | ||
| 92 | - ), | ||
| 93 | - Offstage( | ||
| 94 | - offstage: (bloc.modelCount < 3), | ||
| 95 | - child: _decodeImageWidget(3), | ||
| 96 | - ), | ||
| 97 | - Offstage( | ||
| 98 | - offstage: (bloc.modelCount < 4), | ||
| 99 | - child: _decodeImageWidget(4), | ||
| 100 | - ) | ||
| 101 | - ], | ||
| 102 | - ) | ||
| 103 | - ], | ||
| 104 | - ), | ||
| 105 | - ); | ||
| 106 | - }); | ||
| 107 | - | ||
| 108 | - Widget _decodeImageWidget(int index) => BlocBuilder<VoiceWordBloc,VoiceWordState>( | ||
| 109 | - buildWhen: (_, s) => s is SelectItemChangeState, | ||
| 110 | - builder: (context,state){ | ||
| 111 | - final bloc = BlocProvider.of<VoiceWordBloc>(context); | ||
| 112 | - return GestureDetector( | ||
| 113 | - onTap: () => bloc.add(SelectItemEvent(index)), | ||
| 114 | - child: Container( | ||
| 115 | - width: 143.w, | ||
| 116 | - height: 143.h, | ||
| 117 | - padding: EdgeInsets.only(left: 13.w,right: 13.w,top: 13.h,bottom: 13.h), | ||
| 118 | - decoration: BoxDecoration( | ||
| 119 | - color: Colors.white, | ||
| 120 | - borderRadius: BorderRadius.circular(15), | ||
| 121 | - border: Border.all( | ||
| 122 | - width: 1.0, | ||
| 123 | - color: const Color(0xFF140C10) | ||
| 124 | - ), | ||
| 125 | - ), | ||
| 126 | - child: Column( | ||
| 127 | - mainAxisAlignment: MainAxisAlignment.end, | ||
| 128 | - children: [ | ||
| 129 | - Expanded( | ||
| 130 | - child: Container( | ||
| 131 | - alignment: Alignment.center, | ||
| 132 | - child: Text( | ||
| 133 | - 'yellow', | ||
| 134 | - style: TextStyle( | ||
| 135 | - fontSize: 20.sp, | ||
| 136 | - color: const Color(0xFF333333) | ||
| 137 | - ) | ||
| 138 | - ), | ||
| 139 | - ), | ||
| 140 | - ), | ||
| 141 | - Container( | ||
| 142 | - height: 30.h, | ||
| 143 | - width: double.infinity, | ||
| 144 | - decoration: BoxDecoration( | ||
| 145 | - color: bloc.selectItem == index?const Color(0xFF00B6F1):Colors.white, | ||
| 146 | - borderRadius: BorderRadius.circular(15.r), | ||
| 147 | - border: Border.all( | ||
| 148 | - width: 1.5, | ||
| 149 | - color: const Color(0xFF140C10) | ||
| 150 | - ), | ||
| 151 | - ), | ||
| 152 | - alignment: Alignment.center, | ||
| 153 | - child: Image.asset('choose'.assetPng), | ||
| 154 | - ) | ||
| 155 | - ], | ||
| 156 | - ), | ||
| 157 | - ), | ||
| 158 | - ); | ||
| 159 | - }); | ||
| 160 | -} | ||
| 161 | \ No newline at end of file | 0 | \ No newline at end of file |
lib/pages/repeatafter/bloc/repeat_after_bloc.dart
| @@ -15,17 +15,15 @@ class RepeatAfterBloc extends Bloc<RepeatAfterEvent, RepeatAfterState> { | @@ -15,17 +15,15 @@ class RepeatAfterBloc extends Bloc<RepeatAfterEvent, RepeatAfterState> { | ||
| 15 | List<FollowReadEntity?> get listData => _listData; | 15 | List<FollowReadEntity?> get listData => _listData; |
| 16 | 16 | ||
| 17 | RepeatAfterBloc() : super(RepeatAfterInitial()) { | 17 | RepeatAfterBloc() : super(RepeatAfterInitial()) { |
| 18 | - on<RepeatAfterEvent>((event, emit) { | ||
| 19 | - // TODO: implement event handler | ||
| 20 | - }); | 18 | + on<RequestDataEvent>(_requestData); |
| 21 | } | 19 | } |
| 22 | 20 | ||
| 23 | 21 | ||
| 24 | - Future<void> requestData() async { | 22 | + void _requestData(RequestDataEvent event, Emitter<RepeatAfterState> emitter) async { |
| 25 | try { | 23 | try { |
| 26 | await loading(() async { | 24 | await loading(() async { |
| 27 | _listData = await ListenDao.followRead()??[]; | 25 | _listData = await ListenDao.followRead()??[]; |
| 28 | - emit(RequestDataState()); | 26 | + emitter(RequestDataState()); |
| 29 | }); | 27 | }); |
| 30 | } catch (e) { | 28 | } catch (e) { |
| 31 | if (e is ApiException) { | 29 | if (e is ApiException) { |
lib/pages/repeatafter/bloc/repeat_after_event.dart
lib/pages/repeatafter/repeat_after_page.dart
| @@ -13,7 +13,7 @@ class RepeatAfterPage extends StatelessWidget { | @@ -13,7 +13,7 @@ class RepeatAfterPage extends StatelessWidget { | ||
| 13 | @override | 13 | @override |
| 14 | Widget build(BuildContext context) { | 14 | Widget build(BuildContext context) { |
| 15 | return BlocProvider( | 15 | return BlocProvider( |
| 16 | - create: (context) => RepeatAfterBloc()..requestData(), | 16 | + create: (context) => RepeatAfterBloc()..add(RequestDataEvent()), |
| 17 | child: _RepeatAfterPageView(), | 17 | child: _RepeatAfterPageView(), |
| 18 | ); | 18 | ); |
| 19 | } | 19 | } |
lib/pages/video/lookvideo/look_video_page.dart
| 1 | import 'package:flutter/material.dart'; | 1 | import 'package:flutter/material.dart'; |
| 2 | -import 'package:flutter_bloc/flutter_bloc.dart'; | ||
| 3 | import 'package:wow_english/pages/video/lookvideo/widgets/video_widget.dart'; | 2 | import 'package:wow_english/pages/video/lookvideo/widgets/video_widget.dart'; |
| 4 | 3 | ||
| 5 | -import 'bloc/look_video_bloc.dart'; | ||
| 6 | - | ||
| 7 | class LookVideoPage extends StatefulWidget { | 4 | class LookVideoPage extends StatefulWidget { |
| 8 | - const LookVideoPage({super.key, this.videoUrl}); | 5 | + const LookVideoPage({super.key, this.videoUrl, this.typeTitle}); |
| 9 | 6 | ||
| 10 | final String? videoUrl; | 7 | final String? videoUrl; |
| 8 | + final String? typeTitle; | ||
| 11 | 9 | ||
| 12 | @override | 10 | @override |
| 13 | State<StatefulWidget> createState() { | 11 | State<StatefulWidget> createState() { |
| @@ -20,23 +18,7 @@ class _LookVideoPageState extends State<LookVideoPage> { | @@ -20,23 +18,7 @@ class _LookVideoPageState extends State<LookVideoPage> { | ||
| 20 | Widget build(BuildContext context) { | 18 | Widget build(BuildContext context) { |
| 21 | return VideoWidget( | 19 | return VideoWidget( |
| 22 | videoUrl: widget.videoUrl??'', | 20 | videoUrl: widget.videoUrl??'', |
| 21 | + typeTitle: widget.typeTitle, | ||
| 23 | ); | 22 | ); |
| 24 | } | 23 | } |
| 25 | -} | ||
| 26 | - | ||
| 27 | -class _LookVideoPage extends StatelessWidget { | ||
| 28 | - @override | ||
| 29 | - Widget build(BuildContext context) { | ||
| 30 | - return BlocListener<LookVideoBloc, LookVideoState>( | ||
| 31 | - listener: (context,state){}, | ||
| 32 | - child: _lookVideoView(), | ||
| 33 | - ); | ||
| 34 | - } | ||
| 35 | - | ||
| 36 | - Widget _lookVideoView() => BlocBuilder<LookVideoBloc, LookVideoState>( | ||
| 37 | - builder: (context,state){ | ||
| 38 | - return const VideoWidget( | ||
| 39 | - videoUrl: 'https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/7194236f31b2e1e3da0fe06cfed4ba2b.mp4', | ||
| 40 | - ); | ||
| 41 | - }); | ||
| 42 | } | 24 | } |
| 43 | \ No newline at end of file | 25 | \ No newline at end of file |
lib/pages/video/lookvideo/widgets/video_opera_widget.dart
| @@ -20,7 +20,8 @@ class VideoOperaWidget extends StatefulWidget { | @@ -20,7 +20,8 @@ class VideoOperaWidget extends StatefulWidget { | ||
| 20 | this.degree = 0.0, | 20 | this.degree = 0.0, |
| 21 | this.actionEvent, | 21 | this.actionEvent, |
| 22 | this.sliderChangeEvent, | 22 | this.sliderChangeEvent, |
| 23 | - this.isPlay = true | 23 | + this.isPlay = true, |
| 24 | + this.title = 'song', | ||
| 24 | }); | 25 | }); |
| 25 | //当前播放时间 | 26 | //当前播放时间 |
| 26 | final String currentTime; | 27 | final String currentTime; |
| @@ -28,6 +29,7 @@ class VideoOperaWidget extends StatefulWidget { | @@ -28,6 +29,7 @@ class VideoOperaWidget extends StatefulWidget { | ||
| 28 | final String totalTime; | 29 | final String totalTime; |
| 29 | final double degree; | 30 | final double degree; |
| 30 | final bool isPlay; | 31 | final bool isPlay; |
| 32 | + final String title; | ||
| 31 | final Function(OperationType type)? actionEvent; | 33 | final Function(OperationType type)? actionEvent; |
| 32 | final Function(double degree)? sliderChangeEvent; | 34 | final Function(double degree)? sliderChangeEvent; |
| 33 | 35 | ||
| @@ -90,7 +92,7 @@ class _VideoOperaWidgetState extends State<VideoOperaWidget> { | @@ -90,7 +92,7 @@ class _VideoOperaWidgetState extends State<VideoOperaWidget> { | ||
| 90 | ), | 92 | ), |
| 91 | padding: EdgeInsets.symmetric(horizontal: 10.w), | 93 | padding: EdgeInsets.symmetric(horizontal: 10.w), |
| 92 | child: Text( | 94 | child: Text( |
| 93 | - 'song', | 95 | + widget.title, |
| 94 | textAlign: TextAlign.center, | 96 | textAlign: TextAlign.center, |
| 95 | style: TextStyle( | 97 | style: TextStyle( |
| 96 | fontSize: 20.sp, | 98 | fontSize: 20.sp, |
| @@ -100,31 +102,31 @@ class _VideoOperaWidgetState extends State<VideoOperaWidget> { | @@ -100,31 +102,31 @@ class _VideoOperaWidgetState extends State<VideoOperaWidget> { | ||
| 100 | ) | 102 | ) |
| 101 | ], | 103 | ], |
| 102 | ), | 104 | ), |
| 103 | - GestureDetector( | ||
| 104 | - onTap: () { | ||
| 105 | - widget.actionEvent?.call(OperationType.subtitlesState); | ||
| 106 | - }, | ||
| 107 | - child: Container( | ||
| 108 | - height: 40.h, | ||
| 109 | - alignment: Alignment.center, | ||
| 110 | - decoration: BoxDecoration( | ||
| 111 | - color: Colors.white, | ||
| 112 | - borderRadius: BorderRadius.circular(6.r), | ||
| 113 | - border: Border.all( | ||
| 114 | - width: 1.5, | ||
| 115 | - color: const Color(0xFF140C10) | ||
| 116 | - ) | ||
| 117 | - ), | ||
| 118 | - padding: EdgeInsets.symmetric(horizontal: 10.w), | ||
| 119 | - child: Text( | ||
| 120 | - '中/英', | ||
| 121 | - style: TextStyle( | ||
| 122 | - fontSize: 20.sp, | ||
| 123 | - color: const Color(0xFF333333), | ||
| 124 | - ), | ||
| 125 | - ), | ||
| 126 | - ), | ||
| 127 | - ) | 105 | + // GestureDetector( |
| 106 | + // onTap: () { | ||
| 107 | + // widget.actionEvent?.call(OperationType.subtitlesState); | ||
| 108 | + // }, | ||
| 109 | + // child: Container( | ||
| 110 | + // height: 40.h, | ||
| 111 | + // alignment: Alignment.center, | ||
| 112 | + // decoration: BoxDecoration( | ||
| 113 | + // color: Colors.white, | ||
| 114 | + // borderRadius: BorderRadius.circular(6.r), | ||
| 115 | + // border: Border.all( | ||
| 116 | + // width: 1.5, | ||
| 117 | + // color: const Color(0xFF140C10) | ||
| 118 | + // ) | ||
| 119 | + // ), | ||
| 120 | + // padding: EdgeInsets.symmetric(horizontal: 10.w), | ||
| 121 | + // child: Text( | ||
| 122 | + // '中/英', | ||
| 123 | + // style: TextStyle( | ||
| 124 | + // fontSize: 20.sp, | ||
| 125 | + // color: const Color(0xFF333333), | ||
| 126 | + // ), | ||
| 127 | + // ), | ||
| 128 | + // ), | ||
| 129 | + // ) | ||
| 128 | ], | 130 | ], |
| 129 | ), | 131 | ), |
| 130 | ), | 132 | ), |
lib/pages/video/lookvideo/widgets/video_widget.dart
| @@ -7,9 +7,10 @@ import 'package:wow_english/common/extension/string_extension.dart'; | @@ -7,9 +7,10 @@ import 'package:wow_english/common/extension/string_extension.dart'; | ||
| 7 | import 'video_opera_widget.dart'; | 7 | import 'video_opera_widget.dart'; |
| 8 | 8 | ||
| 9 | class VideoWidget extends StatefulWidget { | 9 | class VideoWidget extends StatefulWidget { |
| 10 | - const VideoWidget({super.key, this.videoUrl = ''}); | 10 | + const VideoWidget({super.key, this.videoUrl = '',this.typeTitle}); |
| 11 | 11 | ||
| 12 | final String videoUrl; | 12 | final String videoUrl; |
| 13 | + final String? typeTitle; | ||
| 13 | 14 | ||
| 14 | @override | 15 | @override |
| 15 | State<StatefulWidget> createState() { | 16 | State<StatefulWidget> createState() { |
| @@ -53,9 +54,6 @@ class _VideoWidgetState extends State<VideoWidget> { | @@ -53,9 +54,6 @@ class _VideoWidgetState extends State<VideoWidget> { | ||
| 53 | timerUtil = TimerUtil(mInterval: 1000,mTotalTime: 1000*10); | 54 | timerUtil = TimerUtil(mInterval: 1000,mTotalTime: 1000*10); |
| 54 | timerUtil!.setOnTimerTickCallback((int tick) { | 55 | timerUtil!.setOnTimerTickCallback((int tick) { |
| 55 | double currentTick = tick / 1000; | 56 | double currentTick = tick / 1000; |
| 56 | - if (kDebugMode) { | ||
| 57 | - print(currentTick); | ||
| 58 | - } | ||
| 59 | if (currentTick.toInt() == 0) {//倒计时结束 | 57 | if (currentTick.toInt() == 0) {//倒计时结束 |
| 60 | setState(() { | 58 | setState(() { |
| 61 | _hiddenTipView = true; | 59 | _hiddenTipView = true; |
| @@ -148,9 +146,10 @@ class _VideoWidgetState extends State<VideoWidget> { | @@ -148,9 +146,10 @@ class _VideoWidgetState extends State<VideoWidget> { | ||
| 148 | Offstage( | 146 | Offstage( |
| 149 | offstage: _hiddenTipView, | 147 | offstage: _hiddenTipView, |
| 150 | child: VideoOperaWidget( | 148 | child: VideoOperaWidget( |
| 151 | - currentTime: _currentTime, | ||
| 152 | - totalTime: _totalTime, | 149 | + title: widget.typeTitle??'song', |
| 153 | degree: _playDegree, | 150 | degree: _playDegree, |
| 151 | + totalTime: _totalTime, | ||
| 152 | + currentTime: _currentTime, | ||
| 154 | isPlay: _controller!.value.isPlaying, | 153 | isPlay: _controller!.value.isPlaying, |
| 155 | actionEvent: (OperationType type) { | 154 | actionEvent: (OperationType type) { |
| 156 | actionType(type); | 155 | actionType(type); |
lib/pages/voiceanswer/bloc/voice_answer_bloc.dart deleted
| 1 | -import 'package:flutter/cupertino.dart'; | ||
| 2 | -import 'package:flutter_bloc/flutter_bloc.dart'; | ||
| 3 | - | ||
| 4 | -part 'voice_answer_event.dart'; | ||
| 5 | -part 'voice_answer_state.dart'; | ||
| 6 | - | ||
| 7 | -class VoiceAnswerBloc extends Bloc<VoiceAnswerEvent, VoiceAnswerState> { | ||
| 8 | - VoiceAnswerBloc() : super(VoiceAnswerInitial()) { | ||
| 9 | - on<VoiceAnswerEvent>((event, emit) { | ||
| 10 | - // TODO: implement event handler | ||
| 11 | - }); | ||
| 12 | - } | ||
| 13 | -} |
lib/pages/voiceanswer/bloc/voice_answer_event.dart deleted
lib/pages/voiceanswer/bloc/voice_answer_state.dart deleted
lib/pages/voiceanswer/voice_answer_page.dart deleted
| 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 | -import 'package:wow_english/pages/practice/widgets/practice_header_widget.dart'; | ||
| 6 | - | ||
| 7 | -import 'bloc/voice_answer_bloc.dart'; | ||
| 8 | - | ||
| 9 | -class VoiceAnswerPage extends StatelessWidget { | ||
| 10 | - const VoiceAnswerPage({super.key}); | ||
| 11 | - | ||
| 12 | - @override | ||
| 13 | - Widget build(BuildContext context) { | ||
| 14 | - return BlocProvider( | ||
| 15 | - create: (_) => VoiceAnswerBloc(), | ||
| 16 | - child: _VoiceAnswerPage(), | ||
| 17 | - ); | ||
| 18 | - } | ||
| 19 | -} | ||
| 20 | - | ||
| 21 | -class _VoiceAnswerPage extends StatelessWidget { | ||
| 22 | - @override | ||
| 23 | - Widget build(BuildContext context) { | ||
| 24 | - return BlocListener<VoiceAnswerBloc,VoiceAnswerState>( | ||
| 25 | - listener: (context, state) {}, | ||
| 26 | - child: _voiceAnswerView(), | ||
| 27 | - ); | ||
| 28 | - } | ||
| 29 | - | ||
| 30 | - Widget _voiceAnswerView() => BlocBuilder<VoiceAnswerBloc,VoiceAnswerState>( | ||
| 31 | - builder: (context, state) { | ||
| 32 | - final bloc = BlocProvider.of<VoiceAnswerBloc>(context); | ||
| 33 | - return Container( | ||
| 34 | - color: Colors.white, | ||
| 35 | - child: Stack( | ||
| 36 | - children: [ | ||
| 37 | - Positioned( | ||
| 38 | - left: 0, | ||
| 39 | - right: 0, | ||
| 40 | - bottom: 0, | ||
| 41 | - child: Image.asset( | ||
| 42 | - 'bottom_grass'.assetPng, | ||
| 43 | - fit: BoxFit.fitWidth, | ||
| 44 | - )), | ||
| 45 | - Column( | ||
| 46 | - children: [ | ||
| 47 | - PracticeHeaderWidget( | ||
| 48 | - title: '1/8', | ||
| 49 | - onTap: () { | ||
| 50 | - Navigator.pop(context); | ||
| 51 | - }, | ||
| 52 | - ), | ||
| 53 | - Expanded( | ||
| 54 | - child: PageView.builder( | ||
| 55 | - itemCount: 10, | ||
| 56 | - itemBuilder: (context, int index) { | ||
| 57 | - return _voiceAnswerItem(); | ||
| 58 | - })) | ||
| 59 | - ], | ||
| 60 | - ) | ||
| 61 | - ], | ||
| 62 | - ), | ||
| 63 | - ); | ||
| 64 | - }); | ||
| 65 | - | ||
| 66 | - Widget _voiceAnswerItem() => BlocBuilder<VoiceAnswerBloc,VoiceAnswerState>(builder: (context, state) { | ||
| 67 | - return Row( | ||
| 68 | - mainAxisAlignment: MainAxisAlignment.center, | ||
| 69 | - children: [ | ||
| 70 | - Image.network( | ||
| 71 | - 'https://img.liblibai.com/web/648331d5a2cb5.png?image_process=format,webp&x-oss-process=image/resize,w_2980,m_lfit/format,webp', | ||
| 72 | - height: 186.h, | ||
| 73 | - width: 186.w, | ||
| 74 | - ), | ||
| 75 | - 160.horizontalSpace, | ||
| 76 | - Column( | ||
| 77 | - mainAxisAlignment: MainAxisAlignment.center, | ||
| 78 | - children: [ | ||
| 79 | - Image.asset( | ||
| 80 | - 'voice'.assetPng, | ||
| 81 | - height: 52.h, | ||
| 82 | - width: 46.w, | ||
| 83 | - ), | ||
| 84 | - 70.verticalSpace, | ||
| 85 | - Image.asset( | ||
| 86 | - 'micro_phone'.assetPng, | ||
| 87 | - height: 75.w, | ||
| 88 | - width: 75.w, | ||
| 89 | - ) | ||
| 90 | - ], | ||
| 91 | - ) | ||
| 92 | - ], | ||
| 93 | - ); | ||
| 94 | - }); | ||
| 95 | -} |
lib/route/route.dart
| @@ -8,10 +8,7 @@ import 'package:wow_english/pages/listen/listen_page.dart'; | @@ -8,10 +8,7 @@ import 'package:wow_english/pages/listen/listen_page.dart'; | ||
| 8 | import 'package:wow_english/pages/login/forgetpwd/forget_password_home_page.dart'; | 8 | import 'package:wow_english/pages/login/forgetpwd/forget_password_home_page.dart'; |
| 9 | import 'package:wow_english/pages/login/loginpage/login_page.dart'; | 9 | import 'package:wow_english/pages/login/loginpage/login_page.dart'; |
| 10 | import 'package:wow_english/pages/login/setpwd/set_pwd_page.dart'; | 10 | import 'package:wow_english/pages/login/setpwd/set_pwd_page.dart'; |
| 11 | -import 'package:wow_english/pages/practice/chosetopic/topicpicture/topic_picture_page.dart'; | ||
| 12 | -import 'package:wow_english/pages/practice/chosetopic/topicword/topic_word_page.dart'; | ||
| 13 | -import 'package:wow_english/pages/practice/voicetopic/voicepicture/voice_pic_page.dart'; | ||
| 14 | -import 'package:wow_english/pages/practice/voicetopic/voiceword/voice_word_page.dart'; | 11 | +import 'package:wow_english/pages/practice/topic_picture_page.dart'; |
| 15 | import 'package:wow_english/pages/repeatafter/repeat_after_page.dart'; | 12 | import 'package:wow_english/pages/repeatafter/repeat_after_page.dart'; |
| 16 | import 'package:wow_english/pages/shop/exchane/exchange_lesson_page.dart'; | 13 | import 'package:wow_english/pages/shop/exchane/exchange_lesson_page.dart'; |
| 17 | import 'package:wow_english/pages/shop/exchangelist/exchange_lesson_list_page.dart'; | 14 | import 'package:wow_english/pages/shop/exchangelist/exchange_lesson_list_page.dart'; |
| @@ -19,7 +16,6 @@ import 'package:wow_english/pages/shop/home/shop_home_page.dart'; | @@ -19,7 +16,6 @@ import 'package:wow_english/pages/shop/home/shop_home_page.dart'; | ||
| 19 | import 'package:wow_english/pages/tab/tab_page.dart'; | 16 | import 'package:wow_english/pages/tab/tab_page.dart'; |
| 20 | import 'package:wow_english/pages/user/user_page.dart'; | 17 | import 'package:wow_english/pages/user/user_page.dart'; |
| 21 | import 'package:wow_english/pages/video/lookvideo/look_video_page.dart'; | 18 | import 'package:wow_english/pages/video/lookvideo/look_video_page.dart'; |
| 22 | -import 'package:wow_english/pages/voiceanswer/voice_answer_page.dart'; | ||
| 23 | 19 | ||
| 24 | import '../pages/reading/reading_page.dart'; | 20 | import '../pages/reading/reading_page.dart'; |
| 25 | 21 | ||
| @@ -87,17 +83,10 @@ class AppRouter { | @@ -87,17 +83,10 @@ class AppRouter { | ||
| 87 | return CupertinoPageRoute(builder: (_) => const UserPage()); | 83 | return CupertinoPageRoute(builder: (_) => const UserPage()); |
| 88 | case AppRouteName.topicPic: | 84 | case AppRouteName.topicPic: |
| 89 | return CupertinoPageRoute(builder: (_) => const TopicPicturePage()); | 85 | return CupertinoPageRoute(builder: (_) => const TopicPicturePage()); |
| 90 | - case AppRouteName.topicWord: | ||
| 91 | - return CupertinoPageRoute(builder: (_) => const TopicWordPage()); | ||
| 92 | - case AppRouteName.voicePic: | ||
| 93 | - return CupertinoPageRoute(builder: (_) => const VoicePicPage()); | ||
| 94 | - case AppRouteName.voiceWord: | ||
| 95 | - return CupertinoPageRoute(builder: (_) => const VoiceWordPage()); | ||
| 96 | - case AppRouteName.voiceAnswer: | ||
| 97 | - return CupertinoPageRoute(builder: (_) => const VoiceAnswerPage()); | ||
| 98 | case AppRouteName.lookVideo: | 86 | case AppRouteName.lookVideo: |
| 99 | final videoUrl = (settings.arguments as Map)['videoUrl'] as String; | 87 | final videoUrl = (settings.arguments as Map)['videoUrl'] as String; |
| 100 | - return CupertinoPageRoute(builder: (_) => LookVideoPage(videoUrl: videoUrl,)); | 88 | + final title = (settings.arguments as Map)['title'] as String?; |
| 89 | + return CupertinoPageRoute(builder: (_) => LookVideoPage(videoUrl: videoUrl,typeTitle: title,)); | ||
| 101 | case AppRouteName.setPwd: | 90 | case AppRouteName.setPwd: |
| 102 | final phoneNum = (settings.arguments as Map)['phoneNumber'] as String; | 91 | final phoneNum = (settings.arguments as Map)['phoneNumber'] as String; |
| 103 | return CupertinoPageRoute(builder: (_) => SetPassWordPage(phoneNum: phoneNum)); | 92 | return CupertinoPageRoute(builder: (_) => SetPassWordPage(phoneNum: phoneNum)); |