diff --git a/examples/stac_gallery/assets/json/divider_example.json b/examples/stac_gallery/assets/json/divider_example.json index 26f20a94..3b688172 100644 --- a/examples/stac_gallery/assets/json/divider_example.json +++ b/examples/stac_gallery/assets/json/divider_example.json @@ -9,12 +9,13 @@ }, "body": { "type": "listView", - "children": [{ - "type": "divider", - "thickness": 5, - "height": 5, - "color": "#672BFF" - }, + "children": [ + { + "type": "divider", + "thickness": 5, + "height": 5, + "color": "#672BFF" + }, { "type": "sizedBox", "height": 20 @@ -34,6 +35,23 @@ "thickness": 2, "height": 2, "color": "#32FC88" - }] + }, + { + "type": "sizedBox", + "height": 20 + }, + { + "type": "sizedBox", + "height": 200, + "child": { + "type": "verticalDivider", + "width": 20, + "thickness": 4, + "indent": 10, + "endIndent": 10, + "color": "#21814C" + } + } + ] } } \ No newline at end of file diff --git a/packages/stac/lib/src/framework/stac.dart b/packages/stac/lib/src/framework/stac.dart index 26ef7d2a..ec0829a5 100644 --- a/packages/stac/lib/src/framework/stac.dart +++ b/packages/stac/lib/src/framework/stac.dart @@ -109,6 +109,7 @@ class Stac { const StacConditionalParser(), const StacVisibilityParser(), const StacBackdropFilterParser(), + const StacVerticalDividerParser(), ]; static final _actionParsers = [ diff --git a/packages/stac/lib/src/parsers/widgets/stac_vertical_divider/stac_vertical_divider.dart b/packages/stac/lib/src/parsers/widgets/stac_vertical_divider/stac_vertical_divider.dart new file mode 100644 index 00000000..98cc4e7d --- /dev/null +++ b/packages/stac/lib/src/parsers/widgets/stac_vertical_divider/stac_vertical_divider.dart @@ -0,0 +1,21 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:stac/src/parsers/widgets/stac_double/stac_double.dart'; + +export 'stac_vertical_divider_parser.dart'; + +part 'stac_vertical_divider.freezed.dart'; +part 'stac_vertical_divider.g.dart'; + +@freezed +abstract class StacVerticalDivider with _$StacVerticalDivider { + const factory StacVerticalDivider({ + StacDouble? width, + StacDouble? thickness, + StacDouble? indent, + StacDouble? endIndent, + String? color, + }) = _StacVerticalDivider; + + factory StacVerticalDivider.fromJson(Map json) => + _$StacVerticalDividerFromJson(json); +} diff --git a/packages/stac/lib/src/parsers/widgets/stac_vertical_divider/stac_vertical_divider.freezed.dart b/packages/stac/lib/src/parsers/widgets/stac_vertical_divider/stac_vertical_divider.freezed.dart new file mode 100644 index 00000000..46591890 --- /dev/null +++ b/packages/stac/lib/src/parsers/widgets/stac_vertical_divider/stac_vertical_divider.freezed.dart @@ -0,0 +1,238 @@ +// dart format width=80 +// 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 'stac_vertical_divider.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +// dart format off +T _$identity(T value) => value; + +/// @nodoc +mixin _$StacVerticalDivider { + StacDouble? get width; + StacDouble? get thickness; + StacDouble? get indent; + StacDouble? get endIndent; + String? get color; + + /// Create a copy of StacVerticalDivider + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + @pragma('vm:prefer-inline') + $StacVerticalDividerCopyWith get copyWith => + _$StacVerticalDividerCopyWithImpl( + this as StacVerticalDivider, _$identity); + + /// Serializes this StacVerticalDivider to a JSON map. + Map toJson(); + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is StacVerticalDivider && + (identical(other.width, width) || other.width == width) && + (identical(other.thickness, thickness) || + other.thickness == thickness) && + (identical(other.indent, indent) || other.indent == indent) && + (identical(other.endIndent, endIndent) || + other.endIndent == endIndent) && + (identical(other.color, color) || other.color == color)); + } + + @JsonKey(includeFromJson: false, includeToJson: false) + @override + int get hashCode => + Object.hash(runtimeType, width, thickness, indent, endIndent, color); + + @override + String toString() { + return 'StacVerticalDivider(width: $width, thickness: $thickness, indent: $indent, endIndent: $endIndent, color: $color)'; + } +} + +/// @nodoc +abstract mixin class $StacVerticalDividerCopyWith<$Res> { + factory $StacVerticalDividerCopyWith( + StacVerticalDivider value, $Res Function(StacVerticalDivider) _then) = + _$StacVerticalDividerCopyWithImpl; + @useResult + $Res call( + {StacDouble? width, + StacDouble? thickness, + StacDouble? indent, + StacDouble? endIndent, + String? color}); +} + +/// @nodoc +class _$StacVerticalDividerCopyWithImpl<$Res> + implements $StacVerticalDividerCopyWith<$Res> { + _$StacVerticalDividerCopyWithImpl(this._self, this._then); + + final StacVerticalDivider _self; + final $Res Function(StacVerticalDivider) _then; + + /// Create a copy of StacVerticalDivider + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? width = freezed, + Object? thickness = freezed, + Object? indent = freezed, + Object? endIndent = freezed, + Object? color = freezed, + }) { + return _then(_self.copyWith( + width: freezed == width + ? _self.width + : width // ignore: cast_nullable_to_non_nullable + as StacDouble?, + thickness: freezed == thickness + ? _self.thickness + : thickness // ignore: cast_nullable_to_non_nullable + as StacDouble?, + indent: freezed == indent + ? _self.indent + : indent // ignore: cast_nullable_to_non_nullable + as StacDouble?, + endIndent: freezed == endIndent + ? _self.endIndent + : endIndent // ignore: cast_nullable_to_non_nullable + as StacDouble?, + color: freezed == color + ? _self.color + : color // ignore: cast_nullable_to_non_nullable + as String?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _StacVerticalDivider implements StacVerticalDivider { + const _StacVerticalDivider( + {this.width, this.thickness, this.indent, this.endIndent, this.color}); + factory _StacVerticalDivider.fromJson(Map json) => + _$StacVerticalDividerFromJson(json); + + @override + final StacDouble? width; + @override + final StacDouble? thickness; + @override + final StacDouble? indent; + @override + final StacDouble? endIndent; + @override + final String? color; + + /// Create a copy of StacVerticalDivider + /// with the given fields replaced by the non-null parameter values. + @override + @JsonKey(includeFromJson: false, includeToJson: false) + @pragma('vm:prefer-inline') + _$StacVerticalDividerCopyWith<_StacVerticalDivider> get copyWith => + __$StacVerticalDividerCopyWithImpl<_StacVerticalDivider>( + this, _$identity); + + @override + Map toJson() { + return _$StacVerticalDividerToJson( + this, + ); + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _StacVerticalDivider && + (identical(other.width, width) || other.width == width) && + (identical(other.thickness, thickness) || + other.thickness == thickness) && + (identical(other.indent, indent) || other.indent == indent) && + (identical(other.endIndent, endIndent) || + other.endIndent == endIndent) && + (identical(other.color, color) || other.color == color)); + } + + @JsonKey(includeFromJson: false, includeToJson: false) + @override + int get hashCode => + Object.hash(runtimeType, width, thickness, indent, endIndent, color); + + @override + String toString() { + return 'StacVerticalDivider(width: $width, thickness: $thickness, indent: $indent, endIndent: $endIndent, color: $color)'; + } +} + +/// @nodoc +abstract mixin class _$StacVerticalDividerCopyWith<$Res> + implements $StacVerticalDividerCopyWith<$Res> { + factory _$StacVerticalDividerCopyWith(_StacVerticalDivider value, + $Res Function(_StacVerticalDivider) _then) = + __$StacVerticalDividerCopyWithImpl; + @override + @useResult + $Res call( + {StacDouble? width, + StacDouble? thickness, + StacDouble? indent, + StacDouble? endIndent, + String? color}); +} + +/// @nodoc +class __$StacVerticalDividerCopyWithImpl<$Res> + implements _$StacVerticalDividerCopyWith<$Res> { + __$StacVerticalDividerCopyWithImpl(this._self, this._then); + + final _StacVerticalDivider _self; + final $Res Function(_StacVerticalDivider) _then; + + /// Create a copy of StacVerticalDivider + /// with the given fields replaced by the non-null parameter values. + @override + @pragma('vm:prefer-inline') + $Res call({ + Object? width = freezed, + Object? thickness = freezed, + Object? indent = freezed, + Object? endIndent = freezed, + Object? color = freezed, + }) { + return _then(_StacVerticalDivider( + width: freezed == width + ? _self.width + : width // ignore: cast_nullable_to_non_nullable + as StacDouble?, + thickness: freezed == thickness + ? _self.thickness + : thickness // ignore: cast_nullable_to_non_nullable + as StacDouble?, + indent: freezed == indent + ? _self.indent + : indent // ignore: cast_nullable_to_non_nullable + as StacDouble?, + endIndent: freezed == endIndent + ? _self.endIndent + : endIndent // ignore: cast_nullable_to_non_nullable + as StacDouble?, + color: freezed == color + ? _self.color + : color // ignore: cast_nullable_to_non_nullable + as String?, + )); + } +} + +// dart format on diff --git a/packages/stac/lib/src/parsers/widgets/stac_vertical_divider/stac_vertical_divider.g.dart b/packages/stac/lib/src/parsers/widgets/stac_vertical_divider/stac_vertical_divider.g.dart new file mode 100644 index 00000000..02968f1e --- /dev/null +++ b/packages/stac/lib/src/parsers/widgets/stac_vertical_divider/stac_vertical_divider.g.dart @@ -0,0 +1,31 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'stac_vertical_divider.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_StacVerticalDivider _$StacVerticalDividerFromJson(Map json) => + _StacVerticalDivider( + width: json['width'] == null ? null : StacDouble.fromJson(json['width']), + thickness: json['thickness'] == null + ? null + : StacDouble.fromJson(json['thickness']), + indent: + json['indent'] == null ? null : StacDouble.fromJson(json['indent']), + endIndent: json['endIndent'] == null + ? null + : StacDouble.fromJson(json['endIndent']), + color: json['color'] as String?, + ); + +Map _$StacVerticalDividerToJson( + _StacVerticalDivider instance) => + { + 'width': instance.width, + 'thickness': instance.thickness, + 'indent': instance.indent, + 'endIndent': instance.endIndent, + 'color': instance.color, + }; diff --git a/packages/stac/lib/src/parsers/widgets/stac_vertical_divider/stac_vertical_divider_parser.dart b/packages/stac/lib/src/parsers/widgets/stac_vertical_divider/stac_vertical_divider_parser.dart new file mode 100644 index 00000000..965539bf --- /dev/null +++ b/packages/stac/lib/src/parsers/widgets/stac_vertical_divider/stac_vertical_divider_parser.dart @@ -0,0 +1,28 @@ +import 'package:flutter/material.dart'; +import 'package:stac/src/parsers/widgets/stac_double/stac_double.dart'; +import 'package:stac/src/parsers/widgets/stac_vertical_divider/stac_vertical_divider.dart'; +import 'package:stac/src/utils/color_utils.dart'; +import 'package:stac/src/utils/widget_type.dart'; +import 'package:stac_framework/stac_framework.dart'; + +class StacVerticalDividerParser extends StacParser { + const StacVerticalDividerParser(); + + @override + StacVerticalDivider getModel(Map json) => + StacVerticalDivider.fromJson(json); + + @override + String get type => WidgetType.verticalDivider.name; + + @override + Widget parse(BuildContext context, StacVerticalDivider model) { + return VerticalDivider( + width: model.width?.parse, + thickness: model.thickness?.parse, + indent: model.indent?.parse, + endIndent: model.endIndent?.parse, + color: model.color?.toColor(context), + ); + } +} diff --git a/packages/stac/lib/src/parsers/widgets/widgets.dart b/packages/stac/lib/src/parsers/widgets/widgets.dart index 7352160a..ebcb95b6 100644 --- a/packages/stac/lib/src/parsers/widgets/widgets.dart +++ b/packages/stac/lib/src/parsers/widgets/widgets.dart @@ -95,6 +95,7 @@ export 'package:stac/src/parsers/widgets/stac_text_button/stac_text_button.dart' export 'package:stac/src/parsers/widgets/stac_text_field/stac_text_field.dart'; export 'package:stac/src/parsers/widgets/stac_text_form_field/stac_text_form_field.dart'; export 'package:stac/src/parsers/widgets/stac_text_style/stac_text_style.dart'; +export 'package:stac/src/parsers/widgets/stac_vertical_divider/stac_vertical_divider.dart'; export 'package:stac/src/parsers/widgets/stac_wrap/stac_wrap.dart'; export 'package:stac/src/parsers/widgets/stac_visibility/stac_visibility.dart'; export 'package:stac/src/parsers/widgets/stac_backdrop_filter/stac_backdrop_filter.dart'; diff --git a/packages/stac/lib/src/utils/widget_type.dart b/packages/stac/lib/src/utils/widget_type.dart index 87d1f878..ee11474e 100644 --- a/packages/stac/lib/src/utils/widget_type.dart +++ b/packages/stac/lib/src/utils/widget_type.dart @@ -77,4 +77,5 @@ enum WidgetType { textFormField, wrap, visibility, + verticalDivider, } diff --git a/website/docs/widgets/vertical_divider.md b/website/docs/widgets/vertical_divider.md new file mode 100644 index 00000000..76fe9a9c --- /dev/null +++ b/website/docs/widgets/vertical_divider.md @@ -0,0 +1,27 @@ +# Vertical Divider + +The Stac Vertical Divider allows you to build a Flutter vertical divider widget using JSON. +To know more about the vertical divider widget in Flutter, refer to the [official documentation](https://api.flutter.dev/flutter/material/VerticalDivider-class.html). + +## Properties + +| Property | Type | Description | +|------------|--------------|----------------------------------------------------| +| width | `StacDouble?` | The width of the divider. | +| thickness | `StacDouble?` | The thickness of the divider. | +| indent | `StacDouble?` | The amount of space to indent the divider. | +| endIndent | `StacDouble?` | The amount of space to indent the divider at the end. | +| color | `String?` | The color of the divider. | + +## Example JSON + +```json +{ + "type": "verticalDivider", + "width": 20, + "thickness": 4, + "indent": 10, + "endIndent": 10, + "color": "#21814C" +} +```