diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 8e3ca5d..15cada4 100644 --- a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -59,6 +59,7 @@ ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" debugServiceExtension = "internal" + enableGPUValidationMode = "1" allowLocationSimulation = "YES"> diff --git a/example/lib/main.dart b/example/lib/main.dart index fa5288f..65c9001 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -12,6 +12,7 @@ import 'package:quantum_dots/qds_popup.dart'; import 'package:quantum_dots/qds_progress.dart'; import 'package:quantum_dots/qds_spinner.dart'; import 'package:quantum_dots/qds_tooltip.dart'; +import 'package:quantum_dots_app/sample_buttons.dart'; import 'dimmed_loading_test_screen.dart'; import 'empty_states_test_screen.dart'; @@ -51,7 +52,7 @@ class DesignSystemSamplePage extends StatelessWidget { _buildWippyPopupComponents(context) + _buildWippyEmptyStatesComponents(context) + _buildWippySpinnerComponents(context) + - _buildWippyBoxButtonComponents() + + [SampleButtons()] + _buildWippyChipsComponents() + _buildWippyTextFieldComponents() + _buildQdsTextAreaComponents() + @@ -534,58 +535,6 @@ class DesignSystemSamplePage extends StatelessWidget { ]; } - List _buildWippyBoxButtonComponents() { - return [ - Wrap( - children: [ - QdsBoxButton( - initUiState: QdsBoxButtonUiState( - buttonColorType: const QdsBoxButtonColorType.primary(), - buttonLabelType: const QdsBoxButtonLabelType.labelOnly(label: 'Wrap'), - buttonSizeType: QdsBoxButtonSizeType.large()), - ) - ], - ), - QdsBoxButton( - initUiState: QdsBoxButtonUiState( - buttonColorType: const QdsBoxButtonColorType.primary(), - buttonLabelType: const QdsBoxButtonLabelType.labelOnly(label: 'Match'), - buttonSizeType: QdsBoxButtonSizeType.large()), - ), - QdsBoxButton( - initUiState: QdsBoxButtonUiState( - buttonColorType: const QdsBoxButtonColorType.primary(), - buttonLabelType: const QdsBoxButtonLabelType.labelOnly(label: 'debounceTime 200'), - buttonSizeType: QdsBoxButtonSizeType.large(), - debounceTime: 200), - onPressed: () { - debugPrint('debounceTime 200'); - }, - ), - QdsBoxButton( - initUiState: QdsBoxButtonUiState( - buttonColorType: const QdsBoxButtonColorType.primary(), - buttonLabelType: const QdsBoxButtonLabelType.labelOnly(label: 'debounceTime Default(400)'), - buttonSizeType: QdsBoxButtonSizeType.large(), - ), - onPressed: () { - debugPrint('debounceTime Default(400)'); - }, - ), - QdsBoxButton( - initUiState: QdsBoxButtonUiState( - buttonColorType: const QdsBoxButtonColorType.primary(), - buttonLabelType: const QdsBoxButtonLabelType.labelOnly(label: 'debounceTime 800'), - buttonSizeType: QdsBoxButtonSizeType.large(), - debounceTime: 800, - ), - onPressed: () { - debugPrint('debounceTime 800'); - }, - ) - ]; - } - @override Widget build(BuildContext context) { return Scaffold( diff --git a/example/lib/sample_buttons.dart b/example/lib/sample_buttons.dart new file mode 100644 index 0000000..58bc2e7 --- /dev/null +++ b/example/lib/sample_buttons.dart @@ -0,0 +1,125 @@ +import 'package:flutter/widgets.dart'; +import 'package:quantum_dots/qds_button.dart'; + +class SampleButtons extends StatefulWidget { + const SampleButtons({super.key}); + + @override + State createState() => _SampleButtonsState(); +} + +class _SampleButtonsState extends State { + double _progress = 0.4; + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Wrap( + children: [ + QdsBoxButton( + initUiState: QdsBoxButtonUiState( + buttonColorType: const QdsBoxButtonColorType.primary(), + buttonLabelType: const QdsBoxButtonLabelType.labelOnly(label: 'Wrap'), + buttonSizeType: QdsBoxButtonSizeType.large()), + ) + ], + ), + const SizedBox(height: 16), + SizedBox( + width: double.infinity, + child: QdsBoxButton( + initUiState: QdsBoxButtonUiState( + buttonColorType: const QdsBoxButtonColorType.primary(), + buttonLabelType: const QdsBoxButtonLabelType.labelOnly(label: 'Match'), + buttonSizeType: QdsBoxButtonSizeType.large(), + ), + ), + ), + const SizedBox(height: 16), + QdsBoxButton( + initUiState: QdsBoxButtonUiState( + buttonColorType: const QdsBoxButtonColorType.primary(), + buttonLabelType: const QdsBoxButtonLabelType.labelOnly(label: 'debounceTime 200'), + buttonSizeType: QdsBoxButtonSizeType.large(), + debounceTime: 200), + onPressed: () { + debugPrint('debounceTime 200'); + }, + ), + const SizedBox(height: 16), + QdsBoxButton( + initUiState: QdsBoxButtonUiState( + buttonColorType: const QdsBoxButtonColorType.primary(), + buttonLabelType: const QdsBoxButtonLabelType.labelOnly(label: 'debounceTime Default(400)'), + buttonSizeType: QdsBoxButtonSizeType.large(), + ), + onPressed: () { + debugPrint('debounceTime Default(400)'); + }, + ), + const SizedBox(height: 16), + QdsBoxButton( + initUiState: QdsBoxButtonUiState( + buttonColorType: const QdsBoxButtonColorType.primary(), + buttonLabelType: const QdsBoxButtonLabelType.labelOnly(label: 'debounceTime 800'), + buttonSizeType: QdsBoxButtonSizeType.large(), + debounceTime: 800, + ), + onPressed: () { + debugPrint('debounceTime 800'); + }, + ), + const SizedBox(height: 16), + SizedBox( + width: double.infinity, + child: QdsBoxButton( + initUiState: QdsBoxButtonUiState( + buttonColorType: const QdsBoxButtonColorType.primary(), + buttonLabelType: const QdsBoxButtonLabelType.labelOnly(label: 'Progress'), + buttonSizeType: QdsBoxButtonSizeType.large(), + state: QdsBoxButtonState.progress(progress: _progress), + ), + ), + ), + const SizedBox(height: 16), + SizedBox( + width: double.infinity, + child: Row( + children: [ + Expanded( + child: QdsBoxButton( + initUiState: QdsBoxButtonUiState( + buttonColorType: const QdsBoxButtonColorType.secondary(), + buttonLabelType: const QdsBoxButtonLabelType.labelOnly(label: '-10%'), + buttonSizeType: QdsBoxButtonSizeType.medium(), + ), + onPressed: () { + setState(() { + _progress = (_progress - 0.1).clamp(0.0, 1.0); + }); + }, + ), + ), + const SizedBox(width: 8), + Expanded( + child: QdsBoxButton( + initUiState: QdsBoxButtonUiState( + buttonColorType: const QdsBoxButtonColorType.secondary(), + buttonLabelType: const QdsBoxButtonLabelType.labelOnly(label: '+10%'), + buttonSizeType: QdsBoxButtonSizeType.medium(), + ), + onPressed: () { + setState(() { + _progress = (_progress + 0.1).clamp(0.0, 1.0); + }); + }, + ), + ), + ], + ), + ), + ], + ); + } +} diff --git a/example/pubspec.lock b/example/pubspec.lock index 91eb2c7..e2b9f53 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -34,10 +34,10 @@ packages: dependency: transitive description: name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.12.0" bloc: dependency: transitive description: @@ -50,10 +50,10 @@ packages: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" build: dependency: transitive description: @@ -146,10 +146,10 @@ packages: dependency: transitive description: name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" checked_yaml: dependency: transitive description: @@ -162,10 +162,10 @@ packages: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" code_builder: dependency: transitive description: @@ -178,10 +178,10 @@ packages: dependency: transitive description: name: collection - sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.19.0" + version: "1.19.1" convert: dependency: transitive description: @@ -218,10 +218,10 @@ packages: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" ffi: dependency: transitive description: @@ -372,18 +372,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06" + sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec url: "https://pub.dev" source: hosted - version: "10.0.7" + version: "10.0.8" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379" + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 url: "https://pub.dev" source: hosted - version: "3.0.8" + version: "3.0.9" leak_tracker_testing: dependency: transitive description: @@ -420,10 +420,10 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.17" material_color_utilities: dependency: transitive description: @@ -436,10 +436,10 @@ packages: dependency: transitive description: name: meta - sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.16.0" mime: dependency: transitive description: @@ -476,10 +476,10 @@ packages: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" path_parsing: dependency: transitive description: @@ -598,7 +598,7 @@ packages: path: ".." relative: true source: path - version: "0.0.30" + version: "0.0.31" rxdart: dependency: transitive description: @@ -640,10 +640,10 @@ packages: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.10.1" sprintf: dependency: transitive description: @@ -696,18 +696,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377" + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.12.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" stream_transform: dependency: transitive description: @@ -720,10 +720,10 @@ packages: dependency: transitive description: name: string_scanner - sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.1" synchronized: dependency: transitive description: @@ -736,18 +736,18 @@ packages: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" test_api: dependency: transitive description: name: test_api - sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd url: "https://pub.dev" source: hosted - version: "0.7.3" + version: "0.7.4" timing: dependency: transitive description: @@ -808,10 +808,10 @@ packages: dependency: transitive description: name: vm_service - sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b + sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "14.3.1" watcher: dependency: transitive description: @@ -869,5 +869,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.6.0 <4.0.0" + dart: ">=3.7.0-0 <4.0.0" flutter: ">=3.24.0" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index a29d29b..def5112 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: sdk: flutter flutter_bloc: ^8.1.6 cupertino_icons: ^1.0.8 - quantum_dots: ^0.0.30 + quantum_dots: ^0.0.31 dev_dependencies: flutter_test: diff --git a/example/pubspec_overrides.yaml b/example/pubspec_overrides.yaml index 8134cda..508f31e 100644 --- a/example/pubspec_overrides.yaml +++ b/example/pubspec_overrides.yaml @@ -2,4 +2,4 @@ dependency_overrides: quantum_dots: path: ../ - version: 0.0.30 + version: 0.0.31 diff --git a/lib/qds_button.dart b/lib/qds_button.dart index 9aaa337..1c8c3b4 100644 --- a/lib/qds_button.dart +++ b/lib/qds_button.dart @@ -11,3 +11,4 @@ export 'src/button/qds_box_button_color_type.dart'; export 'src/button/qds_box_button_label_type.dart'; export 'src/button/qds_box_button_size_type.dart'; export 'src/button/qds_box_button_ui_state.dart'; +export 'src/button/qds_box_button_state.dart'; diff --git a/lib/src/bottom_sheet/selectable_button_component.dart b/lib/src/bottom_sheet/selectable_button_component.dart index c2bb4e1..d7fc60c 100644 --- a/lib/src/bottom_sheet/selectable_button_component.dart +++ b/lib/src/bottom_sheet/selectable_button_component.dart @@ -30,7 +30,7 @@ class SelectableButtonComponent extends StatelessWidget { child: QdsBoxButton( key: Key('qds_box_button_state_left ${leftEnable ? 'enable' : 'disable'}'), initUiState: QdsBoxButtonUiState( - state: leftEnable ? QdsBoxButtonState.active : QdsBoxButtonState.inactive, + state: leftEnable ? QdsBoxButtonState.active() : QdsBoxButtonState.inactive(), buttonSizeType: QdsBoxButtonSizeType.large(), buttonLabelType: QdsBoxButtonLabelType.labelOnly( label: leftLabel, @@ -46,7 +46,7 @@ class SelectableButtonComponent extends StatelessWidget { child: QdsBoxButton( key: Key('qds_box_button_state_right ${rightEnable ? 'enable' : 'disable'}'), initUiState: QdsBoxButtonUiState( - state: rightEnable ? QdsBoxButtonState.active : QdsBoxButtonState.inactive, + state: rightEnable ? QdsBoxButtonState.active() : QdsBoxButtonState.inactive(), buttonSizeType: QdsBoxButtonSizeType.large(), buttonLabelType: QdsBoxButtonLabelType.labelOnly( label: rightLabel, diff --git a/lib/src/button/button_color_type.dart b/lib/src/button/button_color_type.dart deleted file mode 100644 index 40a7351..0000000 --- a/lib/src/button/button_color_type.dart +++ /dev/null @@ -1,182 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:quantum_dots/qds_foundation.dart'; - -import 'qds_box_button_ui_state.dart'; - -// ignore: deprecated_member_use -sealed class ButtonColorType { - Color getButtonColor(QdsBoxButtonState state); - - Color getTextColor(QdsBoxButtonState state); - - Color getIconColor(QdsBoxButtonState state); - - const factory ButtonColorType.primary() = Primary; - - const factory ButtonColorType.secondary() = Secondary; - - const factory ButtonColorType.tertiary() = Tertiary; - - const factory ButtonColorType.custom({ - required Color activeColor, - required Color pressedColor, - required Color inactiveColor, - required Color loadingColor, - required Color textColor, - required Color inactiveTextColor, - required Color iconColor, - }) = Custom; -} - -// ignore: deprecated_member_use -class Primary implements ButtonColorType { - const Primary(); - - @override - Color getButtonColor(QdsBoxButtonState state) { - switch (state) { - case QdsBoxButtonState.active: - return wippyPink500; - case QdsBoxButtonState.pressed: - return wippyPink700; - case QdsBoxButtonState.inactive: - return wippyGray200; - case QdsBoxButtonState.loading: - return wippyPink500; - } - } - - @override - Color getIconColor(QdsBoxButtonState state) { - if (state == QdsBoxButtonState.inactive) { - return wippyGray400; - } - return wippyWhite; - } - - @override - Color getTextColor(QdsBoxButtonState state) { - if (state == QdsBoxButtonState.inactive) { - return wippyGray400; - } - return wippyWhite; - } -} - -// ignore: deprecated_member_use -class Secondary implements ButtonColorType { - const Secondary(); - - @override - Color getButtonColor(QdsBoxButtonState state) { - switch (state) { - case QdsBoxButtonState.active: - return wippyPink300; - case QdsBoxButtonState.pressed: - return wippyPink400; - case QdsBoxButtonState.inactive: - return wippyGray200; - case QdsBoxButtonState.loading: - return wippyPink300; - } - } - - @override - Color getIconColor(QdsBoxButtonState state) { - if (state == QdsBoxButtonState.inactive) { - return wippyGray400; - } - return wippyPink500; - } - - @override - Color getTextColor(QdsBoxButtonState state) { - if (state == QdsBoxButtonState.inactive) { - return wippyGray400; - } - return wippyPink500; - } -} - -// ignore: deprecated_member_use -class Tertiary implements ButtonColorType { - const Tertiary(); - - @override - Color getButtonColor(QdsBoxButtonState state) { - switch (state) { - case QdsBoxButtonState.active: - return wippyGray200; - case QdsBoxButtonState.pressed: - return wippyGray300; - case QdsBoxButtonState.inactive: - return wippyGray200; - case QdsBoxButtonState.loading: - return wippyGray200; - } - } - - @override - Color getIconColor(QdsBoxButtonState state) { - if (state == QdsBoxButtonState.inactive) { - return wippyGray400; - } - return wippyGray500; - } - - @override - Color getTextColor(QdsBoxButtonState state) { - if (state == QdsBoxButtonState.inactive) { - return wippyGray400; - } - return wippyGray700; - } -} - -// ignore: deprecated_member_use -class Custom implements ButtonColorType { - final Color activeColor; - final Color pressedColor; - final Color inactiveColor; - final Color loadingColor; - final Color textColor; - final Color inactiveTextColor; - final Color iconColor; - - const Custom({ - required this.activeColor, - required this.pressedColor, - required this.inactiveColor, - required this.loadingColor, - required this.textColor, - required this.inactiveTextColor, - required this.iconColor, - }); - - @override - Color getButtonColor(QdsBoxButtonState state) { - switch (state) { - case QdsBoxButtonState.active: - return activeColor; - case QdsBoxButtonState.pressed: - return pressedColor; - case QdsBoxButtonState.inactive: - return inactiveColor; - case QdsBoxButtonState.loading: - return loadingColor; - } - } - - @override - Color getTextColor(QdsBoxButtonState state) { - if (state == QdsBoxButtonState.inactive) { - return inactiveTextColor; - } - return textColor; - } - - @override - Color getIconColor(QdsBoxButtonState state) { - return iconColor; - } -} diff --git a/lib/src/button/extension_widget/bottom_cta_button.dart b/lib/src/button/extension_widget/bottom_cta_button.dart index fc18b84..5b7a6e2 100644 --- a/lib/src/button/extension_widget/bottom_cta_button.dart +++ b/lib/src/button/extension_widget/bottom_cta_button.dart @@ -13,7 +13,7 @@ class BottomCtaButton extends StatelessWidget { QdsBoxButtonState? state, }) : _labelType = labelType, _onPressed = onPressed, - _state = state ?? QdsBoxButtonState.active; + _state = state ?? QdsBoxButtonState.active(); @override Widget build(BuildContext context) { diff --git a/lib/src/button/qds_box_button.dart b/lib/src/button/qds_box_button.dart index 5699b9f..8f6909e 100644 --- a/lib/src/button/qds_box_button.dart +++ b/lib/src/button/qds_box_button.dart @@ -1,17 +1,15 @@ +import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:quantum_dots/qds_button.dart'; +import 'package:quantum_dots/qds_common_widget.dart'; import 'qds_box_button_cubit.dart'; -import 'qds_box_button_label_type.dart'; -import 'qds_box_button_size_type.dart'; -import 'qds_box_button_ui_state.dart'; -import 'package:quantum_dots/qds_common_widget.dart'; -import 'package:flutter/material.dart'; class QdsBoxButton extends StatelessWidget { final QdsBoxButtonUiState initUiState; final void Function()? onPressed; - QdsBoxButton({ + const QdsBoxButton({ required this.initUiState, this.onPressed, super.key, @@ -71,7 +69,7 @@ class QdsBoxButton extends StatelessWidget { Widget _buildButtonContent(QdsBoxButtonUiState uiState) { final buttonLabelType = uiState.buttonLabelType; - if (uiState.state == QdsBoxButtonState.loading) { + if (uiState.state is QdsBoxButtonLoading) { return _buildLoadingIndicator(uiState.iconColor); } @@ -114,27 +112,58 @@ class QdsBoxButton extends StatelessWidget { Widget _buildButtonContainer(BuildContext context, QdsBoxButtonUiState uiState) { return GestureDetector( - onTapCancel: () => context.read().onTapCancel(), - onTapUp: (_) => context.read().onTapUp(), - onTapDown: (_) => context.read().onTapDown(), + onTapCancel: () => BlocProvider.of(context).onTapCancel(), + onTapUp: (_) => BlocProvider.of(context).onTapUp(), + onTapDown: (_) => BlocProvider.of(context).onTapDown(), child: Container( - padding: EdgeInsets.symmetric( - vertical: uiState.verticalPaddingSize, - horizontal: uiState.horizontalPaddingSize, - ), decoration: BoxDecoration( color: uiState.buttonColor, borderRadius: BorderRadius.circular(uiState.radiusSize), ), - child: _buildButtonContent(uiState), + child: Stack( + alignment: Alignment.center, + children: [ + if (uiState.state is QdsBoxButtonProgress) ...[ + Positioned.fill( + child: TweenAnimationBuilder( + duration: const Duration(milliseconds: 300), + curve: Curves.easeInOut, + tween: Tween( + begin: 0, + end: (uiState.state as QdsBoxButtonProgress).progress, + ), + builder: (context, animatedProgress, child) { + return ClipRRect( + borderRadius: BorderRadius.circular(uiState.radiusSize), + child: FractionallySizedBox( + widthFactor: animatedProgress, + alignment: Alignment.centerLeft, + child: Container( + color: uiState.buttonColorType.getProgressColor(uiState.state), + ), + ), + ); + }, + ), + ), + ], + Padding( + padding: EdgeInsets.symmetric( + vertical: uiState.verticalPaddingSize, + horizontal: uiState.horizontalPaddingSize, + ), + child: _buildButtonContent(uiState), + ), + ], + ), ), ); } @override Widget build(BuildContext context) { - return BlocProvider( - create: (context) => QdsBoxButtonCubit( + return BlocProvider.value( + value: QdsBoxButtonCubit( uiState: initUiState, onPressed: onPressed, ), diff --git a/lib/src/button/qds_box_button_color_type.dart b/lib/src/button/qds_box_button_color_type.dart index 16cb056..575c243 100644 --- a/lib/src/button/qds_box_button_color_type.dart +++ b/lib/src/button/qds_box_button_color_type.dart @@ -1,8 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:quantum_dots/qds_button.dart'; import 'package:quantum_dots/qds_foundation.dart'; -import 'qds_box_button_ui_state.dart'; - sealed class QdsBoxButtonColorType { Color getButtonColor(QdsBoxButtonState state); @@ -10,6 +9,8 @@ sealed class QdsBoxButtonColorType { Color getIconColor(QdsBoxButtonState state); + Color getProgressColor(QdsBoxButtonState state); + const factory QdsBoxButtonColorType.primary() = Primary; const factory QdsBoxButtonColorType.secondary() = Secondary; @@ -24,6 +25,7 @@ sealed class QdsBoxButtonColorType { required Color textColor, required Color inactiveTextColor, required Color iconColor, + required Color progressColor, }) = Custom; } @@ -33,20 +35,22 @@ class Primary implements QdsBoxButtonColorType { @override Color getButtonColor(QdsBoxButtonState state) { switch (state) { - case QdsBoxButtonState.active: + case QdsBoxButtonActive(): return wippyPink500; - case QdsBoxButtonState.pressed: + case QdsBoxButtonPressed(): return wippyPink700; - case QdsBoxButtonState.inactive: + case QdsBoxButtonInactive(): return wippyGray200; - case QdsBoxButtonState.loading: + case QdsBoxButtonLoading(): return wippyPink500; + case QdsBoxButtonProgress(): + return wippyPink700; } } @override Color getIconColor(QdsBoxButtonState state) { - if (state == QdsBoxButtonState.inactive) { + if (state is QdsBoxButtonInactive) { return wippyGray400; } return wippyWhite; @@ -54,11 +58,19 @@ class Primary implements QdsBoxButtonColorType { @override Color getTextColor(QdsBoxButtonState state) { - if (state == QdsBoxButtonState.inactive) { + if (state is QdsBoxButtonInactive) { return wippyGray400; } return wippyWhite; } + + @override + Color getProgressColor(QdsBoxButtonState state) { + if (state is QdsBoxButtonProgress) { + return wippyPink500; + } + throw UnimplementedError(); + } } class Secondary implements QdsBoxButtonColorType { @@ -67,20 +79,22 @@ class Secondary implements QdsBoxButtonColorType { @override Color getButtonColor(QdsBoxButtonState state) { switch (state) { - case QdsBoxButtonState.active: + case QdsBoxButtonActive(): return wippyPink300; - case QdsBoxButtonState.pressed: + case QdsBoxButtonPressed(): return wippyPink400; - case QdsBoxButtonState.inactive: + case QdsBoxButtonInactive(): return wippyGray200; - case QdsBoxButtonState.loading: + case QdsBoxButtonLoading(): return wippyPink300; + case QdsBoxButtonProgress(): + throw UnimplementedError(); } } @override Color getIconColor(QdsBoxButtonState state) { - if (state == QdsBoxButtonState.inactive) { + if (state is QdsBoxButtonInactive) { return wippyGray400; } return wippyPink500; @@ -88,11 +102,16 @@ class Secondary implements QdsBoxButtonColorType { @override Color getTextColor(QdsBoxButtonState state) { - if (state == QdsBoxButtonState.inactive) { + if (state is QdsBoxButtonInactive) { return wippyGray400; } return wippyPink500; } + + @override + Color getProgressColor(QdsBoxButtonState state) { + throw UnimplementedError(); + } } class Tertiary implements QdsBoxButtonColorType { @@ -101,20 +120,22 @@ class Tertiary implements QdsBoxButtonColorType { @override Color getButtonColor(QdsBoxButtonState state) { switch (state) { - case QdsBoxButtonState.active: + case QdsBoxButtonActive(): return wippyGray200; - case QdsBoxButtonState.pressed: + case QdsBoxButtonPressed(): return wippyGray300; - case QdsBoxButtonState.inactive: + case QdsBoxButtonInactive(): return wippyGray200; - case QdsBoxButtonState.loading: + case QdsBoxButtonLoading(): return wippyGray200; + case QdsBoxButtonProgress(): + throw UnimplementedError(); } } @override Color getIconColor(QdsBoxButtonState state) { - if (state == QdsBoxButtonState.inactive) { + if (state is QdsBoxButtonInactive) { return wippyGray400; } return wippyGray500; @@ -122,11 +143,16 @@ class Tertiary implements QdsBoxButtonColorType { @override Color getTextColor(QdsBoxButtonState state) { - if (state == QdsBoxButtonState.inactive) { + if (state is QdsBoxButtonInactive) { return wippyGray400; } return wippyGray700; } + + @override + Color getProgressColor(QdsBoxButtonState state) { + throw UnimplementedError(); + } } class Custom implements QdsBoxButtonColorType { @@ -134,6 +160,7 @@ class Custom implements QdsBoxButtonColorType { final Color pressedColor; final Color inactiveColor; final Color loadingColor; + final Color progressColor; final Color textColor; final Color inactiveTextColor; final Color iconColor; @@ -143,6 +170,7 @@ class Custom implements QdsBoxButtonColorType { required this.pressedColor, required this.inactiveColor, required this.loadingColor, + required this.progressColor, required this.textColor, required this.inactiveTextColor, required this.iconColor, @@ -151,20 +179,22 @@ class Custom implements QdsBoxButtonColorType { @override Color getButtonColor(QdsBoxButtonState state) { switch (state) { - case QdsBoxButtonState.active: + case QdsBoxButtonActive(): return activeColor; - case QdsBoxButtonState.pressed: + case QdsBoxButtonPressed(): return pressedColor; - case QdsBoxButtonState.inactive: + case QdsBoxButtonInactive(): return inactiveColor; - case QdsBoxButtonState.loading: + case QdsBoxButtonLoading(): return loadingColor; + case QdsBoxButtonProgress(): + return progressColor; } } @override Color getTextColor(QdsBoxButtonState state) { - if (state == QdsBoxButtonState.inactive) { + if (state is QdsBoxButtonInactive) { return inactiveTextColor; } return textColor; @@ -174,4 +204,9 @@ class Custom implements QdsBoxButtonColorType { Color getIconColor(QdsBoxButtonState state) { return iconColor; } + + @override + Color getProgressColor(QdsBoxButtonState state) { + throw UnimplementedError(); + } } diff --git a/lib/src/button/qds_box_button_cubit.dart b/lib/src/button/qds_box_button_cubit.dart index 6c5a9ee..0ea5ad8 100644 --- a/lib/src/button/qds_box_button_cubit.dart +++ b/lib/src/button/qds_box_button_cubit.dart @@ -1,6 +1,5 @@ import 'package:flutter_bloc/flutter_bloc.dart'; - -import 'qds_box_button_ui_state.dart'; +import 'package:quantum_dots/qds_button.dart'; class QdsBoxButtonCubit extends Cubit { final void Function()? onPressed; @@ -22,9 +21,9 @@ class QdsBoxButtonCubit extends Cubit { void onTapDown() { if (_isDebounceTime()) return; - if (state.enable && state.state == QdsBoxButtonState.active) { + if (state.enable && state.state is QdsBoxButtonActive) { emit(state.copyWith( - state: QdsBoxButtonState.pressed, + state: QdsBoxButtonState.pressed(), )); } } @@ -32,9 +31,9 @@ class QdsBoxButtonCubit extends Cubit { void onTapUp() { if (_isDebounceTime()) return; - if (state.enable && state.state == QdsBoxButtonState.pressed) { + if (state.enable && state.state is QdsBoxButtonPressed) { _lastPressTime = DateTime.now(); - emit(state.copyWith(state: QdsBoxButtonState.active)); + emit(state.copyWith(state: QdsBoxButtonState.active())); onPressed?.call(); } } @@ -42,9 +41,9 @@ class QdsBoxButtonCubit extends Cubit { void onTapCancel() { if (_isDebounceTime()) return; - if (state.enable && state.state == QdsBoxButtonState.pressed) { + if (state.enable && state.state is QdsBoxButtonPressed) { emit(state.copyWith( - state: QdsBoxButtonState.active, + state: QdsBoxButtonState.active(), )); } } diff --git a/lib/src/button/qds_box_button_state.dart b/lib/src/button/qds_box_button_state.dart new file mode 100644 index 0000000..bf1b117 --- /dev/null +++ b/lib/src/button/qds_box_button_state.dart @@ -0,0 +1,16 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'qds_box_button_state.freezed.dart'; + +@freezed +sealed class QdsBoxButtonState with _$QdsBoxButtonState { + const factory QdsBoxButtonState.pressed() = QdsBoxButtonPressed; + + const factory QdsBoxButtonState.inactive() = QdsBoxButtonInactive; + + const factory QdsBoxButtonState.loading() = QdsBoxButtonLoading; + + const factory QdsBoxButtonState.active() = QdsBoxButtonActive; + + const factory QdsBoxButtonState.progress({required double progress}) = QdsBoxButtonProgress; +} diff --git a/lib/src/button/qds_box_button_state.freezed.dart b/lib/src/button/qds_box_button_state.freezed.dart new file mode 100644 index 0000000..e3bfebe --- /dev/null +++ b/lib/src/button/qds_box_button_state.freezed.dart @@ -0,0 +1,753 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'qds_box_button_state.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +/// @nodoc +mixin _$QdsBoxButtonState { + @optionalTypeArgs + TResult when({ + required TResult Function() pressed, + required TResult Function() inactive, + required TResult Function() loading, + required TResult Function() active, + required TResult Function(double progress) progress, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? pressed, + TResult? Function()? inactive, + TResult? Function()? loading, + TResult? Function()? active, + TResult? Function(double progress)? progress, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? pressed, + TResult Function()? inactive, + TResult Function()? loading, + TResult Function()? active, + TResult Function(double progress)? progress, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult map({ + required TResult Function(QdsBoxButtonPressed value) pressed, + required TResult Function(QdsBoxButtonInactive value) inactive, + required TResult Function(QdsBoxButtonLoading value) loading, + required TResult Function(QdsBoxButtonActive value) active, + required TResult Function(QdsBoxButtonProgress value) progress, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(QdsBoxButtonPressed value)? pressed, + TResult? Function(QdsBoxButtonInactive value)? inactive, + TResult? Function(QdsBoxButtonLoading value)? loading, + TResult? Function(QdsBoxButtonActive value)? active, + TResult? Function(QdsBoxButtonProgress value)? progress, + }) => + throw _privateConstructorUsedError; + @optionalTypeArgs + TResult maybeMap({ + TResult Function(QdsBoxButtonPressed value)? pressed, + TResult Function(QdsBoxButtonInactive value)? inactive, + TResult Function(QdsBoxButtonLoading value)? loading, + TResult Function(QdsBoxButtonActive value)? active, + TResult Function(QdsBoxButtonProgress value)? progress, + required TResult orElse(), + }) => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $QdsBoxButtonStateCopyWith<$Res> { + factory $QdsBoxButtonStateCopyWith( + QdsBoxButtonState value, $Res Function(QdsBoxButtonState) then) = + _$QdsBoxButtonStateCopyWithImpl<$Res, QdsBoxButtonState>; +} + +/// @nodoc +class _$QdsBoxButtonStateCopyWithImpl<$Res, $Val extends QdsBoxButtonState> + implements $QdsBoxButtonStateCopyWith<$Res> { + _$QdsBoxButtonStateCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + /// Create a copy of QdsBoxButtonState + /// with the given fields replaced by the non-null parameter values. +} + +/// @nodoc +abstract class _$$QdsBoxButtonPressedImplCopyWith<$Res> { + factory _$$QdsBoxButtonPressedImplCopyWith(_$QdsBoxButtonPressedImpl value, + $Res Function(_$QdsBoxButtonPressedImpl) then) = + __$$QdsBoxButtonPressedImplCopyWithImpl<$Res>; +} + +/// @nodoc +class __$$QdsBoxButtonPressedImplCopyWithImpl<$Res> + extends _$QdsBoxButtonStateCopyWithImpl<$Res, _$QdsBoxButtonPressedImpl> + implements _$$QdsBoxButtonPressedImplCopyWith<$Res> { + __$$QdsBoxButtonPressedImplCopyWithImpl(_$QdsBoxButtonPressedImpl _value, + $Res Function(_$QdsBoxButtonPressedImpl) _then) + : super(_value, _then); + + /// Create a copy of QdsBoxButtonState + /// with the given fields replaced by the non-null parameter values. +} + +/// @nodoc + +class _$QdsBoxButtonPressedImpl implements QdsBoxButtonPressed { + const _$QdsBoxButtonPressedImpl(); + + @override + String toString() { + return 'QdsBoxButtonState.pressed()'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$QdsBoxButtonPressedImpl); + } + + @override + int get hashCode => runtimeType.hashCode; + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() pressed, + required TResult Function() inactive, + required TResult Function() loading, + required TResult Function() active, + required TResult Function(double progress) progress, + }) { + return pressed(); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? pressed, + TResult? Function()? inactive, + TResult? Function()? loading, + TResult? Function()? active, + TResult? Function(double progress)? progress, + }) { + return pressed?.call(); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? pressed, + TResult Function()? inactive, + TResult Function()? loading, + TResult Function()? active, + TResult Function(double progress)? progress, + required TResult orElse(), + }) { + if (pressed != null) { + return pressed(); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(QdsBoxButtonPressed value) pressed, + required TResult Function(QdsBoxButtonInactive value) inactive, + required TResult Function(QdsBoxButtonLoading value) loading, + required TResult Function(QdsBoxButtonActive value) active, + required TResult Function(QdsBoxButtonProgress value) progress, + }) { + return pressed(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(QdsBoxButtonPressed value)? pressed, + TResult? Function(QdsBoxButtonInactive value)? inactive, + TResult? Function(QdsBoxButtonLoading value)? loading, + TResult? Function(QdsBoxButtonActive value)? active, + TResult? Function(QdsBoxButtonProgress value)? progress, + }) { + return pressed?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(QdsBoxButtonPressed value)? pressed, + TResult Function(QdsBoxButtonInactive value)? inactive, + TResult Function(QdsBoxButtonLoading value)? loading, + TResult Function(QdsBoxButtonActive value)? active, + TResult Function(QdsBoxButtonProgress value)? progress, + required TResult orElse(), + }) { + if (pressed != null) { + return pressed(this); + } + return orElse(); + } +} + +abstract class QdsBoxButtonPressed implements QdsBoxButtonState { + const factory QdsBoxButtonPressed() = _$QdsBoxButtonPressedImpl; +} + +/// @nodoc +abstract class _$$QdsBoxButtonInactiveImplCopyWith<$Res> { + factory _$$QdsBoxButtonInactiveImplCopyWith(_$QdsBoxButtonInactiveImpl value, + $Res Function(_$QdsBoxButtonInactiveImpl) then) = + __$$QdsBoxButtonInactiveImplCopyWithImpl<$Res>; +} + +/// @nodoc +class __$$QdsBoxButtonInactiveImplCopyWithImpl<$Res> + extends _$QdsBoxButtonStateCopyWithImpl<$Res, _$QdsBoxButtonInactiveImpl> + implements _$$QdsBoxButtonInactiveImplCopyWith<$Res> { + __$$QdsBoxButtonInactiveImplCopyWithImpl(_$QdsBoxButtonInactiveImpl _value, + $Res Function(_$QdsBoxButtonInactiveImpl) _then) + : super(_value, _then); + + /// Create a copy of QdsBoxButtonState + /// with the given fields replaced by the non-null parameter values. +} + +/// @nodoc + +class _$QdsBoxButtonInactiveImpl implements QdsBoxButtonInactive { + const _$QdsBoxButtonInactiveImpl(); + + @override + String toString() { + return 'QdsBoxButtonState.inactive()'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$QdsBoxButtonInactiveImpl); + } + + @override + int get hashCode => runtimeType.hashCode; + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() pressed, + required TResult Function() inactive, + required TResult Function() loading, + required TResult Function() active, + required TResult Function(double progress) progress, + }) { + return inactive(); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? pressed, + TResult? Function()? inactive, + TResult? Function()? loading, + TResult? Function()? active, + TResult? Function(double progress)? progress, + }) { + return inactive?.call(); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? pressed, + TResult Function()? inactive, + TResult Function()? loading, + TResult Function()? active, + TResult Function(double progress)? progress, + required TResult orElse(), + }) { + if (inactive != null) { + return inactive(); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(QdsBoxButtonPressed value) pressed, + required TResult Function(QdsBoxButtonInactive value) inactive, + required TResult Function(QdsBoxButtonLoading value) loading, + required TResult Function(QdsBoxButtonActive value) active, + required TResult Function(QdsBoxButtonProgress value) progress, + }) { + return inactive(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(QdsBoxButtonPressed value)? pressed, + TResult? Function(QdsBoxButtonInactive value)? inactive, + TResult? Function(QdsBoxButtonLoading value)? loading, + TResult? Function(QdsBoxButtonActive value)? active, + TResult? Function(QdsBoxButtonProgress value)? progress, + }) { + return inactive?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(QdsBoxButtonPressed value)? pressed, + TResult Function(QdsBoxButtonInactive value)? inactive, + TResult Function(QdsBoxButtonLoading value)? loading, + TResult Function(QdsBoxButtonActive value)? active, + TResult Function(QdsBoxButtonProgress value)? progress, + required TResult orElse(), + }) { + if (inactive != null) { + return inactive(this); + } + return orElse(); + } +} + +abstract class QdsBoxButtonInactive implements QdsBoxButtonState { + const factory QdsBoxButtonInactive() = _$QdsBoxButtonInactiveImpl; +} + +/// @nodoc +abstract class _$$QdsBoxButtonLoadingImplCopyWith<$Res> { + factory _$$QdsBoxButtonLoadingImplCopyWith(_$QdsBoxButtonLoadingImpl value, + $Res Function(_$QdsBoxButtonLoadingImpl) then) = + __$$QdsBoxButtonLoadingImplCopyWithImpl<$Res>; +} + +/// @nodoc +class __$$QdsBoxButtonLoadingImplCopyWithImpl<$Res> + extends _$QdsBoxButtonStateCopyWithImpl<$Res, _$QdsBoxButtonLoadingImpl> + implements _$$QdsBoxButtonLoadingImplCopyWith<$Res> { + __$$QdsBoxButtonLoadingImplCopyWithImpl(_$QdsBoxButtonLoadingImpl _value, + $Res Function(_$QdsBoxButtonLoadingImpl) _then) + : super(_value, _then); + + /// Create a copy of QdsBoxButtonState + /// with the given fields replaced by the non-null parameter values. +} + +/// @nodoc + +class _$QdsBoxButtonLoadingImpl implements QdsBoxButtonLoading { + const _$QdsBoxButtonLoadingImpl(); + + @override + String toString() { + return 'QdsBoxButtonState.loading()'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$QdsBoxButtonLoadingImpl); + } + + @override + int get hashCode => runtimeType.hashCode; + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() pressed, + required TResult Function() inactive, + required TResult Function() loading, + required TResult Function() active, + required TResult Function(double progress) progress, + }) { + return loading(); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? pressed, + TResult? Function()? inactive, + TResult? Function()? loading, + TResult? Function()? active, + TResult? Function(double progress)? progress, + }) { + return loading?.call(); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? pressed, + TResult Function()? inactive, + TResult Function()? loading, + TResult Function()? active, + TResult Function(double progress)? progress, + required TResult orElse(), + }) { + if (loading != null) { + return loading(); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(QdsBoxButtonPressed value) pressed, + required TResult Function(QdsBoxButtonInactive value) inactive, + required TResult Function(QdsBoxButtonLoading value) loading, + required TResult Function(QdsBoxButtonActive value) active, + required TResult Function(QdsBoxButtonProgress value) progress, + }) { + return loading(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(QdsBoxButtonPressed value)? pressed, + TResult? Function(QdsBoxButtonInactive value)? inactive, + TResult? Function(QdsBoxButtonLoading value)? loading, + TResult? Function(QdsBoxButtonActive value)? active, + TResult? Function(QdsBoxButtonProgress value)? progress, + }) { + return loading?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(QdsBoxButtonPressed value)? pressed, + TResult Function(QdsBoxButtonInactive value)? inactive, + TResult Function(QdsBoxButtonLoading value)? loading, + TResult Function(QdsBoxButtonActive value)? active, + TResult Function(QdsBoxButtonProgress value)? progress, + required TResult orElse(), + }) { + if (loading != null) { + return loading(this); + } + return orElse(); + } +} + +abstract class QdsBoxButtonLoading implements QdsBoxButtonState { + const factory QdsBoxButtonLoading() = _$QdsBoxButtonLoadingImpl; +} + +/// @nodoc +abstract class _$$QdsBoxButtonActiveImplCopyWith<$Res> { + factory _$$QdsBoxButtonActiveImplCopyWith(_$QdsBoxButtonActiveImpl value, + $Res Function(_$QdsBoxButtonActiveImpl) then) = + __$$QdsBoxButtonActiveImplCopyWithImpl<$Res>; +} + +/// @nodoc +class __$$QdsBoxButtonActiveImplCopyWithImpl<$Res> + extends _$QdsBoxButtonStateCopyWithImpl<$Res, _$QdsBoxButtonActiveImpl> + implements _$$QdsBoxButtonActiveImplCopyWith<$Res> { + __$$QdsBoxButtonActiveImplCopyWithImpl(_$QdsBoxButtonActiveImpl _value, + $Res Function(_$QdsBoxButtonActiveImpl) _then) + : super(_value, _then); + + /// Create a copy of QdsBoxButtonState + /// with the given fields replaced by the non-null parameter values. +} + +/// @nodoc + +class _$QdsBoxButtonActiveImpl implements QdsBoxButtonActive { + const _$QdsBoxButtonActiveImpl(); + + @override + String toString() { + return 'QdsBoxButtonState.active()'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && other is _$QdsBoxButtonActiveImpl); + } + + @override + int get hashCode => runtimeType.hashCode; + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() pressed, + required TResult Function() inactive, + required TResult Function() loading, + required TResult Function() active, + required TResult Function(double progress) progress, + }) { + return active(); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? pressed, + TResult? Function()? inactive, + TResult? Function()? loading, + TResult? Function()? active, + TResult? Function(double progress)? progress, + }) { + return active?.call(); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? pressed, + TResult Function()? inactive, + TResult Function()? loading, + TResult Function()? active, + TResult Function(double progress)? progress, + required TResult orElse(), + }) { + if (active != null) { + return active(); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(QdsBoxButtonPressed value) pressed, + required TResult Function(QdsBoxButtonInactive value) inactive, + required TResult Function(QdsBoxButtonLoading value) loading, + required TResult Function(QdsBoxButtonActive value) active, + required TResult Function(QdsBoxButtonProgress value) progress, + }) { + return active(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(QdsBoxButtonPressed value)? pressed, + TResult? Function(QdsBoxButtonInactive value)? inactive, + TResult? Function(QdsBoxButtonLoading value)? loading, + TResult? Function(QdsBoxButtonActive value)? active, + TResult? Function(QdsBoxButtonProgress value)? progress, + }) { + return active?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(QdsBoxButtonPressed value)? pressed, + TResult Function(QdsBoxButtonInactive value)? inactive, + TResult Function(QdsBoxButtonLoading value)? loading, + TResult Function(QdsBoxButtonActive value)? active, + TResult Function(QdsBoxButtonProgress value)? progress, + required TResult orElse(), + }) { + if (active != null) { + return active(this); + } + return orElse(); + } +} + +abstract class QdsBoxButtonActive implements QdsBoxButtonState { + const factory QdsBoxButtonActive() = _$QdsBoxButtonActiveImpl; +} + +/// @nodoc +abstract class _$$QdsBoxButtonProgressImplCopyWith<$Res> { + factory _$$QdsBoxButtonProgressImplCopyWith(_$QdsBoxButtonProgressImpl value, + $Res Function(_$QdsBoxButtonProgressImpl) then) = + __$$QdsBoxButtonProgressImplCopyWithImpl<$Res>; + @useResult + $Res call({double progress}); +} + +/// @nodoc +class __$$QdsBoxButtonProgressImplCopyWithImpl<$Res> + extends _$QdsBoxButtonStateCopyWithImpl<$Res, _$QdsBoxButtonProgressImpl> + implements _$$QdsBoxButtonProgressImplCopyWith<$Res> { + __$$QdsBoxButtonProgressImplCopyWithImpl(_$QdsBoxButtonProgressImpl _value, + $Res Function(_$QdsBoxButtonProgressImpl) _then) + : super(_value, _then); + + /// Create a copy of QdsBoxButtonState + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? progress = null, + }) { + return _then(_$QdsBoxButtonProgressImpl( + progress: null == progress + ? _value.progress + : progress // ignore: cast_nullable_to_non_nullable + as double, + )); + } +} + +/// @nodoc + +class _$QdsBoxButtonProgressImpl implements QdsBoxButtonProgress { + const _$QdsBoxButtonProgressImpl({required this.progress}); + + @override + final double progress; + + @override + String toString() { + return 'QdsBoxButtonState.progress(progress: $progress)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$QdsBoxButtonProgressImpl && + (identical(other.progress, progress) || + other.progress == progress)); + } + + @override + int get hashCode => Object.hash(runtimeType, progress); + + /// Create a copy of QdsBoxButtonState + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + @override + @pragma('vm:prefer-inline') + _$$QdsBoxButtonProgressImplCopyWith<_$QdsBoxButtonProgressImpl> + get copyWith => + __$$QdsBoxButtonProgressImplCopyWithImpl<_$QdsBoxButtonProgressImpl>( + this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() pressed, + required TResult Function() inactive, + required TResult Function() loading, + required TResult Function() active, + required TResult Function(double progress) progress, + }) { + return progress(this.progress); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? pressed, + TResult? Function()? inactive, + TResult? Function()? loading, + TResult? Function()? active, + TResult? Function(double progress)? progress, + }) { + return progress?.call(this.progress); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? pressed, + TResult Function()? inactive, + TResult Function()? loading, + TResult Function()? active, + TResult Function(double progress)? progress, + required TResult orElse(), + }) { + if (progress != null) { + return progress(this.progress); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(QdsBoxButtonPressed value) pressed, + required TResult Function(QdsBoxButtonInactive value) inactive, + required TResult Function(QdsBoxButtonLoading value) loading, + required TResult Function(QdsBoxButtonActive value) active, + required TResult Function(QdsBoxButtonProgress value) progress, + }) { + return progress(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(QdsBoxButtonPressed value)? pressed, + TResult? Function(QdsBoxButtonInactive value)? inactive, + TResult? Function(QdsBoxButtonLoading value)? loading, + TResult? Function(QdsBoxButtonActive value)? active, + TResult? Function(QdsBoxButtonProgress value)? progress, + }) { + return progress?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(QdsBoxButtonPressed value)? pressed, + TResult Function(QdsBoxButtonInactive value)? inactive, + TResult Function(QdsBoxButtonLoading value)? loading, + TResult Function(QdsBoxButtonActive value)? active, + TResult Function(QdsBoxButtonProgress value)? progress, + required TResult orElse(), + }) { + if (progress != null) { + return progress(this); + } + return orElse(); + } +} + +abstract class QdsBoxButtonProgress implements QdsBoxButtonState { + const factory QdsBoxButtonProgress({required final double progress}) = + _$QdsBoxButtonProgressImpl; + + double get progress; + + /// Create a copy of QdsBoxButtonState + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + _$$QdsBoxButtonProgressImplCopyWith<_$QdsBoxButtonProgressImpl> + get copyWith => throw _privateConstructorUsedError; +} diff --git a/lib/src/button/qds_box_button_ui_state.dart b/lib/src/button/qds_box_button_ui_state.dart index 7151963..2fb544c 100644 --- a/lib/src/button/qds_box_button_ui_state.dart +++ b/lib/src/button/qds_box_button_ui_state.dart @@ -9,7 +9,7 @@ class QdsBoxButtonUiState with _$QdsBoxButtonUiState { required QdsBoxButtonLabelType buttonLabelType, required QdsBoxButtonColorType buttonColorType, required QdsBoxButtonSizeType buttonSizeType, - @Default(QdsBoxButtonState.active) QdsBoxButtonState state, + @Default(QdsBoxButtonState.active()) QdsBoxButtonState state, @Default(true) bool enable, @Default(400) int debounceTime, }) = _QdsBoxButtonUiState; @@ -32,5 +32,3 @@ extension QdsBoxButtonUiStateExtension on QdsBoxButtonUiState { double get radiusSize => buttonSizeType.radiusSize; } - -enum QdsBoxButtonState { pressed, inactive, loading, active } diff --git a/lib/src/button/qds_box_button_ui_state.freezed.dart b/lib/src/button/qds_box_button_ui_state.freezed.dart index ec0d3d4..962cf67 100644 --- a/lib/src/button/qds_box_button_ui_state.freezed.dart +++ b/lib/src/button/qds_box_button_ui_state.freezed.dart @@ -47,6 +47,7 @@ abstract class $QdsBoxButtonUiStateCopyWith<$Res> { int debounceTime}); $QdsBoxButtonLabelTypeCopyWith<$Res> get buttonLabelType; + $QdsBoxButtonStateCopyWith<$Res> get state; } /// @nodoc @@ -109,6 +110,16 @@ class _$QdsBoxButtonUiStateCopyWithImpl<$Res, $Val extends QdsBoxButtonUiState> return _then(_value.copyWith(buttonLabelType: value) as $Val); }); } + + /// Create a copy of QdsBoxButtonUiState + /// with the given fields replaced by the non-null parameter values. + @override + @pragma('vm:prefer-inline') + $QdsBoxButtonStateCopyWith<$Res> get state { + return $QdsBoxButtonStateCopyWith<$Res>(_value.state, (value) { + return _then(_value.copyWith(state: value) as $Val); + }); + } } /// @nodoc @@ -129,6 +140,8 @@ abstract class _$$QdsBoxButtonUiStateImplCopyWith<$Res> @override $QdsBoxButtonLabelTypeCopyWith<$Res> get buttonLabelType; + @override + $QdsBoxButtonStateCopyWith<$Res> get state; } /// @nodoc @@ -187,7 +200,7 @@ class _$QdsBoxButtonUiStateImpl implements _QdsBoxButtonUiState { {required this.buttonLabelType, required this.buttonColorType, required this.buttonSizeType, - this.state = QdsBoxButtonState.active, + this.state = const QdsBoxButtonState.active(), this.enable = true, this.debounceTime = 400}); diff --git a/pubspec.lock b/pubspec.lock index 85f2efc..16465db 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -34,10 +34,10 @@ packages: dependency: transitive description: name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.12.0" bloc: dependency: transitive description: @@ -58,10 +58,10 @@ packages: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" build: dependency: transitive description: @@ -154,10 +154,10 @@ packages: dependency: transitive description: name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" checked_yaml: dependency: transitive description: @@ -170,10 +170,10 @@ packages: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" code_builder: dependency: transitive description: @@ -186,10 +186,10 @@ packages: dependency: transitive description: name: collection - sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.19.0" + version: "1.19.1" convert: dependency: transitive description: @@ -234,10 +234,10 @@ packages: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" ffi: dependency: transitive description: @@ -396,18 +396,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06" + sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec url: "https://pub.dev" source: hosted - version: "10.0.7" + version: "10.0.8" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379" + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 url: "https://pub.dev" source: hosted - version: "3.0.8" + version: "3.0.9" leak_tracker_testing: dependency: transitive description: @@ -444,10 +444,10 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.17" material_color_utilities: dependency: transitive description: @@ -460,10 +460,10 @@ packages: dependency: transitive description: name: meta - sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.16.0" mime: dependency: transitive description: @@ -524,10 +524,10 @@ packages: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" path_parsing: dependency: transitive description: @@ -721,10 +721,10 @@ packages: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.10.1" sprintf: dependency: transitive description: @@ -777,18 +777,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377" + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.12.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" stream_transform: dependency: transitive description: @@ -801,10 +801,10 @@ packages: dependency: transitive description: name: string_scanner - sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.1" synchronized: dependency: transitive description: @@ -817,34 +817,34 @@ packages: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" test: dependency: transitive description: name: test - sha256: "713a8789d62f3233c46b4a90b174737b2c04cb6ae4500f2aa8b1be8f03f5e67f" + sha256: "301b213cd241ca982e9ba50266bd3f5bd1ea33f1455554c5abb85d1be0e2d87e" url: "https://pub.dev" source: hosted - version: "1.25.8" + version: "1.25.15" test_api: dependency: transitive description: name: test_api - sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd url: "https://pub.dev" source: hosted - version: "0.7.3" + version: "0.7.4" test_core: dependency: transitive description: name: test_core - sha256: "12391302411737c176b0b5d6491f466b0dd56d4763e347b6714efbaa74d7953d" + sha256: "84d17c3486c8dfdbe5e12a50c8ae176d15e2a771b96909a9442b40173649ccaa" url: "https://pub.dev" source: hosted - version: "0.6.5" + version: "0.6.8" timing: dependency: transitive description: @@ -905,10 +905,10 @@ packages: dependency: transitive description: name: vm_service - sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b + sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "14.3.1" watcher: dependency: transitive description: @@ -974,5 +974,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.6.0 <4.0.0" + dart: ">=3.7.0-0 <4.0.0" flutter: ">=3.24.0" diff --git a/pubspec.yaml b/pubspec.yaml index 99c4522..4207e54 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: quantum_dots description: the design system for wippy global product -version: 0.0.30 +version: 0.0.31 homepage: https://github.com/nrise/Quantum-Dots topics: - animations