import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:wow_english/pages/unit/state.dart'; import 'package:wow_english/pages/unit/widget/course_unit_item.dart'; import 'package:wow_english/pages/unit/widget/home_tab_header_widget.dart'; import 'package:wow_english/route/route.dart'; import '../../models/course_module_entity.dart'; import '../../models/course_unit_entity.dart'; import '../../utils/toast_util.dart'; import 'bloc.dart'; import 'event.dart'; // 课程列表页(多unit,参考口语星球的框或分割标志) class UnitPage extends StatelessWidget { const UnitPage({super.key, this.courseModuleEntity}); /// 模块 final CourseModuleEntity? courseModuleEntity; @override Widget build(BuildContext context) { return BlocProvider( create: (BuildContext context) => UnitBloc(courseModuleEntity) ..add(RequestUnitDataEvent(courseModuleEntity?.id)), child: Builder(builder: (context) => _buildPage(context)), ); } Widget _buildPage(BuildContext context) { return 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( courseModuleCode: bloc.getCourseModuleCode(), actionTap: (HeaderActionType type) { bloc.headerActionEvent(type); }, ), Expanded( child: Container( margin: EdgeInsets.symmetric(horizontal: 12.w), child: ListView.builder( itemCount: bloc.unitData?.courseUnitVOList?.length ?? 0, scrollDirection: Axis.horizontal, itemBuilder: (BuildContext context, int index) { CourseUnitDetail? data = bloc.unitData?.courseUnitVOList?[index]; return GestureDetector( onTap: () { if (data.lock == true) { showToast('当前unit暂未解锁'); return; } pushNamed(AppRouteName.courseSection, arguments: { 'courseUnitEntity': bloc.unitData, 'courseUnitId': data.id }); }, child: CourseUnitItem( unitEntity: bloc.unitData!, unitLesson: data!, ), ); })), ), SafeArea( child: Column( children: [ 6.verticalSpace, ], ), ) ], ), ), ), ); }); } }