From e01780912a1338b87cf5cd3a68a5b2140d213249 Mon Sep 17 00:00:00 2001 From: Luke Walton Date: Mon, 26 Feb 2024 16:07:58 +0000 Subject: [PATCH] chore: Organize widgetbook (#28) --- .github/workflows/pull-request.yml | 10 +- .gitignore | 1 + example/assets/Omer.jpg | Bin 0 -> 40027 bytes .../lib/pages/components/button_example.dart | 14 +-- example/macos/Podfile.lock | 2 +- .../macos/Runner.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- example/pubspec.yaml | 2 + .../pages/assets/icon_widgetbook.dart | 19 +-- .../components/accordion_widgetbook.dart | 1 - .../pages/components/avatar_widgetbook.dart | 14 ++- .../pages/components/badges_widgetbook.dart | 42 +++++-- .../pages/components/banner_widgetbook.dart | 12 +- .../pages/components/button_widgetbook.dart | 78 ++++++++++++- .../components/password_input_widgetbook.dart | 6 +- .../pages/theme/radius_widgetbook.dart | 109 +++++++++--------- example/widgetbook/widgetbook.dart | 1 - lib/src/components/badges/tag.dart | 2 +- lib/src/components/buttons/button.dart | 7 +- lib/src/components/buttons/button_style.dart | 23 ++-- lib/src/components/buttons/icon_button.dart | 10 +- lib/src/utils/extensions.dart | 6 + 22 files changed, 237 insertions(+), 126 deletions(-) create mode 100644 example/assets/Omer.jpg diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 1271db0b..68f50255 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -1,8 +1,6 @@ name: CI - Pull Request on: - pull_request_target: - types: - - opened + pull_request: jobs: up-to-date: @@ -62,7 +60,7 @@ jobs: uses: tj-actions/branch-names@v7.0.7 - uses: subosito/flutter-action@v2 with: - flutter-version: "3.16.x" + flutter-version: "3.19.x" channel: "stable" - name: Setup flutter run: flutter pub get @@ -89,9 +87,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + with: + ref: ${{ github.head_ref }} - uses: subosito/flutter-action@v2 with: - flutter-version: "3.16.x" + flutter-version: "3.19.x" channel: "stable" - name: Setup flutter run: flutter pub get diff --git a/.gitignore b/.gitignore index 369fe7d8..fe5b1a1d 100644 --- a/.gitignore +++ b/.gitignore @@ -145,3 +145,4 @@ $RECYCLE.BIN/ *.msp *.lnk **/Generated.xcconfig +.fvmrc diff --git a/example/assets/Omer.jpg b/example/assets/Omer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f3e7d4a0f949be6dff5f989d0a2d3f039b57cb4 GIT binary patch literal 40027 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 { Column(children: inputButtons(ZetaWidgetBorder.rounded)), Text('Sharp Buttons', style: ZetaTextStyles.displayMedium), Column(children: inputButtons(ZetaWidgetBorder.sharp)), - Text('Floating Action Buttons', - style: ZetaTextStyles.displayMedium), - Text('Tap buttons to change current FAB: ', - style: ZetaTextStyles.bodyMedium), - Wrap( - children: - fabs.divide(SizedBox.square(dimension: 10)).toList()), - ] - .divide(const SizedBox.square(dimension: ZetaSpacing.m)) - .toList(), + Text('Floating Action Buttons', style: ZetaTextStyles.displayMedium), + Text('Tap buttons to change current FAB: ', style: ZetaTextStyles.bodyMedium), + Wrap(children: fabs.divide(SizedBox.square(dimension: 10)).toList()), + ].divide(const SizedBox.square(dimension: ZetaSpacing.m)).toList(), ), ), Expanded(child: const SizedBox()), diff --git a/example/macos/Podfile.lock b/example/macos/Podfile.lock index 4556329c..5773bbb3 100644 --- a/example/macos/Podfile.lock +++ b/example/macos/Podfile.lock @@ -34,4 +34,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7 -COCOAPODS: 1.13.0 +COCOAPODS: 1.15.1 diff --git a/example/macos/Runner.xcodeproj/project.pbxproj b/example/macos/Runner.xcodeproj/project.pbxproj index 253d9342..ee0056c3 100644 --- a/example/macos/Runner.xcodeproj/project.pbxproj +++ b/example/macos/Runner.xcodeproj/project.pbxproj @@ -202,7 +202,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1430; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { 33CC10EC2044A3C60003C045 = { diff --git a/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 83d88728..5b055a3a 100644 --- a/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ icons = - (context.knobs.boolean(label: 'Rounded', initialValue: true)) ? iconsRounded : iconsSharp; + ((context.knobs.boolean(label: 'Rounded', initialValue: true)) ? iconsRounded : iconsSharp); + + final Map sortedIcons = Map.fromEntries(icons.entries.toList() + ..sort((a, b) { + final _a = (a.key.split('_')..removeLast()).join(); + final _b = (b.key.split('_')..removeLast()).join(); + return _a.compareTo(_b); + })); return WidgetbookTestWidget( removeBody: true, widget: SingleChildScrollView( + key: PageStorageKey(0), child: Center( child: Column( children: [ @@ -27,9 +35,9 @@ WidgetbookComponent iconWidgetbook() { Wrap( spacing: ZetaSpacing.l, runSpacing: ZetaSpacing.l, - children: icons.entries.map( + children: sortedIcons.entries.map( (e) { - final nameArr = e.key.split('_')..removeLast(); + final nameArr = (e.key.split('_')..removeLast()).join(' ').capitalize(); return Container( width: 100, height: 100, @@ -41,10 +49,7 @@ WidgetbookComponent iconWidgetbook() { }, child: Column( mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon(e.value, size: 40), - Text(nameArr.join(' '), textAlign: TextAlign.center) - ], + children: [Icon(e.value, size: 40), Text(nameArr, textAlign: TextAlign.center)], ), ), ); diff --git a/example/widgetbook/pages/components/accordion_widgetbook.dart b/example/widgetbook/pages/components/accordion_widgetbook.dart index d7297153..88533e22 100644 --- a/example/widgetbook/pages/components/accordion_widgetbook.dart +++ b/example/widgetbook/pages/components/accordion_widgetbook.dart @@ -28,7 +28,6 @@ WidgetbookComponent accordionWidgetBook() { ), title: context.knobs.string(label: 'Accordion Title', initialValue: 'Title'), contained: context.knobs.boolean(label: 'Contained', initialValue: false), - isOpen: context.knobs.boolean(label: 'Open', initialValue: false), rounded: context.knobs.boolean(label: 'Rounded', initialValue: false), ), ), diff --git a/example/widgetbook/pages/components/avatar_widgetbook.dart b/example/widgetbook/pages/components/avatar_widgetbook.dart index 0a91e51c..87e41049 100644 --- a/example/widgetbook/pages/components/avatar_widgetbook.dart +++ b/example/widgetbook/pages/components/avatar_widgetbook.dart @@ -12,7 +12,7 @@ WidgetbookComponent avatarWidgetBook() { WidgetbookUseCase( name: 'Image Avatar', builder: (context) { - final Widget image = Image.network('https://i.ytimg.com/vi/KItsWUzFUOs/maxresdefault.jpg', fit: BoxFit.cover); + final Widget image = Image.asset('assets/Omer.jpg', fit: BoxFit.cover); return WidgetbookTestWidget( widget: Column( @@ -21,7 +21,11 @@ WidgetbookComponent avatarWidgetBook() { padding: const EdgeInsets.all(20), child: ZetaAvatar.image( image: context.knobs.boolean(label: 'Image') ? image : null, - size: context.knobs.list(label: 'Size', options: ZetaAvatarSize.values), + size: context.knobs.list( + label: 'Size', + options: ZetaAvatarSize.values, + labelBuilder: (value) => value.name.split('.').last.toUpperCase(), + ), lowerBadge: context.knobs.boolean(label: 'Status Badge', initialValue: false) ? ZetaIndicator.icon() : null, borderColor: context.knobs.colorOrNull(label: 'Outline', initialValue: null), @@ -46,7 +50,11 @@ WidgetbookComponent avatarWidgetBook() { child: ZetaAvatar.initials( backgroundColor: context.knobs.colorOrNull(label: 'Background color', initialValue: null), initials: context.knobs.stringOrNull(label: 'Initials', initialValue: 'AB'), - size: context.knobs.list(label: 'Size', options: ZetaAvatarSize.values), + size: context.knobs.list( + label: 'Size', + options: ZetaAvatarSize.values, + labelBuilder: (value) => value.name.split('.').last.toUpperCase(), + ), lowerBadge: context.knobs.boolean(label: 'Status badge', initialValue: false) ? ZetaIndicator.notification() : null, diff --git a/example/widgetbook/pages/components/badges_widgetbook.dart b/example/widgetbook/pages/components/badges_widgetbook.dart index 6cdafb88..a9026b1f 100644 --- a/example/widgetbook/pages/components/badges_widgetbook.dart +++ b/example/widgetbook/pages/components/badges_widgetbook.dart @@ -20,7 +20,11 @@ WidgetbookComponent badgeWidgetBook() { child: ZetaStatusLabel( label: context.knobs.string(label: 'Label', initialValue: 'Label'), rounded: context.knobs.boolean(label: 'Rounded'), - status: context.knobs.list(label: 'Status', options: ZetaWidgetStatus.values), + status: context.knobs.list( + label: 'Status', + labelBuilder: (value) => value.name.split('.').last.capitalize(), + options: ZetaWidgetStatus.values, + ), customIcon: context.knobs.list( label: 'Icon', options: [ @@ -72,7 +76,11 @@ WidgetbookComponent badgeWidgetBook() { child: ZetaBadge( label: context.knobs.string(label: 'Label', initialValue: 'Label'), rounded: context.knobs.boolean(label: 'Rounded'), - status: context.knobs.list(label: 'Status', options: ZetaWidgetStatus.values), + status: context.knobs.list( + label: 'Status', + options: ZetaWidgetStatus.values, + labelBuilder: (value) => value.name.split('.').last.capitalize(), + ), ), ), ], @@ -88,7 +96,11 @@ WidgetbookComponent badgeWidgetBook() { Padding( padding: EdgeInsets.all(20), child: ZetaIndicator( - type: context.knobs.list(label: 'Type', options: ZetaIndicatorType.values), + type: context.knobs.list( + label: 'Type', + options: ZetaIndicatorType.values, + labelBuilder: (value) => value.name.split('.').last.capitalize(), + ), icon: context.knobs.list( label: 'Icon', options: [ @@ -106,7 +118,11 @@ WidgetbookComponent badgeWidgetBook() { }, ), inverse: context.knobs.boolean(label: 'Inverse Border'), - size: context.knobs.list(label: 'Size', options: ZetaWidgetSize.values), + size: context.knobs.list( + label: 'Size', + labelBuilder: (value) => value.name.split('.').last.capitalize(), + options: ZetaWidgetSize.values, + ), value: context.knobs.int.slider(label: 'Value'), ), ), @@ -125,7 +141,11 @@ WidgetbookComponent badgeWidgetBook() { child: ZetaTag( label: context.knobs.string(label: 'Label', initialValue: 'Tag'), rounded: context.knobs.boolean(label: 'Rounded'), - direction: context.knobs.list(label: 'Direction', options: ZetaTagDirection.values), + direction: context.knobs.list( + label: 'Direction', + options: ZetaTagDirection.values, + labelBuilder: (value) => value.name.split('.').last.capitalize(), + ), ), ) ], @@ -146,8 +166,16 @@ WidgetbookComponent badgeWidgetBook() { child: ZetaWorkcloudIndicator( index: context.knobs.string(label: 'Index', initialValue: '1'), label: context.knobs.string(label: 'Label', initialValue: 'Label'), - prioritySize: context.knobs.list(label: 'Size', options: ZetaWidgetSize.values), - priorityType: context.knobs.list(label: 'Type', options: ZetaWorkcloudIndicatorType.values), + prioritySize: context.knobs.list( + label: 'Size', + labelBuilder: (value) => value.name.split('.').last.capitalize(), + options: ZetaWidgetSize.values, + ), + priorityType: context.knobs.list( + label: 'Type', + labelBuilder: (value) => value.name.split('.').last.capitalize(), + options: ZetaWorkcloudIndicatorType.values, + ), icon: context.knobs.listOrNull( label: 'Icon', options: [ diff --git a/example/widgetbook/pages/components/banner_widgetbook.dart b/example/widgetbook/pages/components/banner_widgetbook.dart index de5b538c..5f7a98c1 100644 --- a/example/widgetbook/pages/components/banner_widgetbook.dart +++ b/example/widgetbook/pages/components/banner_widgetbook.dart @@ -19,7 +19,11 @@ WidgetbookComponent bannerWidgetBook() { ZetaSystemBanner( context: context, title: context.knobs.string(label: 'Title', initialValue: 'Banner Title'), - type: context.knobs.list(label: 'Type', options: ZetaSystemBannerStatus.values), + type: context.knobs.list( + label: 'Type', + options: ZetaSystemBannerStatus.values, + labelBuilder: (value) => value.name.split('.').last.capitalize(), + ), leadingIcon: context.knobs.list( label: 'Icon', options: [ @@ -61,7 +65,11 @@ WidgetbookComponent bannerWidgetBook() { 'Lorem ipsum dolor sit amet, conse ctetur cididunt ut labore et do lore magna aliqua.', ), ), - status: context.knobs.list(label: 'Severity', options: ZetaWidgetStatus.values), + status: context.knobs.list( + label: 'Severity', + options: ZetaWidgetStatus.values, + labelBuilder: (value) => value.name.split('.').last.capitalize(), + ), onClose: context.knobs.boolean(label: 'Show Close icon') ? () {} : null, title: context.knobs.string(label: 'Title', initialValue: 'Title'), rounded: context.knobs.boolean(label: 'Rounded'), diff --git a/example/widgetbook/pages/components/button_widgetbook.dart b/example/widgetbook/pages/components/button_widgetbook.dart index 74161006..22618d7c 100644 --- a/example/widgetbook/pages/components/button_widgetbook.dart +++ b/example/widgetbook/pages/components/button_widgetbook.dart @@ -23,8 +23,62 @@ WidgetbookComponent buttonWidgetBook() { onPressed: context.knobs.boolean(label: 'Disabled') ? null : () {}, borderType: context.knobs.boolean(label: 'Rounded') ? ZetaWidgetBorder.rounded : ZetaWidgetBorder.sharp, - size: context.knobs.list(label: 'Size', options: ZetaWidgetSize.values), - type: context.knobs.list(label: 'Type', options: ZetaButtonType.values), + size: context.knobs.list( + label: 'Size', + options: ZetaWidgetSize.values, + labelBuilder: (value) => value.name.split('.').last.capitalize(), + ), + type: context.knobs.list( + label: 'Type', + options: ZetaButtonType.values, + labelBuilder: (value) => value.name.split('.').last.capitalize(), + ), + ), + ), + ], + ), + ); + }, + ), + WidgetbookUseCase( + name: 'Icon Button', + builder: (context) { + return WidgetbookTestWidget( + widget: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: EdgeInsets.all(20), + child: ZetaIconButton( + icon: context.knobs.list( + label: 'Icon', + options: [ + ZetaIcons.star_half_round, + ZetaIcons.add_alert_round, + ZetaIcons.add_box_round, + ZetaIcons.barcode_round, + ], + labelBuilder: (value) { + if (value == ZetaIcons.star_half_round) return 'ZetaIcons.star_half_round'; + if (value == ZetaIcons.add_alert_round) return 'ZetaIcons.add_alert_round'; + if (value == ZetaIcons.add_box_round) return 'ZetaIcons.add_box_round'; + if (value == ZetaIcons.barcode_round) return 'ZetaIcons.barcode_round'; + return ''; + }, + ), + onPressed: context.knobs.boolean(label: 'Disabled') ? null : () {}, + borderType: + context.knobs.boolean(label: 'Rounded') ? ZetaWidgetBorder.rounded : ZetaWidgetBorder.sharp, + size: context.knobs.list( + label: 'Size', + labelBuilder: (value) => value.name.split('.').last.capitalize(), + options: ZetaWidgetSize.values, + ), + type: context.knobs.list( + label: 'Type', + options: ZetaButtonType.values, + labelBuilder: (value) => value.name.split('.').last.capitalize(), + ), ), ), ], @@ -37,7 +91,7 @@ WidgetbookComponent buttonWidgetBook() { builder: (context) => WidgetbookTestWidget( widget: Padding(padding: EdgeInsets.all(20), child: FabWidget(context)), ), - ) + ), ], ); } @@ -97,9 +151,21 @@ class _FabWidgetState extends State { return ''; }, ), - shape: widget.c.knobs.list(label: 'Shape', options: ZetaWidgetBorder.values), - size: widget.c.knobs.list(label: 'Shape', options: ZetaFabSize.values), - type: widget.c.knobs.list(label: 'Shape', options: ZetaFabType.values), + shape: widget.c.knobs.list( + label: 'Shape', + options: ZetaWidgetBorder.values, + labelBuilder: (value) => value.name.split('.').last.capitalize(), + ), + size: widget.c.knobs.list( + label: 'Shape', + options: ZetaFabSize.values, + labelBuilder: (value) => value.name.split('.').last.capitalize(), + ), + type: widget.c.knobs.list( + label: 'Shape', + options: ZetaFabType.values, + labelBuilder: (value) => value.name.split('.').last.capitalize(), + ), ), ), ); diff --git a/example/widgetbook/pages/components/password_input_widgetbook.dart b/example/widgetbook/pages/components/password_input_widgetbook.dart index eca168ef..7428bd19 100644 --- a/example/widgetbook/pages/components/password_input_widgetbook.dart +++ b/example/widgetbook/pages/components/password_input_widgetbook.dart @@ -47,7 +47,11 @@ class _PasswordState extends State<_Password> { rounded: context.knobs.boolean(label: 'Rounded'), enabled: context.knobs.boolean(label: 'Enabled', initialValue: true), obscureText: context.knobs.boolean(label: 'Obscure text', initialValue: true), - size: context.knobs.list(label: 'Size', options: ZetaWidgetSize.values), + size: context.knobs.list( + label: 'Size', + options: ZetaWidgetSize.values, + labelBuilder: (value) => value.name.split('.').last.capitalize(), + ), footerIcon: context.knobs.listOrNull( label: 'Icon', options: [ diff --git a/example/widgetbook/pages/theme/radius_widgetbook.dart b/example/widgetbook/pages/theme/radius_widgetbook.dart index ccb63a73..6e533ca7 100644 --- a/example/widgetbook/pages/theme/radius_widgetbook.dart +++ b/example/widgetbook/pages/theme/radius_widgetbook.dart @@ -9,67 +9,62 @@ WidgetbookComponent radiusWidgetbook() { useCases: [ WidgetbookUseCase( name: 'Radius', - builder: (context) => SingleChildScrollView( - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Column( - children: radii.entries - .map((obj) => _RadiiDemo(obj)) - .divide(const SizedBox.square(dimension: ZetaSpacing.l)) - .toList(), - ).paddingTop(ZetaSpacing.l), - ], - ), - ), + builder: (context) { + final rad = context.knobs.list( + label: 'Radius', + options: radii, + labelBuilder: (value) => value.radiusString, + ); + final colors = Zeta.of(context).colors; + return SingleChildScrollView( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + width: 250, + height: 250, + decoration: BoxDecoration( + borderRadius: rad, + color: Zeta.of(context).colors.blue.shade30, + border: Border.all(color: colors.blue.shade80, width: 3), + ), + child: Center( + child: Container( + decoration: BoxDecoration( + borderRadius: rad, + color: Zeta.of(context).colors.surfacePrimary, + border: Border.all(color: colors.blue.shade50, width: 3), + ), + padding: EdgeInsets.all(ZetaSpacing.b), + child: Text( + rad.radiusString.split('.').last.capitalize(), + style: ZetaTextStyles.titleMedium.apply( + color: Zeta.of(context).colors.textDefault, + fontStyle: FontStyle.normal, + decoration: TextDecoration.none, + ), + ), + ), + ), + ), + ], + ), + ); + }, ), ], ); } -Map radii = { - 'none': ZetaRadius.none, - 'minimal': ZetaRadius.minimal, - 'rounded': ZetaRadius.rounded, - 'wide': ZetaRadius.wide, - 'full': ZetaRadius.full, -}; - -class _RadiiDemo extends StatelessWidget { - final MapEntry obj; - const _RadiiDemo(this.obj); - - @override - Widget build(BuildContext context) { - final colors = Zeta.of(context).colors; - - return Container( - width: 250, - height: 250, - decoration: BoxDecoration( - borderRadius: obj.value, - color: Zeta.of(context).colors.blue.shade30, - border: Border.all(color: colors.blue.shade80, width: 3), - ), - child: Center( - child: Container( - decoration: BoxDecoration( - borderRadius: obj.value, - color: Zeta.of(context).colors.surfacePrimary, - border: Border.all(color: colors.blue.shade50, width: 3), - ), - padding: EdgeInsets.all(ZetaSpacing.b), - child: Text( - 'ZetaRadius.' + obj.key, - style: ZetaTextStyles.titleMedium.apply( - color: Zeta.of(context).colors.textDefault, - fontStyle: FontStyle.normal, - decoration: TextDecoration.none, - ), - ), - ), - ), - ); +extension on BorderRadius { + String get radiusString { + if (topLeft.x == 0) return 'ZetaRadius.none'; + if (topLeft.x == 4) return 'ZetaRadius.minimal'; + if (topLeft.x == 8) return 'ZetaRadius.rounded'; + if (topLeft.x == 24) return 'ZetaRadius.wide'; + return 'ZetaRadius.full'; } } + +List radii = [ZetaRadius.none, ZetaRadius.minimal, ZetaRadius.rounded, ZetaRadius.wide, ZetaRadius.full]; diff --git a/example/widgetbook/widgetbook.dart b/example/widgetbook/widgetbook.dart index 8d467c86..ff8168f4 100644 --- a/example/widgetbook/widgetbook.dart +++ b/example/widgetbook/widgetbook.dart @@ -82,7 +82,6 @@ class HotReload extends StatelessWidget { final dark = theme.colorsDark.toScheme(); final light = theme.colorsLight.toScheme(); - print(child); return MaterialApp( debugShowCheckedModeBanner: false, themeMode: themeMode, diff --git a/lib/src/components/badges/tag.dart b/lib/src/components/badges/tag.dart index 877141ab..70b73f1b 100644 --- a/lib/src/components/badges/tag.dart +++ b/lib/src/components/badges/tag.dart @@ -33,7 +33,7 @@ class ZetaTag extends StatelessWidget { /// Defaults to left final ZetaTagDirection direction; - /// {@zeta-component-rounded} + /// {@macro zeta-component-rounded} final bool rounded; ///tag label diff --git a/lib/src/components/buttons/button.dart b/lib/src/components/buttons/button.dart index 7c0091e6..252cdd1b 100644 --- a/lib/src/components/buttons/button.dart +++ b/lib/src/components/buttons/button.dart @@ -119,8 +119,7 @@ class ZetaButton extends StatelessWidget { Widget build(BuildContext context) { final colors = Zeta.of(context).colors; return ConstrainedBox( - constraints: - BoxConstraints(minHeight: _minConstraints, minWidth: _minConstraints), + constraints: BoxConstraints(minHeight: _minConstraints, minWidth: _minConstraints), child: FilledButton( onPressed: onPressed, style: buttonStyle(colors, borderType, type, null), @@ -136,9 +135,7 @@ class ZetaButton extends StatelessWidget { ); } - TextStyle get _textStyle => size == ZetaWidgetSize.small - ? ZetaTextStyles.labelMedium - : ZetaTextStyles.labelLarge; + TextStyle get _textStyle => size == ZetaWidgetSize.small ? ZetaTextStyles.labelMedium : ZetaTextStyles.labelLarge; double get _minConstraints { switch (size) { diff --git a/lib/src/components/buttons/button_style.dart b/lib/src/components/buttons/button_style.dart index 49d0341b..8a3ed9fb 100644 --- a/lib/src/components/buttons/button_style.dart +++ b/lib/src/components/buttons/button_style.dart @@ -55,8 +55,7 @@ extension ButtonFunctions on ZetaButtonType { } /// Returns if button has border - bool get border => - this == ZetaButtonType.outline || this == ZetaButtonType.outlineSubtle; + bool get border => this == ZetaButtonType.outline || this == ZetaButtonType.outlineSubtle; ///Returns if button is solid bool get solid => index < 4; @@ -80,11 +79,14 @@ extension BorderFunctions on ZetaWidgetBorder { } /// Shared buttonStyle for buttons and icon buttons -ButtonStyle buttonStyle(ZetaColors colors, ZetaWidgetBorder borderType, - ZetaButtonType type, Color? backgroundColor) { - final ZetaColorSwatch color = backgroundColor != null - ? ZetaColorSwatch.fromColor(backgroundColor) - : type.color(colors); +ButtonStyle buttonStyle( + ZetaColors colors, + ZetaWidgetBorder borderType, + ZetaButtonType type, + Color? backgroundColor, +) { + final ZetaColorSwatch color = + backgroundColor != null ? ZetaColorSwatch.fromColor(backgroundColor) : type.color(colors); final bool isSolid = type.solid || backgroundColor != null; @@ -127,8 +129,7 @@ ButtonStyle buttonStyle(ZetaColors colors, ZetaWidgetBorder borderType, } }, ), - overlayColor: - MaterialStateProperty.resolveWith((Set states) { + overlayColor: MaterialStateProperty.resolveWith((Set states) { return null; }), side: MaterialStateProperty.resolveWith((Set states) { @@ -141,9 +142,7 @@ ButtonStyle buttonStyle(ZetaColors colors, ZetaWidgetBorder borderType, } if (type.border) { return BorderSide( - color: type == ZetaButtonType.outline - ? colors.primary.border - : colors.borderDefault, + color: type == ZetaButtonType.outline ? colors.primary.border : colors.borderDefault, ); } diff --git a/lib/src/components/buttons/icon_button.dart b/lib/src/components/buttons/icon_button.dart index b19ed7a4..9825349d 100644 --- a/lib/src/components/buttons/icon_button.dart +++ b/lib/src/components/buttons/icon_button.dart @@ -78,17 +78,17 @@ class ZetaIconButton extends StatelessWidget { super.key, }) : type = ZetaButtonType.text; - ///Button label + /// Button icon. final IconData icon; - ///Called when the button is tapped or otherwise activated. + /// Called when the button is tapped or otherwise activated. final VoidCallback? onPressed; - ///The coloring type of the button + /// The coloring type of the button final ZetaButtonType type; - ///Whether or not the button is sharp or rounded - ///Defaults to rounded + /// Whether or not the button is sharp or rounded + /// Defaults to rounded final ZetaWidgetBorder borderType; /// Size of the button. Defaults to large. diff --git a/lib/src/utils/extensions.dart b/lib/src/utils/extensions.dart index a7347b6f..77dc6bcc 100644 --- a/lib/src/utils/extensions.dart +++ b/lib/src/utils/extensions.dart @@ -94,4 +94,10 @@ extension StringExtensions on String? { : nameParts[0]) .toUpperCase(); } + + /// Capitalizes fist letter of string. + String capitalize() { + if (this == null) return ''; + return '${this![0].toUpperCase()}${this!.substring(1).toLowerCase()}'; + } }