import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:wow_english/common/core/user_util.dart'; import 'package:wow_english/common/extension/string_extension.dart'; import 'package:wow_english/models/course_entity.dart'; import 'package:wow_english/pages/home/widgets/home_bouns_item.dart'; import 'package:wow_english/pages/home/widgets/home_tab_header_widget.dart'; import 'package:wow_english/pages/home/widgets/home_video_item.dart'; import 'package:wow_english/route/route.dart'; import 'package:wow_english/utils/toast_util.dart'; import 'bloc/home_bloc.dart'; import 'courese_module_model.dart'; class HomePage extends StatelessWidget { const HomePage({super.key, this.moduleId}); /// 模块id final int? moduleId; @override Widget build(BuildContext context) { return BlocProvider( create: (context) => HomeBloc(moduleId)..add(RequestDataEvent()), child: _HomePageView(context), ); } } class _HomePageView extends StatelessWidget { const _HomePageView(this.context); final BuildContext context; void _headerActionEvent(HeaderActionType type) { if (type == HeaderActionType.video) { pushNamed(AppRouteName.reAfter); } else if (type == HeaderActionType.phase) { pushNamed(AppRouteName.lesson); } else if (type == HeaderActionType.listen) { pushNamed(AppRouteName.listen); } else if (type == HeaderActionType.shop) { pushNamed(AppRouteName.shop); } else if (type == HeaderActionType.user) { pushNamed(AppRouteName.user); } else if (type == HeaderActionType.home) { Navigator.pop(context); } } @override Widget build(BuildContext context) { final bloc = BlocProvider.of(context); return BlocListener( listener: (context, state) { if (state is RequestVideoLessonState) { final videoUrl = bloc.processEntity?.videos?.videoUrl??''; var title = ''; if (state.type == 1) { title = 'song'; } if (state.type == 2) { title = 'video'; } if (state.type == 5) { title = 'bonus'; } if (videoUrl.isEmpty || !videoUrl.contains('http')) { return; } pushNamed(AppRouteName.lookVideo,arguments: {'videoUrl':videoUrl,'title':title,'courseLessonId':state.courseLessonId}).then((value) { if (value != null) { Map dataMap = value as Map; bloc.add(RequestExitClassEvent( dataMap['courseLessonId']!, '0', dataMap['currentTime']!, )); } }); return; } if (state is RequestEnterClassState) { if (state.courseType != 3 && state.courseType != 4) {///视频类型 ///获取视频课程内容 bloc.add(RequestVideoLessonEvent(state.courseLessonId,state.courseType)); return; } if (state.courseType == 4) {//绘本 pushNamed(AppRouteName.reading, arguments: {'courseLessonId':state.courseLessonId}).then((value) { if (value != null) { Map dataMap = value as Map; bloc.add(RequestExitClassEvent( dataMap['courseLessonId']!, dataMap['currentStep']!, '0' )); } }); return; } if (state.courseType == 3) {//练习 pushNamed(AppRouteName.topicPic,arguments: {'courseLessonId':state.courseLessonId}).then((value) { if (value != null) { Map dataMap = value as Map; bloc.add(RequestExitClassEvent( dataMap['courseLessonId']!, dataMap['currentStep']!, '0' )); } }); return; } } }, child: _homeView(), ); } Widget _homeView() => BlocBuilder( builder: (context, state) { final bloc = BlocProvider.of(context); return Scaffold( body: Container( color: Colors.white, child: Center( child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ HomeTabHeaderWidget( entity: bloc.modelData, actionTap: (HeaderActionType type) { _headerActionEvent(type); }, ), Expanded( child: ListView.builder( itemCount: bloc.modelData?.totalCourseLesson??0, scrollDirection: Axis.horizontal, itemBuilder: (BuildContext context, int index) { CourseCourseLessons? data = bloc.modelData?.courseLessons?[index]; if (data?.courseType == 5) { //彩蛋 return GestureDetector( onTap: () { if (!UserUtil.isLogined()) { pushNamed(AppRouteName.login); return; } if (data!.lock!) { showToast('当前课程暂未解锁'); return; } ///进入课堂 bloc.add(RequestEnterClassEvent(data.id!,data.courseType!)); }, child: HomeBoundsItem( imageUrl: data?.coverUrl, ), ); } else { return GestureDetector( onTap: () { if (!UserUtil.isLogined()) { pushNamed(AppRouteName.login); return; } if (data!.lock!) { showToast('当前课程暂未解锁'); return; } ///进入课堂 bloc.add(RequestEnterClassEvent(data.id!,data.courseType!)); }, child: HomeVideoItem( entity: bloc.modelData, lessons: data, ), ); } })), SafeArea( child: Padding( padding: EdgeInsets.symmetric(horizontal: 13.w), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SizedBox( height: 47.h, width: 80.w, ), Container( decoration: BoxDecoration( color: CourseModuleModel(bloc.modelData?.courseModuleCode??'Phase-1').color, borderRadius: BorderRadius.circular(14.5.r), ), padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 24.w), child: Text( '${(bloc.modelData?.nowCourseLesson??0)}/${bloc.modelData?.totalCourseLesson??0}', style: TextStyle(color: Colors.white, fontSize: 12.sp), ), ), Image.asset( CourseModuleModel(bloc.modelData?.courseModuleCode??'Phase-1').courseModuleLogo.assetPng, height: 47.h, width: 80.w, // color: Colors.red, ), ], ), ), ) ], ), ), ), ); }); }