[FEAT] Added snackbar herlper and dialog helper.

This commit is contained in:
2025-05-27 13:21:43 +03:00
parent 5c0a959b62
commit 4faeecf710
9 changed files with 164 additions and 0 deletions

View File

@@ -4,3 +4,5 @@ export 'src/form/form_helper.astromic.dart';
export 'src/loading/loading_helper.astromic.dart';
export 'src/sheet/sheet_helper.astromic.dart';
export 'src/presenting/presenting_helper.astromic.dart';
export 'src/snackbar/snackbar_helper.astromic.dart';
export 'src/dialog/dialog_helper.astromic.dart';

View File

@@ -0,0 +1,59 @@
import 'package:flutter/material.dart';
import './src/models/models.exports.dart';
class AstromicDialogHelper {
/// Show a dialog.
static Future<T?> show<T>(
BuildContext context, {
required Widget contentSection,
Widget? stackedCloseWidget,
AstromicDialogConfiguration configuration = const AstromicDialogConfiguration(),
AstromicDialogStyle style = const AstromicDialogStyle(),
void Function(T?)? onClose,
}) async {
//
return await showDialog<T>(
context: context,
useSafeArea: configuration.safeAreaAware,
builder: (BuildContext _) {
return Container(
margin: style.placement,
//
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Stack(
children: [
Container(
width: (style.width ?? 0) - ((style.placement?.start ?? 0) + (style.placement?.start ?? 0)),
//
padding: style.contentPadding,
decoration: BoxDecoration(
color: style.backgroundColor,
borderRadius: style.radius,
),
child: contentSection,
),
if (stackedCloseWidget != null)
Positioned.directional(
textDirection: style.textDirection,
start: style.closeWidgetPlacement?.start,
end: style.closeWidgetPlacement?.end,
top: style.closeWidgetPlacement?.top,
//
child: stackedCloseWidget,
),
],
),
],
),
],
),
);
});
//
}
}

View File

@@ -0,0 +1,20 @@
class AstromicDialogConfiguration {
//
final bool isCentered;
final bool safeAreaAware;
const AstromicDialogConfiguration({
this.isCentered = true,
this.safeAreaAware = true,
});
//
AstromicDialogConfiguration copyWith({
bool? isCentered,
bool? safeAreaAware,
}) {
return AstromicDialogConfiguration(
isCentered: isCentered ?? this.isCentered,
safeAreaAware: safeAreaAware ?? this.safeAreaAware,
);
}
}

View File

@@ -0,0 +1,2 @@
export './style.model.dart';
export './configuration.model.dart';

View File

@@ -0,0 +1,25 @@
import 'package:flutter/material.dart';
class AstromicDialogStyle {
//
final Color? backgroundColor;
final BorderRadius? radius;
final EdgeInsets? contentPadding;
final double? width;
final double? height;
final TextDirection textDirection;
final EdgeInsetsDirectional? placement;
final EdgeInsetsDirectional? closeWidgetPlacement;
const AstromicDialogStyle({
this.backgroundColor = Colors.white,
this.radius,
this.contentPadding = const EdgeInsets.all(12.0),
this.width = 300,
this.height,
this.textDirection = TextDirection.ltr,
this.placement,
this.closeWidgetPlacement,
});
//
}

View File

@@ -0,0 +1 @@
export './models/models.exports.dart';

View File

@@ -0,0 +1,41 @@
import 'package:flutter_snackbar_plus/flutter_snackbar_plus.dart';
import 'package:flutter/widgets.dart';
class AstromicSnackbarHelper {
static setDefault({
// Style
FlutterSnackBarStyle? style,
// Configuration
FlutterSnackBarConfiguration? configuration,
}) =>
FlutterSnackBar().initialize(configuration: configuration, style: style);
static showTemplated(
BuildContext context, {
// Leading
Widget? leading,
// Main Content
required String title,
String? message,
Widget? content,
// Trailing
Widget? trailing,
// Style
FlutterSnackBarStyle? style,
// Configuration
FlutterSnackBarConfiguration? configuration,
}) =>
WidgetsBinding.instance.addPostFrameCallback((_) {
FlutterSnackBar.showTemplated(context, title: title, leading: leading, message: message, content: content, trailing: trailing, style: style, configuration: configuration);
});
static showCustom(
BuildContext context, {
required Widget child,
// Style
FlutterSnackBarStyle? style = const FlutterSnackBarStyle(),
// Configuration
FlutterSnackBarConfiguration? configuration = const FlutterSnackBarConfiguration(),
}) =>
FlutterSnackBar.showCustom(context, child: child, configuration: configuration, style: style);
}

View File

@@ -144,6 +144,15 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.0.0"
flutter_snackbar_plus:
dependency: "direct main"
description:
path: "."
ref: master
resolved-ref: "74854b6bc8c0073641d3f2b5dae08c911902a6d7"
url: "https://git.micazi.dev/micazi/flutter_snackbar_plus.git"
source: git
version: "1.0.0"
flutter_svg:
dependency: transitive
description:

View File

@@ -21,6 +21,11 @@ dependencies:
##S1 ~ 3rd-party
## Needed for the sheet helper.
provider: ^6.1.2
## Needed for the snackbar helper.
flutter_snackbar_plus:
git:
url: https://git.micazi.dev/micazi/flutter_snackbar_plus.git
ref: master
## Needed for the form helper.
form_controller:
git: