Browse Source

add: exit dialog

pull/31/head
AmirrezaChegini 19 hours ago
parent
commit
df33ad3d80
  1. 4
      lib/core/widgets/dialog/about_us_dialog.dart
  2. 103
      lib/core/widgets/dialog/exit_dialog.dart
  3. 4
      lib/core/widgets/dialog/hadith_dialog.dart
  4. 11
      lib/core/widgets/dialog/styles/dialog_background.dart
  5. 81
      lib/core/widgets/dialog/styles/dialog_button.dart
  6. 8
      lib/features/home/presentation/bloc/home_bloc.dart
  7. 34
      lib/features/home/presentation/ui/home_page.dart
  8. 2
      lib/features/question/presentation/bloc/question_bloc.dart

4
lib/core/widgets/about_us_dialog/about_us_dialog.dart → lib/core/widgets/dialog/about_us_dialog.dart

@ -7,7 +7,7 @@ import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart';
import 'package:hadi_hoda_flutter/core/utils/my_localization.dart';
import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart';
import 'package:hadi_hoda_flutter/core/widgets/about_us_dialog/styles/background.dart';
import 'package:hadi_hoda_flutter/core/widgets/dialog/styles/dialog_background.dart';
import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart';
Future<void> showAboutUsDialog({required BuildContext context}) async {
@ -40,7 +40,7 @@ class AboutUsDialog extends StatelessWidget {
child: Stack(
clipBehavior: Clip.none,
children: [
AboutUSDialogBackground(
DialogBackground(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [

103
lib/core/widgets/dialog/exit_dialog.dart

@ -0,0 +1,103 @@
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:go_router/go_router.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart';
import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart';
import 'package:hadi_hoda_flutter/core/widgets/dialog/styles/dialog_background.dart';
import 'package:hadi_hoda_flutter/core/widgets/dialog/styles/dialog_button.dart';
Future<void> showExitDialog({required BuildContext context}) async {
await showDialog(
context: context,
builder: (context) => ExitDialog(),
barrierColor: MyColors.purple.withValues(alpha: 0.82),
useSafeArea: false,
);
}
class ExitDialog extends StatelessWidget {
const ExitDialog({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: MyColors.transparent,
body: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 6, sigmaY: 6),
child: Center(
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: setSize(context: context, mobile: 18, tablet: 160) ?? 0,
),
child: DialogBackground(
height: 260,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'want To Exit?',
style: MYTextStyle.titr0.copyWith(color: Color(0XFF322386)),
),
Text(
'Come back, hero!\nThe adventure isn’t over yet',
style: MYTextStyle.titr3.copyWith(color: Color(0XFF6272A9)),
textAlign: TextAlign.center,
),
Row(
spacing: MySpaces.s20,
children: [
Expanded(
child: DialogButton(
onTap: () {
context.pop();
},
height: 72,
color: Color(0XFFC0BDD3),
child: Text(
'Cancel',
style: MYTextStyle.button2.copyWith(
shadows: [
BoxShadow(
color: Color(0XFF9895AE),
offset: Offset(0, 3.32),
),
],
),
),
),
),
Expanded(
child: DialogButton(
onTap: () {
SystemNavigator.pop();
},
height: 72,
color: Color(0XFFD42427),
child: Text(
'Exit',
style: MYTextStyle.button2.copyWith(
shadows: [
BoxShadow(
color: Color(0XFFC82020),
offset: Offset(0, 3.32),
),
],
),
),
),
),
],
),
],
),
),
),
),
),
);
}
}

4
lib/core/widgets/hadith_dialog/hadith_dialog.dart → lib/core/widgets/dialog/hadith_dialog.dart

