view.dart 3.38 KB
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<UnitBloc, UnitState>(builder: (context, state) {
      final bloc = BlocProvider.of<UnitBloc>(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,
                                      'courseUnitDetail': data
                                    });
                              },
                              child: CourseUnitItem(
                                unitEntity: bloc.unitData!,
                                unitLesson: data!,
                              ),
                            );
                          })),
                ),
                SafeArea(
                  child: Column(
                    children: [
                      6.verticalSpace,
                    ],
                  ),
                )
              ],
            ),
          ),
        ),
      );
    });
  }
}