Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 29 additions & 12 deletions lib/config/routes/route_app.dart
Original file line number Diff line number Diff line change
@@ -1,20 +1,25 @@
import 'package:algorithm_visualizer/core/helpers/app_bar/app_bar.dart';
import 'package:algorithm_visualizer/core/resources/strings_manager.dart';
import 'package:algorithm_visualizer/core/widgets/adaptive/text/adaptive_text.dart';
import 'package:algorithm_visualizer/features/grid/view/grid_page.dart';
import 'package:algorithm_visualizer/features/base/view/base_page.dart';
import 'package:algorithm_visualizer/features/searching/view/grid_page.dart';
import 'package:algorithm_visualizer/features/sorting/view/sorting_page.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';

class Routes {
static const RouteConfig grid = RouteConfig(
name: 'grid',
static const RouteConfig base = RouteConfig(
name: 'base',
path: '/',
);

// name: 'hashtag',
// path: '/hashtag/:hashtagId',
// pathParamsName: "hashtagId",
// queryParamsName: 'mid',
static const RouteConfig searching = RouteConfig(
name: 'searching',
path: '/searching',
);
static const RouteConfig sorting = RouteConfig(
name: 'sorting',
path: '/sorting',
);
}

class RouteConfig {
Expand All @@ -34,18 +39,30 @@ class RouteConfig {
class AppRoutes {
static final router = GoRouter(
debugLogDiagnostics: true,
initialLocation: Routes.grid.path,
initialLocation: Routes.base.path,
errorBuilder: (context, state) => const _UnknownPage(),
routes: [
ShellRoute(
builder: (context, state, child) {
return child;
},

routes: [

GoRoute(
path: Routes.base.path,
name: Routes.base.name,
builder: (context, state) => const BasePage(),
),
GoRoute(
path: Routes.searching.path,
name: Routes.searching.name,
builder: (context, state) => const SearchingPage(),
),
GoRoute(
path: Routes.grid.path,
name: Routes.grid.name,
builder: (context, state) => const GridPage(),
path: Routes.sorting.path,
name: Routes.sorting.name,
builder: (context, state) => const SortingPage(),
),
],
),
Expand Down
13 changes: 13 additions & 0 deletions lib/core/helpers/random_int.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import 'dart:math';

class CustomRandom {
static List<int> generateList(int maxNum, int length) {
if (length > maxNum + 1) length = maxNum;

List<int> numbers = List<int>.generate(maxNum + 1, (index) => index);

numbers.shuffle(Random());

return numbers.sublist(0, length);
}
}
8 changes: 8 additions & 0 deletions lib/core/helpers/screen_size.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import 'package:flutter/material.dart';

class ScreenSize {
static BuildContext? context;
static initContext(BuildContext? ctx) {
context = ctx;
}
}
7 changes: 7 additions & 0 deletions lib/core/resources/strings_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@ class StringsManager {
static const String unknownPage = "Unknown page";
static const String notInitializeGridYet = "Not initialize grid yet.";
static const String clear = "Clear";
static const String clearAll = "Clear all";
static const String clearPath = "Clear path";
static const String generateMaze = "Generate maze";
static const String searching = "Searching";
static const String sorting = "Sorting";
static const String stop = "Stop";
static const String play = "Play";
static const String reset = "Reset";

}
2 changes: 1 addition & 1 deletion lib/core/widgets/adaptive/text/regular_text.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class RegularText extends _AdaptiveText {
super.fontSize = 16,
super.decoration = TextDecoration.none,
super.fontStyle = FontStyle.normal,
super.color,
super.color = ThemeEnum.focusColor,
super.shadows,
super.maxLines = 2,
super.textAlign,
Expand Down
96 changes: 96 additions & 0 deletions lib/core/widgets/custom_widgets/custom_dialog.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import 'package:algorithm_visualizer/core/extensions/navigators.dart';
import 'package:algorithm_visualizer/core/resources/theme_manager.dart';
import 'package:algorithm_visualizer/core/widgets/adaptive/text/adaptive_text.dart';
import 'package:algorithm_visualizer/core/widgets/custom_widgets/custom_divider.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';

const double _borderRadius = 15;

class ListDialogParameters {
final String text;
final VoidCallback onTap;
final ThemeEnum? color;
ListDialogParameters({
required this.text,
required this.onTap,
this.color,
});
}

class CustomAlertDialog {
final BuildContext context;
CustomAlertDialog(this.context);

Future<bool?> solidDialog(
{required List<ListDialogParameters> parameters, bool barrierDismissible = true}) {
return showDialog<bool>(
context: context,
barrierDismissible: barrierDismissible,
builder: (context) {
return AlertDialog(
contentPadding: const EdgeInsetsDirectional.all(0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(_borderRadius.r),
),
content: _SolidContent(parameters),
);
},
);
}
}

class _SolidContent extends StatelessWidget {
const _SolidContent(this.parameters);
final List<ListDialogParameters> parameters;
@override
Widget build(BuildContext context) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
...List.generate(
parameters.length,
(index) {
final isLast = index == parameters.length - 1;
return Column(
mainAxisSize: MainAxisSize.min,
children: [
InkWell(
borderRadius: index == 0
? BorderRadius.only(
topLeft: Radius.circular(_borderRadius.r),
topRight: Radius.circular(_borderRadius.r),
)
: (isLast
? BorderRadius.only(
bottomLeft: Radius.circular(_borderRadius.r),
bottomRight: Radius.circular(_borderRadius.r),
)
: null),
onTap: () {
parameters[index].onTap();
context.pop();
},
child: SizedBox(
width: double.infinity,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: REdgeInsets.symmetric(vertical: 10),
child: RegularText(parameters[index].text,
color: parameters[index].color ?? ThemeEnum.focusColor),
),
],
),
),
),
if (!isLast) const CustomDivider(withHeight: false, color: ThemeEnum.whiteD4Color),
],
);
},
),
],
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ class CustomRoundedElevatedButton extends StatelessWidget {
final Widget child;
final VoidCallback onPressed;
final bool fitToContent;
final bool smallRounded;
final double roundedRadius;
final double fixedSize;
const CustomRoundedElevatedButton({
super.key,
this.backgroundColor = ThemeEnum.focusColor,
this.shadowColor = ThemeEnum.transparentColor,
this.fitToContent = true,
this.smallRounded = false,
this.roundedRadius = 50,
this.fixedSize = 35,
required this.child,
required this.onPressed,
Expand All @@ -37,7 +37,7 @@ class CustomRoundedElevatedButton extends StatelessWidget {
fixedSize: fitToContent ? Size.fromHeight(fixedSize.r) : null,
padding: EdgeInsets.symmetric(horizontal: 15.r),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(smallRounded ? 10 : 50).r),
borderRadius: BorderRadius.circular(roundedRadius).r),
surfaceTintColor: background,
foregroundColor: context.getColor(ThemeEnum.hintColor),
),
Expand Down
56 changes: 56 additions & 0 deletions lib/features/base/view/base_page.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import 'package:algorithm_visualizer/config/routes/route_app.dart';
import 'package:algorithm_visualizer/core/extensions/navigators.dart';
import 'package:algorithm_visualizer/core/helpers/screen_size.dart';
import 'package:algorithm_visualizer/core/resources/strings_manager.dart';
import 'package:algorithm_visualizer/core/resources/theme_manager.dart';
import 'package:algorithm_visualizer/core/widgets/adaptive/text/adaptive_text.dart';
import 'package:algorithm_visualizer/core/widgets/custom_widgets/custom_rounded_elevated_button.dart';
import 'package:flutter/material.dart';

class BasePage extends StatefulWidget {
const BasePage({super.key});

@override
State<BasePage> createState() => _BasePageState();
}

class _BasePageState extends State<BasePage> {
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) {
ScreenSize.initContext(context);
});
super.initState();
}

@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
CustomRoundedElevatedButton(
roundedRadius: 3,
backgroundColor: ThemeEnum.whiteD5Color,
child: const RegularText(StringsManager.searching),
onPressed: () {
context.pushTo(Routes.searching);
},
),
CustomRoundedElevatedButton(
roundedRadius: 3,
backgroundColor: ThemeEnum.whiteD5Color,
child: const RegularText(StringsManager.sorting),
onPressed: () {
context.pushTo(Routes.sorting);
},
),
],
),
),
),
);
}
}
Loading