@ -6,7 +6,7 @@ import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart';
import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart';
import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart';
import 'package:hadi_hoda_flutter/core/widgets/about_us_dialog/styles/background.dart';
import 'package:hadi_hoda_flutter/core/widgets/dialog/styles/dialog_background.dart';
import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart';
import 'package:hadi_hoda_flutter/features/question/domain/entity/hadith_entity.dart';
@ -45,7 +45,7 @@ class HadithDialog extends StatelessWidget {
child: Stack(
clipBehavior: Clip.none,
children: [
AboutUSDialogBackground(
DialogBackground(
child: ListView.separated(
itemCount: hadith.length,
separatorBuilder: (context, index) => Divider(

11
lib/core/widgets/about_us_dialog/styles/background.dart → lib/core/widgets/dialog/styles/dialog_background.dart

@ -3,10 +3,15 @@ import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart';
import 'package:hadi_hoda_flutter/core/utils/screen_size.dart';
import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart';
class AboutUSDialogBackground extends StatelessWidget {
const AboutUSDialogBackground({super.key, this.child});
class DialogBackground extends StatelessWidget {
const DialogBackground({
super.key,
this.child,
this.height = 525,
});
final Widget? child;
final double height;
@override
Widget build(BuildContext context) {
@ -14,7 +19,7 @@ class AboutUSDialogBackground extends StatelessWidget {
clipper: _BottomShapeClipper(),
child: Container(
width: context.widthScreen,
height: 525,
height: height,
padding: EdgeInsets.symmetric(
vertical: MySpaces.s30,
horizontal: setSize(context: context, mobile: MySpaces.s30, tablet: 60) ?? 0,

81
lib/core/widgets/dialog/styles/dialog_button.dart

@ -0,0 +1,81 @@
import 'package:flutter/material.dart';
class DialogButton extends StatelessWidget {
const DialogButton({
super.key,
this.color,
this.height = 72.0,
this.child,
this.onTap,
});
final Color? color;
final double height;
final Widget? child;
final VoidCallback? onTap;
@override
Widget build(BuildContext context) {
return ClipPath(
clipper: ButtonDialogClipper(),
child: Material(
type: MaterialType.transparency,
child: InkWell(
onTap: onTap,
child: Ink(
height: height,
color: color,
child: Center(
child: child,
),
),
),
),
);
}
}
class ButtonDialogClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
final path = Path();
path.moveTo(size.width * 0.01841077, size.height * 0.8753694);
path.cubicTo(
size.width * 0.05368083,
size.height * 1.03396,
size.width * 0.888405,
size.height * 1.04665,
size.width * 0.961125,
size.height * 0.881918);
path.cubicTo(
size.width * 1.02749,
size.height * 0.732121,
size.width * 1.00029,
size.height * 0.195965,
size.width * 0.943774,
size.height * 0.0891425);
path.cubicTo(
size.width * 0.866786,
size.height * -0.0565611,
size.width * 0.122135,
size.height * -0.00478720,
size.width * 0.0598435,
size.height * 0.109607);
path.cubicTo(
size.width * 0.00172381,
size.height * 0.216429,
size.width * -0.0181157,
size.height * 0.711249,
size.width * 0.01841077,
size.height * 0.8753694);
path.close();
return path;
}
@override
bool shouldReclip(CustomClipper<Path> oldClipper) {
return true;
}
}

8
lib/features/home/presentation/bloc/home_bloc.dart

@ -7,8 +7,10 @@ import 'package:hadi_hoda_flutter/common_ui/resources/my_audios.dart';
import 'package:hadi_hoda_flutter/core/constants/my_constants.dart';
import 'package:hadi_hoda_flutter/core/routers/my_routes.dart';
import 'package:hadi_hoda_flutter/core/services/audio_service.dart';
import 'package:hadi_hoda_flutter/core/utils/context_provider.dart';
import 'package:hadi_hoda_flutter/core/utils/local_storage.dart';
import 'package:hadi_hoda_flutter/core/widgets/about_us_dialog/about_us_dialog.dart';
import 'package:hadi_hoda_flutter/core/widgets/dialog/about_us_dialog.dart';
import 'package:hadi_hoda_flutter/core/widgets/dialog/exit_dialog.dart';
import 'package:hadi_hoda_flutter/features/home/presentation/bloc/home_event.dart';
import 'package:hadi_hoda_flutter/features/home/presentation/bloc/home_state.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/total_data_entity.dart';
@ -81,6 +83,10 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {
await _effectAudioService.play();
}
void onPopInvokedWithResult(bool didPop, dynamic result) {
showExitDialog(context: ContextProvider.context);
}
/// ------------Api Calls------------
FutureOr<void> _getHomeEvent(event, emit) async {}
}

34
lib/features/home/presentation/ui/home_page.dart

@ -15,21 +15,27 @@ class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: DecoratedBox(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(MyAssets.backgroundHome),
fit: BoxFit.cover,
body: PopScope(
canPop: false,
onPopInvokedWithResult: context
.read<HomeBloc>()
.onPopInvokedWithResult,
child: DecoratedBox(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(MyAssets.backgroundHome),
fit: BoxFit.cover,
),
),
),
child: SizedBox.expand(
child: Stack(
alignment: Alignment.center,
children: [
_music(context),
_image(context),
_bottomBtns(context),
],
child: SizedBox.expand(
child: Stack(
alignment: Alignment.center,
children: [
_music(context),
_image(context),
_bottomBtns(context),
],
),
),
),
),

2
lib/features/question/presentation/bloc/question_bloc.dart

@ -12,7 +12,7 @@ import 'package:hadi_hoda_flutter/core/services/audio_service.dart';
import 'package:hadi_hoda_flutter/core/status/base_status.dart';
import 'package:hadi_hoda_flutter/core/utils/context_provider.dart';
import 'package:hadi_hoda_flutter/core/utils/local_storage.dart';
import 'package:hadi_hoda_flutter/core/widgets/hadith_dialog/hadith_dialog.dart';
import 'package:hadi_hoda_flutter/core/widgets/dialog/hadith_dialog.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart';
import 'package:hadi_hoda_flutter/features/question/domain/entity/answer_entity.dart';
import 'package:hadi_hoda_flutter/features/question/domain/entity/question_entity.dart';

Loading…
Cancel
Save