home_page.dart 5.07 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 '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)..requestData(),
      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);
      // Navigator.of(AppRouter.context).pushNamed(AppRouteName.topicWord);
      // Navigator.of(AppRouter.context).pushNamed(AppRouteName.lookVideo);
      // Navigator.of(AppRouter.context).pushNamed(AppRouteName.voicePic);
      // Navigator.of(AppRouter.context).pushNamed(AppRouteName.voiceWord);
      Navigator.of(AppRouter.context).pushNamed(AppRouteName.voiceAnswer);
    }
  }

  @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: 0,
                        scrollDirection: Axis.horizontal,
                        itemBuilder: (BuildContext context, int index){
                          String? title = bloc.modelData?.courseLessons?[index]?.name;
                          CourseCourseLessons? data = bloc.modelData?.courseLessons?[index];
                          if (data?.courseType == 5) {//彩蛋
                            return HomeBoundsItem(
                              imageUrl: data?.coverUrl,
                            );
                          } else {
                            return 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,
                          ),
                        ],
                      ),
                    ),
                  )
                ],
              ),
            ),
          ),
        );
      });
}