home_page.dart 5.41 KB
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_screenutil/flutter_screenutil.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_vidoe_item.dart';
import 'package:wow_english/route/route.dart';
import 'package:wow_english/utils/toast_util.dart';

import 'bloc/home_bloc.dart';

class HomePage extends StatelessWidget {
  const HomePage({super.key, this.moduleId});

  /// 模块id
  final String? moduleId;

  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      create: (context) => HomeBloc(moduleId)..add(RequestDataEvent()),
      child: _HomePageView(),
    );
  }
}

class _HomePageView extends StatelessWidget {
  void _headerActionEvent(HeaderActionType type) {
    if (type == HeaderActionType.video) {
      Navigator.of(AppRouter.context).pushNamed(AppRouteName.reAfter);
    } else if (type == HeaderActionType.phase) {
      Navigator.of(AppRouter.context).pushNamed(AppRouteName.lesson);
    } else if (type == HeaderActionType.listen) {
      Navigator.of(AppRouter.context).pushNamed(AppRouteName.listen);
    } else if (type == HeaderActionType.shop) {
      Navigator.of(AppRouter.context).pushNamed(AppRouteName.shop);
    } else if (type == HeaderActionType.user) {
      Navigator.of(AppRouter.context).pushNamed(AppRouteName.user);
    } else {
      // Navigator.of(AppRouter.context).pushNamed(AppRouteName.topicPic);
    }
  }

  @override
  Widget build(BuildContext context) {
    return BlocListener<HomeBloc, HomeState>(
      listener: (context, state) {},
      child: _homeView(),
    );
  }

  Widget _homeView() => BlocBuilder<HomeBloc, HomeState>(builder: (context, state) {
        final bloc = BlocProvider.of<HomeBloc>(context);
        return Scaffold(
          body: Container(
            color: Colors.white,
            child: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  HomeTabHeaderWidget(
                    actionTap: (HeaderActionType type) {
                      _headerActionEvent(type);
                    },
                  ),
                  Expanded(
                      child: ListView.builder(
                          itemCount: bloc.modelData?.totalCourseLesson,
                          scrollDirection: Axis.horizontal,
                          itemBuilder: (BuildContext context, int index) {
                            CourseCourseLessons? data = bloc.modelData?.courseLessons?[index];
                            if (data?.courseType == 5) {
                              //彩蛋
                              return GestureDetector(
                                onTap: () {
                                  if (data!.lock!) {
                                    return;
                                  }
                                  showToast('点击事件');
                                },
                                child: HomeBoundsItem(
                                  imageUrl: data?.coverUrl,
                                ),
                              );
                            } else {
                              return GestureDetector(
                                onTap: () {
                                  if (data!.lock!) {
                                    return;
                                  }
                                  showToast('点击事件');
                                },
                                child: HomeVideoItem(
                                  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: Colors.blue,
                              borderRadius: BorderRadius.circular(14.5.r),
                            ),
                            padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 24.w),
                            child: Text(
                              '${(bloc.modelData?.nowCourseLesson)}/${bloc.modelData?.totalCourseLesson}',
                              style: TextStyle(color: Colors.white, fontSize: 12.sp),
                            ),
                          ),
                          Image.asset(
                            'blue-positive'.assetPng,
                            height: 47.h,
                            width: 80.w,
                            // color: Colors.red,
                          ),
                        ],
                      ),
                    ),
                  )
                ],
              ),
            ),
          ),
        );
      });
}