chore: apply newest iconica linter version

This commit is contained in:
Freek van de Ven 2024-06-06 09:19:19 +02:00 committed by Freek van de Ven
parent 586174c264
commit be6784a3db
15 changed files with 497 additions and 643 deletions

View file

@ -1,29 +1,9 @@
# This file configures the analyzer, which statically analyzes Dart code to include: package:flutter_iconica_analysis/analysis_options.yaml
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.
# The following line activates a set of recommended lints for Flutter apps, # Possible to overwrite the rules from the package
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml analyzer:
exclude:
linter: linter:
# The lint rules applied to this project can be customized in the rules:
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at
# https://dart-lang.github.io/linter/lints/index.html.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options

View file

@ -2,8 +2,8 @@
// //
// SPDX-License-Identifier: BSD-3-Clause // SPDX-License-Identifier: BSD-3-Clause
import 'package:flutter/material.dart'; import "package:flutter/material.dart";
import 'package:flutter_dialogs/flutter_dialogs.dart'; import "package:flutter_dialogs/flutter_dialogs.dart";
void main() { void main() {
runApp(const DialogDemoApp()); runApp(const DialogDemoApp());
@ -13,24 +13,20 @@ class DialogDemoApp extends StatelessWidget {
const DialogDemoApp({super.key}); const DialogDemoApp({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) => MaterialApp(
return MaterialApp( title: "Flutter Dialogs demo",
title: 'Flutter Dialogs demo', theme: ThemeData(
theme: ThemeData( primarySwatch: Colors.blue,
primarySwatch: Colors.blue, ),
), home: const DialogDemoPage(title: "Flutter Dialogs demo"),
home: const DialogDemoPage(title: 'Flutter Dialogs demo'), builder: (context, child) => BottomAlertDialogConfig(
builder: (context, child) {
return BottomAlertDialogConfig(
child: child ?? const SizedBox.shrink(), child: child ?? const SizedBox.shrink(),
); ),
}, );
);
}
} }
class DialogDemoPage extends StatefulWidget { class DialogDemoPage extends StatefulWidget {
const DialogDemoPage({super.key, required this.title}); const DialogDemoPage({required this.title, super.key});
final String title; final String title;
@ -45,34 +41,32 @@ class _DialogDemoPageState extends State<DialogDemoPage> {
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) => PopUpParent(
return PopUpParent( child: Scaffold(
child: Scaffold( appBar: AppBar(
appBar: AppBar( title: Text(widget.title),
title: Text(widget.title), ),
), body: Center(
body: Center( child: Column(
child: Column( mainAxisAlignment: MainAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
children: <Widget>[ const Spacer(
const Spacer( flex: 3,
flex: 3, ),
), ElevatedButton(
ElevatedButton( onPressed: () {
onPressed: () { PopUpService.instance.showIconText("test");
PopUpService.instance.showIconText('test'); },
}, child: const Text("Show popup"),
child: const Text('Show popup'), ),
), const Spacer(),
const Spacer(), ElevatedButton(
ElevatedButton( onPressed: () async => DialogService.instance.showDialog(
onPressed: () {
DialogService.instance.showDialog(
context: context, context: context,
builder: (_) => IconicaAlertDialog.multiButton( builder: (_) => IconicaAlertDialog.multiButton(
closeButton: true, closeButton: true,
title: 'title', title: "title",
body: 'body', body: "body",
iconButton: (context, onPressed) => IconButton( iconButton: (context, onPressed) => IconButton(
onPressed: onPressed, onPressed: onPressed,
icon: const Icon(Icons.dangerous), icon: const Icon(Icons.dangerous),
@ -80,7 +74,7 @@ class _DialogDemoPageState extends State<DialogDemoPage> {
primaryButton: (onPressed, child, context) => primaryButton: (onPressed, child, context) =>
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
debugPrint('custom button'); debugPrint("custom button");
onPressed.call(); onPressed.call();
}, },
child: child, child: child,
@ -88,355 +82,315 @@ class _DialogDemoPageState extends State<DialogDemoPage> {
buttons: [ buttons: [
AlertDialogAction( AlertDialogAction(
primary: true, primary: true,
text: 'test', text: "test",
onPressed: () { onPressed: () {
debugPrint('test'); debugPrint("test");
}, },
), ),
AlertDialogAction( AlertDialogAction(
secondary: true, secondary: true,
text: 'test', text: "test",
onPressed: () { onPressed: () {
debugPrint('test'); debugPrint("test");
}, },
), ),
], ],
), ),
); ),
}, child: const Text("Show dialog"),
child: const Text('Show dialog'), ),
), const Spacer(
const Spacer( flex: 3,
flex: 3, ),
), ElevatedButton(
ElevatedButton( onPressed: () async => showDialog(
onPressed: () {
showDialog(
context: context, context: context,
builder: (context) { builder: (context) => BottomAlertDialog.singleButton(
return BottomAlertDialog.singleButton( closeButton: true,
closeButton: true, title: const Text("Confirm"),
title: const Text('Confirm'), body: const Text(
body: const Text( "Click the button to dismiss",
'Click the button to dismiss', ),
), buttonText: "Ok",
buttonText: 'Ok', onPressed: () {
onPressed: () { Navigator.pop(context);
Navigator.pop(context); },
}, ),
); ),
}, child: const Text("BottomAlertDialog.singleButton"),
); ),
}, Container(
child: const Text('BottomAlertDialog.singleButton'), height: 10,
), ),
Container( ElevatedButton(
height: 10, onPressed: () async => showDialog(
),
ElevatedButton(
onPressed: () {
showDialog(
context: context, context: context,
builder: (context) { builder: (context) => BottomAlertDialog.multiButton(
return BottomAlertDialog.multiButton( title: const Text("Favorite Color"),
title: const Text('Favorite Color'), body: const Text(
body: const Text( "Choose your favorite color",
'Choose your favorite color', ),
buttons: [
BottomAlertDialogAction(
text: "Red",
onPressed: () {
Navigator.pop(context);
},
buttonType: ButtonType.primary,
), ),
buttons: [ BottomAlertDialogAction(
BottomAlertDialogAction( text: "Green",
text: 'Red', onPressed: () {
onPressed: () { Navigator.pop(context);
Navigator.pop(context); },
}, buttonType: ButtonType.primary,
buttonType: ButtonType.primary, ),
), BottomAlertDialogAction(
BottomAlertDialogAction( text: "Blue",
text: 'Green', onPressed: () {
onPressed: () { Navigator.pop(context);
Navigator.pop(context); },
}, buttonType: ButtonType.primary,
buttonType: ButtonType.primary, ),
), BottomAlertDialogAction(
BottomAlertDialogAction( text: "Yellow",
text: 'Blue', onPressed: () {
onPressed: () { Navigator.pop(context);
Navigator.pop(context); },
}, buttonType: ButtonType.primary,
buttonType: ButtonType.primary, ),
), ],
BottomAlertDialogAction( ),
text: 'Yellow', ),
onPressed: () { child: const Text("BottomAlertDialog.multiButton"),
Navigator.pop(context); ),
}, Container(
buttonType: ButtonType.primary, height: 10,
), ),
], ElevatedButton(
); onPressed: () async => showDialog(
},
);
},
child: const Text('BottomAlertDialog.multiButton'),
),
Container(
height: 10,
),
ElevatedButton(
onPressed: () {
showDialog(
context: context, context: context,
builder: (context) { builder: (context) => BottomAlertDialog.singleButtonIcon(
return BottomAlertDialog.singleButtonIcon( closeButton: true,
closeButton: true, title: const Text("Confirm"),
title: const Text('Confirm'), body: const Text(
body: const Text( "Click the button to dismiss",
'Click the button to dismiss', ),
), icon: const Icon(
icon: const Icon( Icons.info,
Icons.info, color: Colors.blue,
color: Colors.blue, ),
), buttonText: "Ok",
buttonText: 'Ok', onPressed: () {
onPressed: () { Navigator.pop(context);
Navigator.pop(context); },
}, ),
); ),
}, child: const Text("BottomAlertDialog.singleButtonIcon"),
); ),
}, Container(
child: const Text('BottomAlertDialog.singleButtonIcon'), height: 10,
), ),
Container( ElevatedButton(
height: 10, onPressed: () async => showDialog(
),
ElevatedButton(
onPressed: () {
showDialog(
context: context, context: context,
builder: (context) { builder: (context) => BottomAlertDialog.icon(
return BottomAlertDialog.icon( closeButton: true,
closeButton: true, title: const Text("Favorite Car"),
title: const Text('Favorite Car'), body: const Text(
body: const Text( "Choose your favorite car brand",
'Choose your favorite car brand', ),
icon: const Icon(
Icons.car_rental_sharp,
),
buttons: [
ElevatedButton(
onPressed: () {
Navigator.pop(context);
},
child: const Text("BMW"),
), ),
icon: const Icon( ElevatedButton(
Icons.car_rental_sharp, onPressed: () {
Navigator.pop(context);
},
child: const Text("Opel"),
), ),
buttons: [ ElevatedButton(
ElevatedButton( onPressed: () {
onPressed: () { Navigator.pop(context);
Navigator.pop(context); },
}, child: const Text("Mercedes"),
child: const Text('BMW'), ),
), ElevatedButton(
ElevatedButton( onPressed: () {
onPressed: () { Navigator.pop(context);
Navigator.pop(context); },
}, child: const Text("Kia"),
child: const Text('Opel'), ),
), ElevatedButton(
ElevatedButton( onPressed: () {
onPressed: () { Navigator.pop(context);
Navigator.pop(context); },
}, child: const Text("Skoda"),
child: const Text('Mercedes'), ),
), ],
ElevatedButton( ),
onPressed: () { ),
Navigator.pop(context); child: const Text("BottomAlertDialog.icon"),
}, ),
child: const Text('Kia'), Container(
), height: 10,
ElevatedButton( ),
onPressed: () { ElevatedButton(
Navigator.pop(context); onPressed: () async => showDialog(
},
child: const Text('Skoda'),
),
],
);
},
);
},
child: const Text('BottomAlertDialog.icon'),
),
Container(
height: 10,
),
ElevatedButton(
onPressed: () {
showDialog(
context: context, context: context,
builder: (context) { builder: (context) => BottomAlertDialog.yesOrNo(
return BottomAlertDialog.yesOrNo( title: const Text("Question"),
title: const Text('Question'), body: const Text(
body: const Text( "Do you really wanna do this?",
'Do you really wanna do this?', ),
), onYes: () {
onYes: () { Navigator.of(context).pop();
Navigator.of(context).pop(); },
}, onNo: () {
onNo: () { Navigator.of(context).pop();
Navigator.of(context).pop(); },
}, ),
); ),
}, child: const Text("BottomAlertDialog.yesOrNo"),
); ),
}, Container(
child: const Text('BottomAlertDialog.yesOrNo'), height: 10,
), ),
Container( ElevatedButton(
height: 10, onPressed: () async => showDialog(
),
ElevatedButton(
onPressed: () {
showDialog(
context: context, context: context,
builder: (context) { builder: (context) => BottomAlertDialog.yesOrNoIcon(
return BottomAlertDialog.yesOrNoIcon( title: const Text("Question"),
title: const Text('Question'), body: const Text(
body: const Text( "Do you really wanna do this?",
'Do you really wanna do this?', ),
), onYes: () {
onYes: () { Navigator.of(context).pop();
Navigator.of(context).pop(); },
}, onNo: () {
onNo: () { Navigator.of(context).pop();
Navigator.of(context).pop(); },
}, icon: const Icon(
icon: const Icon( Icons.question_mark_sharp,
Icons.question_mark_sharp, color: Colors.red,
color: Colors.red, ),
), ),
); ),
}, child: const Text("BottomAlertDialog.yesOrNoIcon"),
); ),
}, Container(
child: const Text('BottomAlertDialog.yesOrNoIcon'), height: 10,
), ),
Container( ElevatedButton(
height: 10, onPressed: () async => showDialog(
),
ElevatedButton(
onPressed: () {
showDialog(
context: context, context: context,
builder: (context) { builder: (context) => BottomAlertDialog.custom(
return BottomAlertDialog.custom( closeButton: true,
closeButton: true, body: SizedBox(
body: SizedBox( height: 100,
height: 100, child: Column(
child: Column( children: [
children: [ const Text("Custom Dialog with PageView"),
const Text('Custom Dialog with PageView'), Flexible(
Flexible( child: PageView(
child: PageView( children: const [
children: [ Center(child: Text("Page 1")),
Container( Center(child: Text("Page 2")),
child: Center(child: Text("Page 3")),
const Center(child: Text('Page 1')), ],
), ),
Container( ),
child: ],
const Center(child: Text('Page 2')), ),
), ),
Container( buttons: [
child: ElevatedButton(
const Center(child: Text('Page 3')), onPressed: () {
), Navigator.of(context).pop();
], },
), child: const Text("Ok"),
),
],
),
),
child: const Text("BottomAlertDialog.custom"),
),
Container(
height: 10,
),
ElevatedButton(
child: const Text("Multiple chained dialogs"),
onPressed: () async => showDialog(
context: context,
builder: (context) => BottomAlertDialog.yesOrNo(
closeButton: true,
title: const Text("Pokémon"),
body: const Text(
"Do you want to choose your starter Pokémon?",
),
onYes: () {
Navigator.pop(context);
showDialog(
context: context,
builder: (context) => BottomAlertDialog.multiButton(
title: const Text("Starter Pokémon"),
body: const Text("Choose a starter Pokémon"),
buttons: [
BottomAlertDialogAction(
text: "Turtwig",
buttonType: ButtonType.secondary,
onPressed: () =>
_showDoneDialog(context, "Turtwig"),
),
BottomAlertDialogAction(
text: "Chimchar",
buttonType: ButtonType.secondary,
onPressed: () =>
_showDoneDialog(context, "Chimchar"),
),
BottomAlertDialogAction(
text: "Piplup",
buttonType: ButtonType.secondary,
onPressed: () =>
_showDoneDialog(context, "Piplup"),
), ),
], ],
), ),
), );
buttons: [ },
ElevatedButton( onNo: () => Navigator.pop(context),
onPressed: () { ),
Navigator.of(context).pop(); ),
}, ),
child: const Text('Ok'), const Spacer(
), flex: 3,
], ),
); ],
}, ),
);
},
child: const Text('BottomAlertDialog.custom'),
),
Container(
height: 10,
),
ElevatedButton(
child: const Text('Multiple chained dialogs'),
onPressed: () {
showDialog(
context: context,
builder: (context) {
return BottomAlertDialog.yesOrNo(
closeButton: true,
title: const Text('Pokémon'),
body: const Text(
'Do you want to choose your starter Pokémon?',
),
onYes: () {
Navigator.pop(context);
showDialog(
context: context,
builder: (context) => BottomAlertDialog.multiButton(
title: const Text('Starter Pokémon'),
body: const Text('Choose a starter Pokémon'),
buttons: [
BottomAlertDialogAction(
text: 'Turtwig',
buttonType: ButtonType.secondary,
onPressed: () =>
_showDoneDialog(context, 'Turtwig'),
),
BottomAlertDialogAction(
text: 'Chimchar',
buttonType: ButtonType.secondary,
onPressed: () =>
_showDoneDialog(context, 'Chimchar'),
),
BottomAlertDialogAction(
text: 'Piplup',
buttonType: ButtonType.secondary,
onPressed: () =>
_showDoneDialog(context, 'Piplup'),
),
],
),
);
},
onNo: () => Navigator.pop(context),
);
},
);
},
),
],
), ),
), ),
), );
);
}
void _showDoneDialog(BuildContext context, String name) { Future<void> _showDoneDialog(BuildContext context, String name) async {
Navigator.pop(context); Navigator.pop(context);
showDialog( await showDialog(
context: context, context: context,
builder: (context) => BottomAlertDialog.icon( builder: (context) => BottomAlertDialog.icon(
title: const Text('Good choice!'), title: const Text("Good choice!"),
icon: Icon( icon: Icon(
Icons.catching_pokemon, Icons.catching_pokemon,
color: Color(name.hashCode).withAlpha(255), color: Color(name.hashCode).withAlpha(255),
), ),
body: Text('You chose $name to be your starter Pokémon.'), body: Text("You chose $name to be your starter Pokémon."),
buttons: [ buttons: const [
const CloseButton( CloseButton(
color: Colors.green, color: Colors.green,
), ),
], ],

View file

@ -1,93 +1,25 @@
name: example name: example
description: A new Flutter project. description: A new Flutter project.
# The following line prevents the package from being accidentally published to
# pub.dev using `flutter pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
version: 1.0.0+1 version: 1.0.0+1
environment: environment:
sdk: '>=2.18.2 <3.0.0' sdk: '>=2.18.2 <3.0.0'
# Dependencies specify other packages that your package needs in order to work.
# To automatically upgrade your package dependencies to the latest versions
# consider running `flutter pub upgrade --major-versions`. Alternatively,
# dependencies can be manually updated by changing the version numbers below to
# the latest version available on pub.dev. To see which dependencies have newer
# versions available, run `flutter pub outdated`.
dependencies: dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
flutter_dialogs: flutter_dialogs:
path: ../ path: ../
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
sdk: flutter sdk: flutter
flutter_iconica_analysis:
git:
url: https://github.com/Iconica-Development/flutter_iconica_analysis
ref: 7.0.0
# The "flutter_lints" package below contains a set of recommended lints to
# encourage good coding practices. The lint set provided by the package is
# activated in the `analysis_options.yaml` file located at the root of your
# package. See that file for information about deactivating specific lint
# rules and activating additional ones.
flutter_lints: ^2.0.0
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter packages.
flutter: flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true uses-material-design: true
# To add assets to your application, add an assets section, like this:
# assets:
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware
# For details regarding adding assets from package dependencies, see
# https://flutter.dev/assets-and-images/#from-packages
# To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages

View file

@ -9,26 +9,25 @@
// gestures. You can also use WidgetTester to find child widgets in the widget // gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct. // tree, read text, and verify that the values of widget properties are correct.
import 'package:flutter/material.dart'; import "package:example/main.dart";
import 'package:flutter_test/flutter_test.dart'; import "package:flutter/material.dart";
import "package:flutter_test/flutter_test.dart";
import 'package:example/main.dart';
void main() { void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async { testWidgets("Counter increments smoke test", (WidgetTester tester) async {
// Build our app and trigger a frame. // Build our app and trigger a frame.
await tester.pumpWidget(const DialogDemoApp()); await tester.pumpWidget(const DialogDemoApp());
// Verify that our counter starts at 0. // Verify that our counter starts at 0.
expect(find.text('0'), findsOneWidget); expect(find.text("0"), findsOneWidget);
expect(find.text('1'), findsNothing); expect(find.text("1"), findsNothing);
// Tap the '+' icon and trigger a frame. // Tap the '+' icon and trigger a frame.
await tester.tap(find.byIcon(Icons.add)); await tester.tap(find.byIcon(Icons.add));
await tester.pump(); await tester.pump();
// Verify that our counter has incremented. // Verify that our counter has incremented.
expect(find.text('0'), findsNothing); expect(find.text("0"), findsNothing);
expect(find.text('1'), findsOneWidget); expect(find.text("1"), findsOneWidget);
}); });
} }

View file

@ -4,9 +4,9 @@
/// ///
library flutter_dialogs; library flutter_dialogs;
export './src/alert_dialogs.dart'; export "./src/alert_dialogs.dart";
export './src/dialogs.dart'; export "./src/bottom_alert_dialog.dart";
export './src/popup_parent.dart'; export "./src/bottom_alert_dialog_config.dart";
export './src/popup_service.dart'; export "./src/dialogs.dart";
export './src/bottom_alert_dialog_config.dart'; export "./src/popup_parent.dart";
export './src/bottom_alert_dialog.dart'; export "./src/popup_service.dart";

View file

@ -2,7 +2,7 @@
// //
// SPDX-License-Identifier: BSD-3-Clause // SPDX-License-Identifier: BSD-3-Clause
import 'package:flutter/material.dart'; import "package:flutter/material.dart";
class AlertDialogAction { class AlertDialogAction {
AlertDialogAction({ AlertDialogAction({
@ -256,8 +256,8 @@ class IconicaAlertDialog extends StatelessWidget {
bool otherSecondary, bool otherSecondary,
VoidCallback onYes, VoidCallback onYes,
VoidCallback onNo, { VoidCallback onNo, {
String no = 'No', String no = "No",
String yes = 'Yes', String yes = "Yes",
}) => }) =>
<AlertDialogAction>[ <AlertDialogAction>[
if (focusYes) ...[ if (focusYes) ...[

View file

@ -2,16 +2,16 @@
// //
// SPDX-License-Identifier: BSD-3-Clause // SPDX-License-Identifier: BSD-3-Clause
import 'package:flutter/material.dart'; import "package:flutter/material.dart";
import 'package:flutter_dialogs/src/bottom_alert_dialog_config.dart'; import "package:flutter_dialogs/src/bottom_alert_dialog_config.dart";
class BottomAlertDialogAction extends StatelessWidget { class BottomAlertDialogAction extends StatelessWidget {
const BottomAlertDialogAction({ const BottomAlertDialogAction({
required this.text, required this.text,
required this.onPressed, required this.onPressed,
this.buttonType = ButtonType.tertiary, this.buttonType = ButtonType.tertiary,
Key? key, super.key,
}) : super(key: key); });
final String text; final String text;
final ButtonType buttonType; final ButtonType buttonType;
final VoidCallback onPressed; final VoidCallback onPressed;
@ -21,9 +21,9 @@ class BottomAlertDialogAction extends StatelessWidget {
var config = BottomAlertDialogConfig.of(context); var config = BottomAlertDialogConfig.of(context);
var buttonBuilder = config.buttonBuilder; var buttonBuilder = config.buttonBuilder;
var translatedText = text; var translatedText = text;
if (text == 'shell.alertdialog.button.yes') { if (text == "shell.alertdialog.button.yes") {
translatedText = config.yesText; translatedText = config.yesText;
} else if (text == 'shell.alertdialog.button.no') { } else if (text == "shell.alertdialog.button.no") {
translatedText = config.noText; translatedText = config.noText;
} }
return buttonBuilder.call( return buttonBuilder.call(
@ -41,14 +41,13 @@ class BottomAlertDialog extends StatelessWidget {
required List<Widget> buttons, required List<Widget> buttons,
List<BottomAlertDialogAction>? actions, List<BottomAlertDialogAction>? actions,
bool? closeButton, bool? closeButton,
}) { }) =>
return BottomAlertDialog._( BottomAlertDialog._(
closeButton: closeButton, closeButton: closeButton,
buttons: buttons, buttons: buttons,
actions: actions, actions: actions,
body: (_) => body, body: (_) => body,
); );
}
factory BottomAlertDialog.singleButtonIcon({ factory BottomAlertDialog.singleButtonIcon({
required Widget title, required Widget title,
@ -58,21 +57,20 @@ class BottomAlertDialog extends StatelessWidget {
required VoidCallback onPressed, required VoidCallback onPressed,
ButtonType buttonType = ButtonType.tertiary, ButtonType buttonType = ButtonType.tertiary,
bool? closeButton, bool? closeButton,
}) { }) =>
return BottomAlertDialog.icon( BottomAlertDialog.icon(
closeButton: closeButton, closeButton: closeButton,
title: title, title: title,
icon: icon, icon: icon,
body: body, body: body,
buttons: [ buttons: [
BottomAlertDialogAction( BottomAlertDialogAction(
text: buttonText, text: buttonText,
buttonType: buttonType, buttonType: buttonType,
onPressed: onPressed, onPressed: onPressed,
), ),
], ],
); );
}
factory BottomAlertDialog.yesOrNoIcon({ factory BottomAlertDialog.yesOrNoIcon({
required Widget title, required Widget title,
@ -83,15 +81,14 @@ class BottomAlertDialog extends StatelessWidget {
bool focusYes = true, bool focusYes = true,
bool otherSecondary = false, bool otherSecondary = false,
bool? closeButton, bool? closeButton,
}) { }) =>
return BottomAlertDialog.icon( BottomAlertDialog.icon(
closeButton: closeButton, closeButton: closeButton,
title: title, title: title,
body: body, body: body,
icon: icon, icon: icon,
buttons: _getYesNoDialogButtons(focusYes, otherSecondary, onYes, onNo), buttons: _getYesNoDialogButtons(focusYes, otherSecondary, onYes, onNo),
); );
}
factory BottomAlertDialog.yesOrNo({ factory BottomAlertDialog.yesOrNo({
required Widget title, required Widget title,
@ -101,15 +98,14 @@ class BottomAlertDialog extends StatelessWidget {
bool focusYes = true, bool focusYes = true,
bool otherSecondary = false, bool otherSecondary = false,
bool? closeButton, bool? closeButton,
}) { }) =>
return BottomAlertDialog.multiButton( BottomAlertDialog.multiButton(
closeButton: closeButton, closeButton: closeButton,
title: title, title: title,
body: body, body: body,
buttons: const [], buttons: const [],
actions: _getYesNoDialogButtons(focusYes, otherSecondary, onYes, onNo), actions: _getYesNoDialogButtons(focusYes, otherSecondary, onYes, onNo),
); );
}
factory BottomAlertDialog.icon({ factory BottomAlertDialog.icon({
required Widget title, required Widget title,
@ -118,26 +114,25 @@ class BottomAlertDialog extends StatelessWidget {
required List<Widget> buttons, required List<Widget> buttons,
List<BottomAlertDialogAction>? actions, List<BottomAlertDialogAction>? actions,
bool? closeButton, bool? closeButton,
}) { }) =>
return BottomAlertDialog._( BottomAlertDialog._(
closeButton: closeButton, closeButton: closeButton,
buttons: buttons, buttons: buttons,
actions: actions, actions: actions,
body: (context) => Column( body: (context) => Column(
children: [ children: [
icon, icon,
Padding( Padding(
padding: const EdgeInsets.symmetric(horizontal: 20), padding: const EdgeInsets.symmetric(horizontal: 20),
child: title, child: title,
), ),
Padding( Padding(
padding: const EdgeInsets.only(top: 20, left: 20, right: 20), padding: const EdgeInsets.only(top: 20, left: 20, right: 20),
child: body, child: body,
), ),
], ],
), ),
); );
}
factory BottomAlertDialog.multiButton({ factory BottomAlertDialog.multiButton({
required Widget title, required Widget title,
@ -145,27 +140,26 @@ class BottomAlertDialog extends StatelessWidget {
required List<BottomAlertDialogAction> buttons, required List<BottomAlertDialogAction> buttons,
List<BottomAlertDialogAction>? actions, List<BottomAlertDialogAction>? actions,
bool? closeButton, bool? closeButton,
}) { }) =>
return BottomAlertDialog._( BottomAlertDialog._(
closeButton: closeButton, closeButton: closeButton,
buttons: buttons, buttons: buttons,
actions: actions, actions: actions,
body: (context) => Column( body: (context) => Column(
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(
horizontal: 20, horizontal: 20,
),
child: title,
), ),
child: title, Padding(
), padding: const EdgeInsets.only(top: 20, left: 20, right: 20),
Padding( child: body,
padding: const EdgeInsets.only(top: 20, left: 20, right: 20), ),
child: body, ],
), ),
], );
),
);
}
factory BottomAlertDialog.singleButton({ factory BottomAlertDialog.singleButton({
required Widget title, required Widget title,
required Widget body, required Widget body,
@ -173,20 +167,19 @@ class BottomAlertDialog extends StatelessWidget {
required VoidCallback onPressed, required VoidCallback onPressed,
ButtonType buttonType = ButtonType.tertiary, ButtonType buttonType = ButtonType.tertiary,
bool? closeButton, bool? closeButton,
}) { }) =>
return BottomAlertDialog.multiButton( BottomAlertDialog.multiButton(
closeButton: closeButton, closeButton: closeButton,
title: title, title: title,
body: body, body: body,
buttons: [ buttons: [
BottomAlertDialogAction( BottomAlertDialogAction(
text: buttonText, text: buttonText,
onPressed: onPressed, onPressed: onPressed,
buttonType: buttonType, buttonType: buttonType,
), ),
], ],
); );
}
const BottomAlertDialog._({ const BottomAlertDialog._({
required this.buttons, required this.buttons,
required this.body, required this.body,
@ -203,34 +196,33 @@ class BottomAlertDialog extends StatelessWidget {
bool otherSecondary, bool otherSecondary,
VoidCallback onYes, VoidCallback onYes,
VoidCallback onNo, VoidCallback onNo,
) { ) =>
return <BottomAlertDialogAction>[ <BottomAlertDialogAction>[
if (focusYes) ...[ if (focusYes) ...[
BottomAlertDialogAction(
text: "shell.alertdialog.button.no",
buttonType:
otherSecondary ? ButtonType.secondary : ButtonType.tertiary,
onPressed: onNo,
),
],
BottomAlertDialogAction( BottomAlertDialogAction(
text: 'shell.alertdialog.button.no', text: "shell.alertdialog.button.yes",
buttonType: buttonType: focusYes
otherSecondary ? ButtonType.secondary : ButtonType.tertiary, ? ButtonType.primary
onPressed: onNo, : otherSecondary
? ButtonType.secondary
: ButtonType.tertiary,
onPressed: onYes,
), ),
], if (!focusYes) ...[
BottomAlertDialogAction( BottomAlertDialogAction(
text: 'shell.alertdialog.button.yes', text: "shell.alertdialog.button.no",
buttonType: focusYes buttonType: ButtonType.primary,
? ButtonType.primary onPressed: onNo,
: otherSecondary ),
? ButtonType.secondary ],
: ButtonType.tertiary, ];
onPressed: onYes,
),
if (!focusYes) ...[
BottomAlertDialogAction(
text: 'shell.alertdialog.button.no',
buttonType: ButtonType.primary,
onPressed: onNo,
),
],
];
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

View file

@ -2,7 +2,7 @@
// //
// SPDX-License-Identifier: BSD-3-Clause // SPDX-License-Identifier: BSD-3-Clause
import 'package:flutter/material.dart'; import "package:flutter/material.dart";
enum ButtonType { enum ButtonType {
primary, primary,
@ -27,8 +27,8 @@ class BottomAlertDialogConfig extends InheritedWidget {
required super.child, required super.child,
ButtonBuilder? buttonBuilder, ButtonBuilder? buttonBuilder,
CloseButtonBuilder? closeButtonBuilder, CloseButtonBuilder? closeButtonBuilder,
this.yesText = 'Yes', this.yesText = "Yes",
this.noText = 'No', this.noText = "No",
this.backgroundColor, this.backgroundColor,
super.key, super.key,
}) : _buttonBuilder = buttonBuilder, }) : _buttonBuilder = buttonBuilder,
@ -54,9 +54,9 @@ class BottomAlertDialogConfig extends InheritedWidget {
return ElevatedButton( return ElevatedButton(
style: ButtonStyle( style: ButtonStyle(
backgroundColor: backgroundColor:
MaterialStateProperty.all(theme.colorScheme.primary), WidgetStateProperty.all(theme.colorScheme.primary),
foregroundColor: MaterialStateProperty.all(Colors.black), foregroundColor: WidgetStateProperty.all(Colors.black),
shape: MaterialStateProperty.all( shape: WidgetStateProperty.all(
RoundedRectangleBorder( RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15), borderRadius: BorderRadius.circular(15),
side: BorderSide(color: theme.colorScheme.primary), side: BorderSide(color: theme.colorScheme.primary),
@ -69,9 +69,9 @@ class BottomAlertDialogConfig extends InheritedWidget {
case ButtonType.secondary: case ButtonType.secondary:
return ElevatedButton( return ElevatedButton(
style: ButtonStyle( style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(Colors.white), backgroundColor: WidgetStateProperty.all(Colors.white),
foregroundColor: MaterialStateProperty.all(Colors.black), foregroundColor: WidgetStateProperty.all(Colors.black),
shape: MaterialStateProperty.all( shape: WidgetStateProperty.all(
RoundedRectangleBorder( RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15), borderRadius: BorderRadius.circular(15),
side: BorderSide(color: theme.colorScheme.primary), side: BorderSide(color: theme.colorScheme.primary),
@ -84,10 +84,10 @@ class BottomAlertDialogConfig extends InheritedWidget {
case ButtonType.tertiary: case ButtonType.tertiary:
return ElevatedButton( return ElevatedButton(
style: ButtonStyle( style: ButtonStyle(
shadowColor: MaterialStateProperty.all(Colors.transparent), shadowColor: WidgetStateProperty.all(Colors.transparent),
backgroundColor: MaterialStateProperty.all(Colors.white), backgroundColor: WidgetStateProperty.all(Colors.white),
foregroundColor: MaterialStateProperty.all(Colors.black), foregroundColor: WidgetStateProperty.all(Colors.black),
shape: MaterialStateProperty.all( shape: WidgetStateProperty.all(
RoundedRectangleBorder( RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15), borderRadius: BorderRadius.circular(15),
side: const BorderSide(color: Colors.white), side: const BorderSide(color: Colors.white),
@ -102,21 +102,19 @@ class BottomAlertDialogConfig extends InheritedWidget {
CloseButtonBuilder get closeButtonBuilder => CloseButtonBuilder get closeButtonBuilder =>
_closeButtonBuilder ?? _closeButtonBuilder ??
(context, {required onPressed}) { (context, {required onPressed}) => IconButton(
return IconButton( onPressed: onPressed,
onPressed: onPressed, icon: const Icon(
icon: const Icon( Icons.close,
Icons.close, size: 25,
size: 25, color: Colors.black,
color: Colors.black, ),
), );
);
};
static BottomAlertDialogConfig of(BuildContext context) { static BottomAlertDialogConfig of(BuildContext context) {
var result = var result =
context.dependOnInheritedWidgetOfExactType<BottomAlertDialogConfig>(); context.dependOnInheritedWidgetOfExactType<BottomAlertDialogConfig>();
assert(result != null, 'No BottomAlertDialogConfig found in context'); assert(result != null, "No BottomAlertDialogConfig found in context");
return result!; return result!;
} }

View file

@ -2,7 +2,7 @@
// //
// SPDX-License-Identifier: BSD-3-Clause // SPDX-License-Identifier: BSD-3-Clause
import 'package:flutter/material.dart' as m; import "package:flutter/material.dart" as m;
class DialogService { class DialogService {
static DialogService? _instance; static DialogService? _instance;

View file

@ -2,8 +2,8 @@
// //
// SPDX-License-Identifier: BSD-3-Clause // SPDX-License-Identifier: BSD-3-Clause
import 'package:flutter/material.dart'; import "package:flutter/material.dart";
import 'package:flutter_dialogs/src/popup_data.dart'; import "package:flutter_dialogs/src/popup_data.dart";
class PopUp extends StatelessWidget { class PopUp extends StatelessWidget {
const PopUp({ const PopUp({
@ -18,8 +18,7 @@ class PopUp extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var style = Theme.of(context).textTheme.bodyLarge?.copyWith( var style = Theme.of(context).textTheme.bodyLarge?.copyWith(
color: color: popUpData.textColor ?? Theme.of(context).colorScheme.surface,
popUpData.textColor ?? Theme.of(context).colorScheme.background,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontSize: 14, fontSize: 14,
height: 1.571, height: 1.571,
@ -48,7 +47,7 @@ class PopUp extends StatelessWidget {
child: Padding( child: Padding(
padding: const EdgeInsets.only(left: 20, bottom: 5), padding: const EdgeInsets.only(left: 20, bottom: 5),
child: Text( child: Text(
popUpData.text ?? '', popUpData.text ?? "",
style: style, style: style,
), ),
), ),

View file

@ -2,7 +2,7 @@
// //
// SPDX-License-Identifier: BSD-3-Clause // SPDX-License-Identifier: BSD-3-Clause
import 'package:flutter/material.dart'; import "package:flutter/material.dart";
class PopUpData { class PopUpData {
PopUpData( PopUpData(

View file

@ -2,12 +2,12 @@
// //
// SPDX-License-Identifier: BSD-3-Clause // SPDX-License-Identifier: BSD-3-Clause
import 'dart:collection'; import "dart:collection";
import 'package:flutter/material.dart'; import "package:flutter/material.dart";
import 'package:flutter_dialogs/src/popup.dart'; import "package:flutter_dialogs/src/popup.dart";
import 'package:flutter_dialogs/src/popup_data.dart'; import "package:flutter_dialogs/src/popup_data.dart";
import 'package:flutter_dialogs/src/popup_service.dart'; import "package:flutter_dialogs/src/popup_service.dart";
class PopUpParent extends StatefulWidget { class PopUpParent extends StatefulWidget {
const PopUpParent({required this.child, super.key}); const PopUpParent({required this.child, super.key});

View file

@ -2,9 +2,9 @@
// //
// SPDX-License-Identifier: BSD-3-Clause // SPDX-License-Identifier: BSD-3-Clause
import 'package:flutter/material.dart'; import "package:flutter/material.dart";
import 'package:flutter_dialogs/src/popup_data.dart'; import "package:flutter_dialogs/src/popup_data.dart";
import 'package:flutter_dialogs/src/popup_parent.dart'; import "package:flutter_dialogs/src/popup_parent.dart";
class PopUpService { class PopUpService {
static PopUpService? _instance; static PopUpService? _instance;

View file

@ -17,6 +17,6 @@ dev_dependencies:
flutter_iconica_analysis: flutter_iconica_analysis:
git: git:
url: https://github.com/Iconica-Development/flutter_iconica_analysis url: https://github.com/Iconica-Development/flutter_iconica_analysis
ref: 6.0.0 ref: 7.0.0
flutter: flutter:

View file

@ -2,10 +2,10 @@
// //
// SPDX-License-Identifier: BSD-3-Clause // SPDX-License-Identifier: BSD-3-Clause
import 'package:flutter_test/flutter_test.dart'; import "package:flutter_test/flutter_test.dart";
void main() { void main() {
test('', () { test("", () {
expect(true, true); expect(true, true);
}); });
} }