Skip to content

Commit b2d99b6

Browse files
add CustomAlertDialog
1 parent b605986 commit b2d99b6

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import 'package:algorithm_visualizer/core/extensions/navigators.dart';
2+
import 'package:algorithm_visualizer/core/resources/theme_manager.dart';
3+
import 'package:algorithm_visualizer/core/widgets/adaptive/text/adaptive_text.dart';
4+
import 'package:algorithm_visualizer/core/widgets/custom_widgets/custom_divider.dart';
5+
import 'package:flutter/material.dart';
6+
import 'package:flutter_screenutil/flutter_screenutil.dart';
7+
8+
const double _borderRadius = 15;
9+
10+
class ListDialogParameters {
11+
final String text;
12+
final VoidCallback onTap;
13+
final ThemeEnum? color;
14+
ListDialogParameters({
15+
required this.text,
16+
required this.onTap,
17+
this.color,
18+
});
19+
}
20+
21+
class CustomAlertDialog {
22+
final BuildContext context;
23+
CustomAlertDialog(this.context);
24+
25+
Future<bool?> solidDialog(
26+
{required List<ListDialogParameters> parameters, bool barrierDismissible = true}) {
27+
return showDialog<bool>(
28+
context: context,
29+
barrierDismissible: barrierDismissible,
30+
builder: (context) {
31+
return AlertDialog(
32+
contentPadding: const EdgeInsetsDirectional.all(0),
33+
shape: RoundedRectangleBorder(
34+
borderRadius: BorderRadius.circular(_borderRadius.r),
35+
),
36+
content: _SolidContent(parameters),
37+
);
38+
},
39+
);
40+
}
41+
}
42+
43+
class _SolidContent extends StatelessWidget {
44+
const _SolidContent(this.parameters);
45+
final List<ListDialogParameters> parameters;
46+
@override
47+
Widget build(BuildContext context) {
48+
return Column(
49+
mainAxisSize: MainAxisSize.min,
50+
children: [
51+
...List.generate(
52+
parameters.length,
53+
(index) {
54+
final isLast = index == parameters.length - 1;
55+
return Column(
56+
mainAxisSize: MainAxisSize.min,
57+
children: [
58+
InkWell(
59+
borderRadius: index == 0
60+
? BorderRadius.only(
61+
topLeft: Radius.circular(_borderRadius.r),
62+
topRight: Radius.circular(_borderRadius.r),
63+
)
64+
: (isLast
65+
? BorderRadius.only(
66+
bottomLeft: Radius.circular(_borderRadius.r),
67+
bottomRight: Radius.circular(_borderRadius.r),
68+
)
69+
: null),
70+
onTap: () {
71+
parameters[index].onTap();
72+
context.pop();
73+
},
74+
child: SizedBox(
75+
width: double.infinity,
76+
child: Column(
77+
mainAxisSize: MainAxisSize.min,
78+
children: [
79+
Padding(
80+
padding: REdgeInsets.symmetric(vertical: 10),
81+
child: RegularText(parameters[index].text,
82+
color: parameters[index].color ?? ThemeEnum.focusColor),
83+
),
84+
],
85+
),
86+
),
87+
),
88+
if (!isLast) const CustomDivider(withHeight: false, color: ThemeEnum.whiteD4Color),
89+
],
90+
);
91+
},
92+
),
93+
],
94+
);
95+
}
96+
}

0 commit comments

Comments
 (0)