diff --git a/packages/fluorflow/README.md b/packages/fluorflow/README.md index 8551513..7c11ea5 100644 --- a/packages/fluorflow/README.md +++ b/packages/fluorflow/README.md @@ -183,6 +183,16 @@ when used with the fluorflow generator. Dialogs work exactly the same way as bottom sheets, but are shown via the `DialogService` and have another base class. +**Important:** Bottom sheets are always wrapped in a `Scaffold` widget. Thus, +they inherit your styles. `Dialogs` do not have this behavior (by design). +So you may create a full screen dialog and wrap it in a `Scaffold`, or +if you want a small "modal dialog" that has a backdrop and is dismissible +on click of the backdrop, it is also possible. However, you need +to wrap some parts of the content into a `Material` (or Theme provider) +widget to provide some decent default styles. Otherwise, some styles +are weird (e.g. Text Styles are big, red, and underlined). +You can see this in the examples (`SmallDialog`). + ## CLI FluorFlow comes with a CLI that can be used to generate views and other things. diff --git a/packages/fluorflow/example/lib/dialogs/small_dialog.dart b/packages/fluorflow/example/lib/dialogs/small_dialog.dart new file mode 100644 index 0000000..6271b30 --- /dev/null +++ b/packages/fluorflow/example/lib/dialogs/small_dialog.dart @@ -0,0 +1,35 @@ +import 'package:fluorflow/annotations.dart'; +import 'package:fluorflow/fluorflow.dart'; +import 'package:flutter/material.dart'; + +@DialogConfig( + routeBuilder: RouteBuilder.topToBottomFade, defaultBarrierDismissible: true) +final class SmallDialog extends FluorFlowSimpleDialog { + const SmallDialog({super.key, required super.completer}); + + @override + Widget build(BuildContext context) => Center( + child: Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(8), + ), + child: Material( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.min, + children: [ + const Text('Dialog Page'), + const Text('Close via button or click into background'), + const SizedBox(height: 36), + ElevatedButton( + onPressed: completer.confirm, + child: const Text('Close'), + ), + ], + ), + ), + ), + ); +} diff --git a/packages/fluorflow/example/lib/main.dart b/packages/fluorflow/example/lib/main.dart index 7309711..42c25e9 100644 --- a/packages/fluorflow/example/lib/main.dart +++ b/packages/fluorflow/example/lib/main.dart @@ -1,7 +1,7 @@ -import 'package:example/app.locator.dart'; import 'package:fluorflow/fluorflow.dart'; import 'package:flutter/material.dart'; +import 'app.locator.dart'; import 'app.router.dart'; void main() async { @@ -13,17 +13,15 @@ class MyApp extends StatelessWidget { const MyApp({super.key}); @override - Widget build(BuildContext context) { - return MaterialApp( - title: 'FluorFlow Demo', - theme: ThemeData( - colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), - useMaterial3: true, - ), - initialRoute: AppRoute.homeView.path, - onGenerateRoute: onGenerateRoute, - navigatorKey: NavigationService.navigatorKey, - navigatorObservers: [NavigationService.observer()], - ); - } + Widget build(BuildContext context) => MaterialApp( + title: 'FluorFlow Demo', + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), + useMaterial3: true, + ), + initialRoute: AppRoute.homeView.path, + onGenerateRoute: onGenerateRoute, + navigatorKey: NavigationService.navigatorKey, + navigatorObservers: [NavigationService.observer()], + ); } diff --git a/packages/fluorflow/example/lib/views/home/home_view.dart b/packages/fluorflow/example/lib/views/home/home_view.dart index 38b94cd..8e0d32f 100644 --- a/packages/fluorflow/example/lib/views/home/home_view.dart +++ b/packages/fluorflow/example/lib/views/home/home_view.dart @@ -29,6 +29,10 @@ final class HomeView extends FluorFlowView { onPressed: viewModel.showTestDialog, child: const Text('Show Dialog'), ), + ElevatedButton( + onPressed: viewModel.showSmallDialog, + child: const Text('Show Small Dialog'), + ), ], ), ), diff --git a/packages/fluorflow/example/lib/views/home/home_viewmodel.dart b/packages/fluorflow/example/lib/views/home/home_viewmodel.dart index 23cabf5..78bee07 100644 --- a/packages/fluorflow/example/lib/views/home/home_viewmodel.dart +++ b/packages/fluorflow/example/lib/views/home/home_viewmodel.dart @@ -1,7 +1,8 @@ -import 'package:example/app.dialogs.dart'; -import 'package:example/app.router.dart'; import 'package:fluorflow/fluorflow.dart'; +import '../../app.dialogs.dart'; +import '../../app.router.dart'; + final class HomeViewModel extends BaseViewModel { final _dialogService = locator(); final _navService = locator(); @@ -17,5 +18,7 @@ final class HomeViewModel extends BaseViewModel { void showTestDialog() => _dialogService.showRedDialog(elements: []); + void showSmallDialog() => _dialogService.showSmallDialog(); + void goToDetail() => _navService.navigateToDetailView(); } diff --git a/packages/fluorflow/lib/src/annotations/dialog_config.dart b/packages/fluorflow/lib/src/annotations/dialog_config.dart index ad9bdbe..4126cdc 100644 --- a/packages/fluorflow/lib/src/annotations/dialog_config.dart +++ b/packages/fluorflow/lib/src/annotations/dialog_config.dart @@ -5,6 +5,10 @@ class DialogConfig { /// The default barrier (background) color for the dialog. final int defaultBarrierColor; + /// The default value for "barrierDismissible" for the dialog. + /// Defines whether the dialog can be dismissed by tapping the barrier. + final bool defaultBarrierDismissible; + /// The page route builder for the dialog. final Type? pageRouteBuilder; @@ -18,5 +22,6 @@ class DialogConfig { this.pageRouteBuilder, this.routeBuilder = RouteBuilder.noTransition, this.defaultBarrierColor = 0x80000000, + this.defaultBarrierDismissible = false, }); } diff --git a/packages/fluorflow/lib/src/dialogs/dialog_service.dart b/packages/fluorflow/lib/src/dialogs/dialog_service.dart index 21f2c37..d5c8766 100644 --- a/packages/fluorflow/lib/src/dialogs/dialog_service.dart +++ b/packages/fluorflow/lib/src/dialogs/dialog_service.dart @@ -1,3 +1,5 @@ +import 'dart:math'; + import 'package:flutter/widgets.dart'; import 'package:get/get.dart'; @@ -5,16 +7,25 @@ import 'package:get/get.dart'; /// Works with route builders. However, it is recommended to use the /// convenience methods generated by the generator to show a dialog. class DialogService { + final _random = Random(); + /// Returns whether a dialog is currently open. bool get isDialogOpen => Get.isDialogOpen ?? false; /// Shows a dialog and returns a future with the (possible) result. - /// The [barrierColor] parameter can be used to specify a custom barrier color for the dialog. + /// + /// - The [barrierColor] parameter can be used to specify a custom barrier color for the dialog. + /// - The [barrierDismissible] parameter specifies whether the dialog can be dismissed by + /// tapping the barrier (if it is visible). Future showDialog({ required PageRouteBuilder dialogBuilder, Color barrierColor = const Color(0x80000000), + bool barrierDismissible = false, }) => Get.generalDialog( + barrierDismissible: barrierDismissible, + barrierLabel: + barrierDismissible ? 'dialog_${_random.nextInt(1000000)}' : null, pageBuilder: dialogBuilder.pageBuilder, barrierColor: barrierColor, transitionDuration: dialogBuilder.transitionDuration, diff --git a/packages/fluorflow_generator/lib/src/builder/dialog_builder.dart b/packages/fluorflow_generator/lib/src/builder/dialog_builder.dart index b1a293b..9437c52 100644 --- a/packages/fluorflow_generator/lib/src/builder/dialog_builder.dart +++ b/packages/fluorflow_generator/lib/src/builder/dialog_builder.dart @@ -111,6 +111,15 @@ class DialogBuilder implements Builder { CodeExpression(Code( '0x${(configAnnotation?.read('defaultBarrierColor').intValue ?? 0x80000000).toRadixString(16).padLeft(8, '0')}')) ]).code)) + ..optionalParameters.add(Parameter((b) => b + ..name = 'barrierDismissible' + ..type = refer('bool') + ..named = true + ..defaultTo = literalBool(configAnnotation + ?.read('defaultBarrierDismissible') + .boolValue ?? + false) + .code)) ..optionalParameters.addAll(params.map((p) => Parameter((b) => b ..name = p.name ..type = recursiveTypeReference(lib, p.type) @@ -120,6 +129,7 @@ class DialogBuilder implements Builder { ..body = refer('showDialog') .call([], { 'barrierColor': refer('barrierColor'), + 'barrierDismissible': refer('barrierDismissible'), 'dialogBuilder': dialogBuilder.newInstance([], { 'pageBuilder': Method((b) => b ..requiredParameters.add(Parameter((b) => b.name = '_')) diff --git a/packages/fluorflow_generator/test/builder/dialog_builder_test.dart b/packages/fluorflow_generator/test/builder/dialog_builder_test.dart index f43ea7a..f7d7f5d 100644 --- a/packages/fluorflow_generator/test/builder/dialog_builder_test.dart +++ b/packages/fluorflow_generator/test/builder/dialog_builder_test.dart @@ -46,10 +46,13 @@ import 'package:a/a.dart' as _i3; import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { - Future<(bool?, dynamic)> showMyDialog( - {_i2.Color barrierColor = const _i2.Color(0x80000000)}) => + Future<(bool?, dynamic)> showMyDialog({ + _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, + }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -87,10 +90,13 @@ import 'package:a/a.dart' as _i3; import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { - Future<(bool?, void)> showMyDialog( - {_i2.Color barrierColor = const _i2.Color(0x80000000)}) => + Future<(bool?, void)> showMyDialog({ + _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, + }) => showDialog<(bool?, void)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -128,10 +134,13 @@ import 'package:a/a.dart' as _i3; import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { - Future<(bool?, String?)> showMyDialog( - {_i2.Color barrierColor = const _i2.Color(0x80000000)}) => + Future<(bool?, String?)> showMyDialog({ + _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, + }) => showDialog<(bool?, String?)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -175,10 +184,13 @@ import 'package:a/b.dart' as _i2; import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { - Future<(bool?, _i2.DialogResultType?)> showMyDialog( - {_i3.Color barrierColor = const _i3.Color(0x80000000)}) => + Future<(bool?, _i2.DialogResultType?)> showMyDialog({ + _i3.Color barrierColor = const _i3.Color(0x80000000), + bool barrierDismissible = false, + }) => showDialog<(bool?, _i2.DialogResultType?)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -218,10 +230,13 @@ import 'package:a/a.dart' as _i3; import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { - Future<(bool?, dynamic)> showMyDialog( - {_i2.Color barrierColor = const _i2.Color(0x80000000)}) => + Future<(bool?, dynamic)> showMyDialog({ + _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, + }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -259,10 +274,13 @@ import 'package:a/a.dart' as _i3; import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { - Future<(bool?, void)> showMyDialog( - {_i2.Color barrierColor = const _i2.Color(0x80000000)}) => + Future<(bool?, void)> showMyDialog({ + _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, + }) => showDialog<(bool?, void)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -300,10 +318,13 @@ import 'package:a/a.dart' as _i3; import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { - Future<(bool?, String?)> showMyDialog( - {_i2.Color barrierColor = const _i2.Color(0x80000000)}) => + Future<(bool?, String?)> showMyDialog({ + _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, + }) => showDialog<(bool?, String?)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -347,10 +368,13 @@ import 'package:a/b.dart' as _i2; import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { - Future<(bool?, _i2.DialogResultType?)> showMyDialog( - {_i3.Color barrierColor = const _i3.Color(0x80000000)}) => + Future<(bool?, _i2.DialogResultType?)> showMyDialog({ + _i3.Color barrierColor = const _i3.Color(0x80000000), + bool barrierDismissible = false, + }) => showDialog<(bool?, _i2.DialogResultType?)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -393,10 +417,12 @@ import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { Future<(bool?, dynamic)> showMyDialog({ _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, required String pos, }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -440,10 +466,12 @@ import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { Future<(bool?, dynamic)> showMyDialog({ _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, required String? pos, }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -487,10 +515,12 @@ import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { Future<(bool?, dynamic)> showMyDialog({ _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, required String pos, }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -534,10 +564,12 @@ import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { Future<(bool?, dynamic)> showMyDialog({ _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, String? pos, }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -581,10 +613,12 @@ import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { Future<(bool?, dynamic)> showMyDialog({ _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, String pos = 'default', }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -634,10 +668,12 @@ import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { Future<(bool?, dynamic)> showMyDialog({ _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, required _i3.MyDialogRef pos, }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -683,10 +719,12 @@ import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { Future<(bool?, dynamic)> showMyDialog({ _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, required List pos, }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -732,10 +770,12 @@ import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { Future<(bool?, dynamic)> showMyDialog({ _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, required List<_i3.Foobar> pos, }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -787,10 +827,12 @@ import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { Future<(bool?, dynamic)> showMyDialog({ _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, required _i3.Foo<_i3.Bar<_i4.Baz, int>> pos, }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -841,10 +883,12 @@ import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { Future<(bool?, dynamic)> showMyDialog({ _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, required _i3.Foo<_i4.Baz> pos, }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -888,10 +932,12 @@ import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { Future<(bool?, dynamic)> showMyDialog({ _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, required void Function() pos, }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -944,10 +990,12 @@ import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { Future<(bool?, dynamic)> showMyDialog({ _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, required _i3.Foo Function(_i3.Bar<_i4.Baz>) pos, }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -1000,6 +1048,7 @@ import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { Future<(bool?, dynamic)> showMyDialog({ _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, required _i3.Foo Function( _i3.Bar<_i4.Baz>, { required _i3.Foo f, @@ -1008,6 +1057,7 @@ extension Dialogs on _i1.DialogService { }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -1060,6 +1110,7 @@ import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { Future<(bool?, dynamic)> showMyDialog({ _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, required _i3.Foo Function( _i3.Bar<_i4.Baz>, [ _i3.Foo?, @@ -1067,6 +1118,7 @@ extension Dialogs on _i1.DialogService { }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -1117,10 +1169,12 @@ import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { Future<(bool?, dynamic)> showMyDialog({ _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, required _i3.MyCallback pos, }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -1150,6 +1204,7 @@ extension Dialogs on _i1.DialogService { @DialogConfig( defaultBarrierColor: 0x34ff0000, + defaultBarrierDismissible: true, ) class MyDialog extends FluorFlowSimpleDialog { const MyDialog({super.key, required this.completer}); @@ -1167,10 +1222,13 @@ import 'package:a/a.dart' as _i3; import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { - Future<(bool?, dynamic)> showMyDialog( - {_i2.Color barrierColor = const _i2.Color(0x34ff0000)}) => + Future<(bool?, dynamic)> showMyDialog({ + _i2.Color barrierColor = const _i2.Color(0x34ff0000), + bool barrierDismissible = true, + }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, @@ -1221,10 +1279,13 @@ import 'package:a/b.dart' as _i3; import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { - Future<(bool?, dynamic)> showMyDialog( - {_i2.Color barrierColor = const _i2.Color(0x80000000)}) => + Future<(bool?, dynamic)> showMyDialog({ + _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, + }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i3.CustomBuilder( pageBuilder: ( _, @@ -1300,10 +1361,13 @@ import 'package:a/a.dart' as _i3; import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { - Future<(bool?, dynamic)> showMyDialog( - {_i2.Color barrierColor = const _i2.Color(0x80000000)}) => + Future<(bool?, dynamic)> showMyDialog({ + _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, + }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.$resultBuilder( pageBuilder: ( _, @@ -1346,10 +1410,13 @@ import 'package:a/a.dart' as _i3; import 'package:fluorflow/fluorflow.dart' as _i1; extension Dialogs on _i1.DialogService { - Future<(bool?, dynamic)> showMyDialog( - {_i2.Color barrierColor = const _i2.Color(0x80000000)}) => + Future<(bool?, dynamic)> showMyDialog({ + _i2.Color barrierColor = const _i2.Color(0x80000000), + bool barrierDismissible = false, + }) => showDialog<(bool?, dynamic)>( barrierColor: barrierColor, + barrierDismissible: barrierDismissible, dialogBuilder: _i1.NoTransitionPageRouteBuilder( pageBuilder: ( _, diff --git a/pubspec.lock b/pubspec.lock index 96dc219..b8522ec 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -101,10 +101,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" http_parser: dependency: transitive description: @@ -301,10 +301,10 @@ packages: dependency: transitive description: name: web - sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" + sha256: "1d9158c616048c38f712a6646e317a3426da10e884447626167240d45209cbad" url: "https://pub.dev" source: hosted - version: "0.4.2" + version: "0.5.0" yaml: dependency: transitive description: @@ -317,9 +317,9 @@ packages: dependency: transitive description: name: yaml_edit - sha256: "1579d4a0340a83cf9e4d580ea51a16329c916973bffd5bd4b45e911b25d46bfd" + sha256: c566f4f804215d84a7a2c377667f546c6033d5b34b4f9e60dfb09d17c4e97826 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.2.0" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.3.0 <4.0.0"