view.dart 3.03 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_header_widget.dart';
import 'package:wow_english/pages/unit/widget/course_unit_item.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';

class UnitPage extends StatelessWidget {
  const UnitPage({super.key, required this.courseEntity});

  /// 模块
  final CourseModuleEntity courseEntity;

  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      create: (BuildContext context) =>
          UnitBloc()..add(RequestUnitDataEvent(courseEntity.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: [
                CourseUnitHeaderWidget(entity: courseEntity),
                Expanded(
                    child: ListView.builder(
                        itemCount:
                            bloc.modelData?.courseUnitVOList?.length ?? 0,
                        scrollDirection: Axis.horizontal,
                        itemBuilder: (BuildContext context, int index) {
                          CourseUnitDetail? data =
                              bloc.modelData?.courseUnitVOList?[index];
                          return GestureDetector(
                            onTap: () {
                              if (data.lock == true) {
                                showToast('当前unit暂未解锁');
                                return;
                              }

                              ///进入课堂
                              pushNamedAndRemoveUntil(
                                  AppRouteName.home, (route) => route.isFirst,
                                  arguments: {
                                    'moduleId': data.courseModuleId,
                                    'unitId': data.id
                                  });
                            },
                            child: CourseUnitItem(
                              unitEntity: bloc.modelData!,
                              unitLesson: data!,
                            ),
                          );
                        })),
                SafeArea(
                  child: Column(
                    children: [
                      6.verticalSpace,
                    ],
                  ),
                )
              ],
            ),
          ),
        ),
      );
    });
  }
}