diff --git a/examples/mirai_gallery/assets/json/drawer_example.json b/examples/mirai_gallery/assets/json/drawer_example.json new file mode 100644 index 00000000..0aefd93c --- /dev/null +++ b/examples/mirai_gallery/assets/json/drawer_example.json @@ -0,0 +1,160 @@ +{ + "type": "scaffold", + "appBar": { + "type": "appBar", + "title": { + "type": "text", + "data": "Appbar" + } + }, + "drawer": { + "type": "drawer", + "child": { + "type": "listView", + "shrinkWrap": true, + "separator": { + "type": "container", + "height": 10 + }, + "children": [ + { + "type": "listTile", + "leading": { + "type": "container", + "height": 50, + "width": 50, + "color": "#165FC7", + "child": { + "type": "column", + "mainAxisAlignment": "center", + "crossAxisAlignment": "center", + "children": [ + { + "type": "text", + "data": "1", + "style": { + "fontSize": 21, + "color": "#FFFFFF" + } + } + ] + } + }, + "title": { + "type": "padding", + "padding": { + "top": 10 + }, + "child": { + "type": "text", + "data": "Item 1", + "style": { + "fontSize": 18 + } + } + }, + "subtitle": { + "type": "padding", + "padding": { + "top": 10 + }, + "child": { + "type": "text", + "data": "Item description", + "style": { + "fontSize": 14 + } + } + }, + "trailing": { + "type": "icon", + "iconType": "material", + "icon": "more_vert", + "size": 24 + } + }, + { + "type": "listTile", + "onPressed": { + "actionType": "navigate", + "navigationStyle": "pop" + }, + "leading": { + "type": "container", + "height": 50, + "width": 50, + "color": "#165FC7", + "child": { + "type": "column", + "mainAxisAlignment": "center", + "crossAxisAlignment": "center", + "children": [ + { + "type": "text", + "data": "2", + "style": { + "fontSize": 21, + "color": "#FFFFFF" + } + } + ] + } + }, + "title": { + "type": "padding", + "padding": { + "top": 10 + }, + "child": { + "type": "text", + "data": "Item 2", + "style": { + "fontSize": 18 + } + } + }, + "subtitle": { + "type": "padding", + "padding": { + "top": 10 + }, + "child": { + "type": "text", + "data": "Item description", + "style": { + "fontSize": 14 + } + } + }, + "trailing": { + "type": "icon", + "iconType": "material", + "icon": "more_vert", + "size": 24 + } + } + ] + } + }, + "body": { + "type": "center", + "child": { + "type": "elevatedButton", + "child": { + "type": "text", + "data": "Open Drawer" + }, + "style": { + "padding": { + "top": 8, + "left": 12, + "right": 12, + "bottom": 8 + } + }, + "onPressed": { + "actionType": "openDrawer" + } + } + } +} diff --git a/examples/mirai_gallery/assets/json/home_screen.json b/examples/mirai_gallery/assets/json/home_screen.json index bd9d2cfe..552a0c08 100644 --- a/examples/mirai_gallery/assets/json/home_screen.json +++ b/examples/mirai_gallery/assets/json/home_screen.json @@ -1588,8 +1588,6 @@ } } }, - - { "type": "listTile", "leading": { @@ -1695,7 +1693,38 @@ } } }, + { + "type": "listTile", + "leading": { + "type": "icon", + "iconType": "material", + "icon": "navigation" + }, + "title": { + "type": "text", + "data": "Mirai Drawer", + "style": { + "fontSize": 21 + } + }, + "subtitle": { + "type": "text", + "data": "A Material Design Mirai Drawer widget", + "style": { + "fontSize": 12 + } + }, + "isThreeLine": true, + "onTap": { + "actionType": "navigate", + "navigationStyle": "push", + "widgetJson": { + "type": "exampleScreen", + "assetPath": "assets/json/drawer_example.json" + } + } + }, { "type": "listTile", "leading": { @@ -1728,7 +1757,6 @@ } } }, - { "type": "sizedBox", diff --git a/packages/mirai/lib/src/action_parsers/action_parsers.dart b/packages/mirai/lib/src/action_parsers/action_parsers.dart index 6a430853..a31f8a99 100644 --- a/packages/mirai/lib/src/action_parsers/action_parsers.dart +++ b/packages/mirai/lib/src/action_parsers/action_parsers.dart @@ -6,3 +6,4 @@ export 'package:mirai/src/action_parsers/mirai_navigate_action/mirai_navigate_ac export 'package:mirai/src/action_parsers/mirai_network_request/mirai_network_request.dart'; export 'package:mirai/src/action_parsers/mirai_none_action/mirai_none_action_parser.dart'; export 'package:mirai/src/action_parsers/mirai_snack_bar/mirai_snack_bar.dart'; +export 'package:mirai/src/action_parsers/mirai_drawer_action/mirai_drawer_action_parser.dart'; diff --git a/packages/mirai/lib/src/action_parsers/mirai_drawer_action/mirai_drawer_action_parser.dart b/packages/mirai/lib/src/action_parsers/mirai_drawer_action/mirai_drawer_action_parser.dart new file mode 100644 index 00000000..052488f4 --- /dev/null +++ b/packages/mirai/lib/src/action_parsers/mirai_drawer_action/mirai_drawer_action_parser.dart @@ -0,0 +1,20 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:mirai/mirai.dart'; +import 'package:mirai/src/utils/action_type.dart'; + +class MiraiDrawerActionParser extends MiraiActionParser { + const MiraiDrawerActionParser(); + + @override + String get actionType => ActionType.openDrawer.name; + + @override + getModel(Map json) => json; + + @override + FutureOr onCall(BuildContext context, dynamic model) { + miraiScaffoldKey.currentState?.openDrawer(); + } +} diff --git a/packages/mirai/lib/src/framework/mirai.dart b/packages/mirai/lib/src/framework/mirai.dart index f8ae6f2b..5f4cdaa1 100644 --- a/packages/mirai/lib/src/framework/mirai.dart +++ b/packages/mirai/lib/src/framework/mirai.dart @@ -95,6 +95,7 @@ class Mirai { const MiraiAspectRatioParser(), const MiraiFittedBoxParser(), const MiraiLimitedBoxParser(), + const MiraiDrawerParser(), ]; static final _actionParsers = [ @@ -106,6 +107,7 @@ class Mirai { const MiraiGetFormValueParser(), const MiraiFormValidateParser(), const MiraiSnackBarParser(), + const MiraiDrawerActionParser(), ]; static Future initialize({ diff --git a/packages/mirai/lib/src/parsers/mirai_drawer/mirai_drawer.dart b/packages/mirai/lib/src/parsers/mirai_drawer/mirai_drawer.dart new file mode 100644 index 00000000..f72d2d6f --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_drawer/mirai_drawer.dart @@ -0,0 +1,26 @@ +import 'package:flutter/widgets.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:mirai/src/parsers/mirai_shape_border/mirai_shape_border.dart'; + +export 'package:mirai/src/parsers/mirai_drawer/mirai_drawer_parser.dart'; + +part 'mirai_drawer.freezed.dart'; +part 'mirai_drawer.g.dart'; + +@freezed +class MiraiDrawer with _$MiraiDrawer { + const factory MiraiDrawer({ + String? backgroundColor, + String? shadowColor, + String? surfaceTintColor, + String? semanticLabel, + double? elevation, + double? width, + MiraiShapeBorder? shape, + Clip? clipBehavior, + required Map child, + }) = _MiraiDrawer; + + factory MiraiDrawer.fromJson(Map json) => + _$MiraiDrawerFromJson(json); +} diff --git a/packages/mirai/lib/src/parsers/mirai_drawer/mirai_drawer.freezed.dart b/packages/mirai/lib/src/parsers/mirai_drawer/mirai_drawer.freezed.dart new file mode 100644 index 00000000..f3b0e5c1 --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_drawer/mirai_drawer.freezed.dart @@ -0,0 +1,369 @@ +// 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 'mirai_drawer.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'); + +MiraiDrawer _$MiraiDrawerFromJson(Map json) { + return _MiraiDrawer.fromJson(json); +} + +/// @nodoc +mixin _$MiraiDrawer { + String? get backgroundColor => throw _privateConstructorUsedError; + String? get shadowColor => throw _privateConstructorUsedError; + String? get surfaceTintColor => throw _privateConstructorUsedError; + String? get semanticLabel => throw _privateConstructorUsedError; + double? get elevation => throw _privateConstructorUsedError; + double? get width => throw _privateConstructorUsedError; + MiraiShapeBorder? get shape => throw _privateConstructorUsedError; + Clip? get clipBehavior => throw _privateConstructorUsedError; + Map get child => throw _privateConstructorUsedError; + + /// Serializes this MiraiDrawer to a JSON map. + Map toJson() => throw _privateConstructorUsedError; + + /// Create a copy of MiraiDrawer + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + $MiraiDrawerCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $MiraiDrawerCopyWith<$Res> { + factory $MiraiDrawerCopyWith( + MiraiDrawer value, $Res Function(MiraiDrawer) then) = + _$MiraiDrawerCopyWithImpl<$Res, MiraiDrawer>; + @useResult + $Res call( + {String? backgroundColor, + String? shadowColor, + String? surfaceTintColor, + String? semanticLabel, + double? elevation, + double? width, + MiraiShapeBorder? shape, + Clip? clipBehavior, + Map child}); + + $MiraiShapeBorderCopyWith<$Res>? get shape; +} + +/// @nodoc +class _$MiraiDrawerCopyWithImpl<$Res, $Val extends MiraiDrawer> + implements $MiraiDrawerCopyWith<$Res> { + _$MiraiDrawerCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + /// Create a copy of MiraiDrawer + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? backgroundColor = freezed, + Object? shadowColor = freezed, + Object? surfaceTintColor = freezed, + Object? semanticLabel = freezed, + Object? elevation = freezed, + Object? width = freezed, + Object? shape = freezed, + Object? clipBehavior = freezed, + Object? child = null, + }) { + return _then(_value.copyWith( + backgroundColor: freezed == backgroundColor + ? _value.backgroundColor + : backgroundColor // ignore: cast_nullable_to_non_nullable + as String?, + shadowColor: freezed == shadowColor + ? _value.shadowColor + : shadowColor // ignore: cast_nullable_to_non_nullable + as String?, + surfaceTintColor: freezed == surfaceTintColor + ? _value.surfaceTintColor + : surfaceTintColor // ignore: cast_nullable_to_non_nullable + as String?, + semanticLabel: freezed == semanticLabel + ? _value.semanticLabel + : semanticLabel // ignore: cast_nullable_to_non_nullable + as String?, + elevation: freezed == elevation + ? _value.elevation + : elevation // ignore: cast_nullable_to_non_nullable + as double?, + width: freezed == width + ? _value.width + : width // ignore: cast_nullable_to_non_nullable + as double?, + shape: freezed == shape + ? _value.shape + : shape // ignore: cast_nullable_to_non_nullable + as MiraiShapeBorder?, + clipBehavior: freezed == clipBehavior + ? _value.clipBehavior + : clipBehavior // ignore: cast_nullable_to_non_nullable + as Clip?, + child: null == child + ? _value.child + : child // ignore: cast_nullable_to_non_nullable + as Map, + ) as $Val); + } + + /// Create a copy of MiraiDrawer + /// with the given fields replaced by the non-null parameter values. + @override + @pragma('vm:prefer-inline') + $MiraiShapeBorderCopyWith<$Res>? get shape { + if (_value.shape == null) { + return null; + } + + return $MiraiShapeBorderCopyWith<$Res>(_value.shape!, (value) { + return _then(_value.copyWith(shape: value) as $Val); + }); + } +} + +/// @nodoc +abstract class _$$MiraiDrawerImplCopyWith<$Res> + implements $MiraiDrawerCopyWith<$Res> { + factory _$$MiraiDrawerImplCopyWith( + _$MiraiDrawerImpl value, $Res Function(_$MiraiDrawerImpl) then) = + __$$MiraiDrawerImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {String? backgroundColor, + String? shadowColor, + String? surfaceTintColor, + String? semanticLabel, + double? elevation, + double? width, + MiraiShapeBorder? shape, + Clip? clipBehavior, + Map child}); + + @override + $MiraiShapeBorderCopyWith<$Res>? get shape; +} + +/// @nodoc +class __$$MiraiDrawerImplCopyWithImpl<$Res> + extends _$MiraiDrawerCopyWithImpl<$Res, _$MiraiDrawerImpl> + implements _$$MiraiDrawerImplCopyWith<$Res> { + __$$MiraiDrawerImplCopyWithImpl( + _$MiraiDrawerImpl _value, $Res Function(_$MiraiDrawerImpl) _then) + : super(_value, _then); + + /// Create a copy of MiraiDrawer + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? backgroundColor = freezed, + Object? shadowColor = freezed, + Object? surfaceTintColor = freezed, + Object? semanticLabel = freezed, + Object? elevation = freezed, + Object? width = freezed, + Object? shape = freezed, + Object? clipBehavior = freezed, + Object? child = null, + }) { + return _then(_$MiraiDrawerImpl( + backgroundColor: freezed == backgroundColor + ? _value.backgroundColor + : backgroundColor // ignore: cast_nullable_to_non_nullable + as String?, + shadowColor: freezed == shadowColor + ? _value.shadowColor + : shadowColor // ignore: cast_nullable_to_non_nullable + as String?, + surfaceTintColor: freezed == surfaceTintColor + ? _value.surfaceTintColor + : surfaceTintColor // ignore: cast_nullable_to_non_nullable + as String?, + semanticLabel: freezed == semanticLabel + ? _value.semanticLabel + : semanticLabel // ignore: cast_nullable_to_non_nullable + as String?, + elevation: freezed == elevation + ? _value.elevation + : elevation // ignore: cast_nullable_to_non_nullable + as double?, + width: freezed == width + ? _value.width + : width // ignore: cast_nullable_to_non_nullable + as double?, + shape: freezed == shape + ? _value.shape + : shape // ignore: cast_nullable_to_non_nullable + as MiraiShapeBorder?, + clipBehavior: freezed == clipBehavior + ? _value.clipBehavior + : clipBehavior // ignore: cast_nullable_to_non_nullable + as Clip?, + child: null == child + ? _value._child + : child // ignore: cast_nullable_to_non_nullable + as Map, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$MiraiDrawerImpl implements _MiraiDrawer { + const _$MiraiDrawerImpl( + {this.backgroundColor, + this.shadowColor, + this.surfaceTintColor, + this.semanticLabel, + this.elevation, + this.width, + this.shape, + this.clipBehavior, + required final Map child}) + : _child = child; + + factory _$MiraiDrawerImpl.fromJson(Map json) => + _$$MiraiDrawerImplFromJson(json); + + @override + final String? backgroundColor; + @override + final String? shadowColor; + @override + final String? surfaceTintColor; + @override + final String? semanticLabel; + @override + final double? elevation; + @override + final double? width; + @override + final MiraiShapeBorder? shape; + @override + final Clip? clipBehavior; + final Map _child; + @override + Map get child { + if (_child is EqualUnmodifiableMapView) return _child; + // ignore: implicit_dynamic_type + return EqualUnmodifiableMapView(_child); + } + + @override + String toString() { + return 'MiraiDrawer(backgroundColor: $backgroundColor, shadowColor: $shadowColor, surfaceTintColor: $surfaceTintColor, semanticLabel: $semanticLabel, elevation: $elevation, width: $width, shape: $shape, clipBehavior: $clipBehavior, child: $child)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$MiraiDrawerImpl && + (identical(other.backgroundColor, backgroundColor) || + other.backgroundColor == backgroundColor) && + (identical(other.shadowColor, shadowColor) || + other.shadowColor == shadowColor) && + (identical(other.surfaceTintColor, surfaceTintColor) || + other.surfaceTintColor == surfaceTintColor) && + (identical(other.semanticLabel, semanticLabel) || + other.semanticLabel == semanticLabel) && + (identical(other.elevation, elevation) || + other.elevation == elevation) && + (identical(other.width, width) || other.width == width) && + (identical(other.shape, shape) || other.shape == shape) && + (identical(other.clipBehavior, clipBehavior) || + other.clipBehavior == clipBehavior) && + const DeepCollectionEquality().equals(other._child, _child)); + } + + @JsonKey(includeFromJson: false, includeToJson: false) + @override + int get hashCode => Object.hash( + runtimeType, + backgroundColor, + shadowColor, + surfaceTintColor, + semanticLabel, + elevation, + width, + shape, + clipBehavior, + const DeepCollectionEquality().hash(_child)); + + /// Create a copy of MiraiDrawer + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + @override + @pragma('vm:prefer-inline') + _$$MiraiDrawerImplCopyWith<_$MiraiDrawerImpl> get copyWith => + __$$MiraiDrawerImplCopyWithImpl<_$MiraiDrawerImpl>(this, _$identity); + + @override + Map toJson() { + return _$$MiraiDrawerImplToJson( + this, + ); + } +} + +abstract class _MiraiDrawer implements MiraiDrawer { + const factory _MiraiDrawer( + {final String? backgroundColor, + final String? shadowColor, + final String? surfaceTintColor, + final String? semanticLabel, + final double? elevation, + final double? width, + final MiraiShapeBorder? shape, + final Clip? clipBehavior, + required final Map child}) = _$MiraiDrawerImpl; + + factory _MiraiDrawer.fromJson(Map json) = + _$MiraiDrawerImpl.fromJson; + + @override + String? get backgroundColor; + @override + String? get shadowColor; + @override + String? get surfaceTintColor; + @override + String? get semanticLabel; + @override + double? get elevation; + @override + double? get width; + @override + MiraiShapeBorder? get shape; + @override + Clip? get clipBehavior; + @override + Map get child; + + /// Create a copy of MiraiDrawer + /// with the given fields replaced by the non-null parameter values. + @override + @JsonKey(includeFromJson: false, includeToJson: false) + _$$MiraiDrawerImplCopyWith<_$MiraiDrawerImpl> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/packages/mirai/lib/src/parsers/mirai_drawer/mirai_drawer.g.dart b/packages/mirai/lib/src/parsers/mirai_drawer/mirai_drawer.g.dart new file mode 100644 index 00000000..261f05f8 --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_drawer/mirai_drawer.g.dart @@ -0,0 +1,42 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'mirai_drawer.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_$MiraiDrawerImpl _$$MiraiDrawerImplFromJson(Map json) => + _$MiraiDrawerImpl( + backgroundColor: json['backgroundColor'] as String?, + shadowColor: json['shadowColor'] as String?, + surfaceTintColor: json['surfaceTintColor'] as String?, + semanticLabel: json['semanticLabel'] as String?, + elevation: (json['elevation'] as num?)?.toDouble(), + width: (json['width'] as num?)?.toDouble(), + shape: json['shape'] == null + ? null + : MiraiShapeBorder.fromJson(json['shape'] as Map), + clipBehavior: $enumDecodeNullable(_$ClipEnumMap, json['clipBehavior']), + child: json['child'] as Map, + ); + +Map _$$MiraiDrawerImplToJson(_$MiraiDrawerImpl instance) => + { + 'backgroundColor': instance.backgroundColor, + 'shadowColor': instance.shadowColor, + 'surfaceTintColor': instance.surfaceTintColor, + 'semanticLabel': instance.semanticLabel, + 'elevation': instance.elevation, + 'width': instance.width, + 'shape': instance.shape, + 'clipBehavior': _$ClipEnumMap[instance.clipBehavior], + 'child': instance.child, + }; + +const _$ClipEnumMap = { + Clip.none: 'none', + Clip.hardEdge: 'hardEdge', + Clip.antiAlias: 'antiAlias', + Clip.antiAliasWithSaveLayer: 'antiAliasWithSaveLayer', +}; diff --git a/packages/mirai/lib/src/parsers/mirai_drawer/mirai_drawer_parser.dart b/packages/mirai/lib/src/parsers/mirai_drawer/mirai_drawer_parser.dart new file mode 100644 index 00000000..e1839baa --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_drawer/mirai_drawer_parser.dart @@ -0,0 +1,29 @@ +import 'package:flutter/material.dart'; +import 'package:mirai/mirai.dart'; +import 'package:mirai/src/parsers/mirai_shape_border/mirai_shape_border.dart'; +import 'package:mirai/src/utils/widget_type.dart'; + +class MiraiDrawerParser extends MiraiParser { + const MiraiDrawerParser(); + + @override + String get type => WidgetType.drawer.name; + + @override + MiraiDrawer getModel(Map json) => MiraiDrawer.fromJson(json); + + @override + Widget parse(BuildContext context, MiraiDrawer model) { + return Drawer( + width: model.width, + elevation: model.elevation, + backgroundColor: model.backgroundColor?.toColor(context), + shadowColor: model.shadowColor?.toColor(context), + surfaceTintColor: model.surfaceTintColor?.toColor(context), + shape: model.shape?.parse(context), + semanticLabel: model.semanticLabel, + clipBehavior: model.clipBehavior, + child: Mirai.fromJson(model.child, context), + ); + } +} diff --git a/packages/mirai/lib/src/parsers/mirai_scaffold/mirai_scaffold_parser.dart b/packages/mirai/lib/src/parsers/mirai_scaffold/mirai_scaffold_parser.dart index 5270f400..3ed3c0ca 100644 --- a/packages/mirai/lib/src/parsers/mirai_scaffold/mirai_scaffold_parser.dart +++ b/packages/mirai/lib/src/parsers/mirai_scaffold/mirai_scaffold_parser.dart @@ -5,6 +5,8 @@ import 'package:mirai/src/utils/color_utils.dart'; import 'package:mirai/src/utils/widget_type.dart'; import 'package:mirai_framework/mirai_framework.dart'; +final miraiScaffoldKey = GlobalKey(); + class MiraiScaffoldParser extends MiraiParser { const MiraiScaffoldParser(); @@ -18,6 +20,7 @@ class MiraiScaffoldParser extends MiraiParser { @override Widget parse(BuildContext context, MiraiScaffold model) { return Scaffold( + key: miraiScaffoldKey, appBar: Mirai.fromJson(model.appBar, context).toPreferredSizeWidget, body: Mirai.fromJson(model.body, context), floatingActionButton: Mirai.fromJson(model.floatingActionButton, context), diff --git a/packages/mirai/lib/src/parsers/parsers.dart b/packages/mirai/lib/src/parsers/parsers.dart index 1681fc8f..96757641 100644 --- a/packages/mirai/lib/src/parsers/parsers.dart +++ b/packages/mirai/lib/src/parsers/parsers.dart @@ -90,3 +90,4 @@ export 'package:mirai/src/parsers/mirai_text_form_field/mirai_text_form_field.da export 'package:mirai/src/parsers/mirai_text_style/mirai_text_style.dart'; export 'package:mirai/src/parsers/mirai_theme/mirai_theme.dart'; export 'package:mirai/src/parsers/mirai_wrap/mirai_wrap.dart'; +export 'package:mirai/src/parsers/mirai_drawer/mirai_drawer.dart'; diff --git a/packages/mirai/lib/src/utils/action_type.dart b/packages/mirai/lib/src/utils/action_type.dart index cf7fd4ef..c076e638 100644 --- a/packages/mirai/lib/src/utils/action_type.dart +++ b/packages/mirai/lib/src/utils/action_type.dart @@ -7,4 +7,5 @@ enum ActionType { getFormValue, validateForm, showSnackBar, + openDrawer, } diff --git a/packages/mirai/lib/src/utils/widget_type.dart b/packages/mirai/lib/src/utils/widget_type.dart index 2033b652..c9c2c852 100644 --- a/packages/mirai/lib/src/utils/widget_type.dart +++ b/packages/mirai/lib/src/utils/widget_type.dart @@ -65,4 +65,5 @@ enum WidgetType { aspectRatio, fittedBox, limitedBox, + drawer, }