import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; import 'package:hadi_hoda_flutter/core/utils/my_image.dart'; import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_bloc.dart'; import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_state.dart'; import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/bottom_path.dart'; import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/hint_level_widget.dart'; import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/level_widget.dart'; import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/top_path.dart'; class LevelPage extends StatelessWidget { const LevelPage({super.key}); @override Widget build(BuildContext context) { return Scaffold( body: Stack( children: [ SingleChildScrollView( controller: context.read().scrollController, child: Stack( alignment: Alignment.center, children: [ _background(), _topPath(context), _bottomPath(context), ], ), ), _topButtons(context), _hintMission(context) ], ), ); } Widget _hintMission(BuildContext context) { return BlocBuilder( buildWhen: (previous, current) => previous.chooseLevel?.id != current.chooseLevel?.id, builder: (context, state) { if (state.chooseLevel?.id != null) { return Positioned( bottom: MediaQuery .viewPaddingOf(context) .bottom + MySpaces.s10, right: MySpaces.s16, left: MySpaces.s16, child: HintLevelWidget( level: state.chooseLevel ?? LevelEntity(), onTap: (level) => context.read().goToQuestionPage(context, level), ), ); } else { return SizedBox.shrink(); } } ); } Positioned _topButtons(BuildContext context) { return Positioned( left: MySpaces.s16, right: MySpaces.s16, top: MediaQuery.viewPaddingOf(context).top, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ InkWell( onTap: () => context.read().goToHomePage(context), child: MyImage( image: MyAssets.homeButton, ), ), MyImage( image: MyAssets.musicOn, ), ], ), ); } MyImage _background() { return MyImage(image: MyAssets.mapBackground, fit: BoxFit.cover); } Positioned _topPath(BuildContext context) { return Positioned( top: context.heightScreen * 0.16, left: context.widthScreen * 0.15, child: BlocBuilder( builder: (context, state) => Stack( children: [ TopPath( height: 950, width: context.widthScreen * 0.6, ), ...List.generate( context.read().top12LevelList.length, (index) => Positioned( top: context.read().topLocationList[index].top, bottom: context.read().topLocationList[index].bottom, right: context.read().topLocationList[index].right, left: context.read().topLocationList[index].left, child: LevelWidget( level: context.read().top12LevelList[index], type: context.read().getLevelType(index + 9), onTap: (LevelEntity level) {}, ), ), ), ], ), ), ); } Positioned _bottomPath(BuildContext context) { return Positioned( bottom: context.heightScreen * 0.18, left: context.widthScreen * 0.2, child: BlocBuilder( builder: (context, state) => Stack( clipBehavior: Clip.none, children: [ BottomPath( width: context.widthScreen * 0.75, height: context.heightScreen * 0.6, ), ...List.generate( context.read().bottom8LevelList.length, (index) => Positioned( top: context.read().bottomLocationList[index].top, bottom: context.read().bottomLocationList[index].bottom, right: context.read().bottomLocationList[index].right, left: context.read().bottomLocationList[index].left, child: LevelWidget( level: context.read().bottom8LevelList[index], type: context.read().getLevelType(index + 1), onTap: (LevelEntity level) {}, ), ), ), ], ), ), ); } }