From bd2162d65adf4d018ca9b012cc1e9444207d55aa Mon Sep 17 00:00:00 2001 From: Rodolfo Silva Date: Sat, 15 Jul 2023 07:53:09 -0300 Subject: [PATCH 01/11] refactor: allow action registry --- packages/mirai/lib/mirai.dart | 1 - packages/mirai/lib/src/action/action.dart | 4 - .../mirai/lib/src/action/mirai_action.dart | 26 ---- .../lib/src/action/mirai_action_parser.dart | 73 ------------ .../mirai/lib/src/framework/framework.dart | 1 + packages/mirai/lib/src/framework/mirai.dart | 35 +++++- .../src/framework/mirai_action_parser.dart | 13 ++ .../lib/src/framework/mirai_registry.dart | 26 ++++ .../parsers/mirai_actions/mirai_actions.dart | 3 + .../mirai_navigate_action.dart | 82 +++++++++++++ .../mirai_navigate_action.freezed.dart} | 112 +++++++----------- .../mirai_navigate_action.g.dart} | 20 +--- .../mirai_navigate_action_parser.dart | 19 +++ .../mirai_none_action_parser.dart | 17 +++ .../mirai_request_action_parser.dart | 21 ++++ .../mirai_elevated_button.dart | 4 +- .../mirai_elevated_button.freezed.dart | 59 +++++---- .../mirai_elevated_button.g.dart | 4 +- .../mirai_elevated_button_parser.dart | 3 +- .../mirai_floating_action_button.dart | 4 +- .../mirai_floating_action_button.freezed.dart | 52 ++++---- .../mirai_floating_action_button.g.dart | 4 +- .../mirai_floating_action_button_parser.dart | 9 +- .../mirai_icon_button/mirai_icon_button.dart | 4 +- .../mirai_icon_button.freezed.dart | 52 ++++---- .../mirai_icon_button.g.dart | 4 +- .../mirai_icon_button_parser.dart | 3 +- .../mirai_list_tile/mirai_list_tile.dart | 6 +- .../mirai_list_tile.freezed.dart | 100 +++++++--------- .../mirai_list_tile/mirai_list_tile.g.dart | 8 +- .../mirai_list_tile_parser.dart | 5 +- .../mirai_outlined_button.dart | 4 +- .../mirai_outlined_button.freezed.dart | 52 ++++---- .../mirai_outlined_button.g.dart | 4 +- .../mirai_outlined_button_parser.dart | 3 +- .../mirai_text_button/mirai_text_button.dart | 4 +- .../mirai_text_button.freezed.dart | 52 ++++---- .../mirai_text_button.g.dart | 4 +- .../mirai_text_button_parser.dart | 3 +- packages/mirai/lib/src/parsers/parsers.dart | 1 + 40 files changed, 463 insertions(+), 438 deletions(-) delete mode 100644 packages/mirai/lib/src/action/action.dart delete mode 100644 packages/mirai/lib/src/action/mirai_action.dart delete mode 100644 packages/mirai/lib/src/action/mirai_action_parser.dart create mode 100644 packages/mirai/lib/src/framework/mirai_action_parser.dart create mode 100644 packages/mirai/lib/src/parsers/mirai_actions/mirai_actions.dart create mode 100644 packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.dart rename packages/mirai/lib/src/{action/mirai_action.freezed.dart => parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.freezed.dart} (77%) rename packages/mirai/lib/src/{action/mirai_action.g.dart => parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.g.dart} (78%) create mode 100644 packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action_parser.dart create mode 100644 packages/mirai/lib/src/parsers/mirai_actions/mirai_none_action/mirai_none_action_parser.dart create mode 100644 packages/mirai/lib/src/parsers/mirai_actions/mirai_request_action/mirai_request_action_parser.dart diff --git a/packages/mirai/lib/mirai.dart b/packages/mirai/lib/mirai.dart index 2fd1f6e5..5e299538 100644 --- a/packages/mirai/lib/mirai.dart +++ b/packages/mirai/lib/mirai.dart @@ -1,6 +1,5 @@ library mirai; -export 'package:mirai/src/action/action.dart'; export 'package:mirai/src/framework/framework.dart'; export 'package:mirai/src/navigation/navigation.dart'; export 'package:mirai/src/network/network.dart'; diff --git a/packages/mirai/lib/src/action/action.dart b/packages/mirai/lib/src/action/action.dart deleted file mode 100644 index 9af2f3df..00000000 --- a/packages/mirai/lib/src/action/action.dart +++ /dev/null @@ -1,4 +0,0 @@ -library action; - -export 'mirai_action.dart'; -export 'mirai_action_parser.dart'; diff --git a/packages/mirai/lib/src/action/mirai_action.dart b/packages/mirai/lib/src/action/mirai_action.dart deleted file mode 100644 index e1be7e9b..00000000 --- a/packages/mirai/lib/src/action/mirai_action.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:mirai/src/navigation/mirai_navigator.dart'; -import 'package:mirai/src/network/mirai_request.dart'; - -part 'mirai_action.freezed.dart'; -part 'mirai_action.g.dart'; - -enum ActionType { navigate, request, none } - -@freezed -class MiraiAction with _$MiraiAction { - factory MiraiAction({ - @Default(ActionType.none) ActionType actionType, - MiraiRequest? request, - Map? widgetJson, - String? assetPath, - String? routeName, - NavigationType? navigationType, - NavigationStyle? navigationStyle, - Map? result, - Map? arguments, - }) = _MiraiAction; - - factory MiraiAction.fromJson(Map json) => - _$MiraiActionFromJson(json); -} diff --git a/packages/mirai/lib/src/action/mirai_action_parser.dart b/packages/mirai/lib/src/action/mirai_action_parser.dart deleted file mode 100644 index 7d10bbd8..00000000 --- a/packages/mirai/lib/src/action/mirai_action_parser.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:mirai/src/action/mirai_action.dart'; -import 'package:mirai/src/framework/framework.dart'; -import 'package:mirai/src/navigation/mirai_navigator.dart'; -import 'package:mirai/src/network/mirai_network.dart'; - -extension MiraiActionParser on MiraiAction? { - Future? onCall(BuildContext context) async { - if (this != null) { - switch (this?.actionType ?? ActionType.none) { - case ActionType.navigate: - Widget? widget; - if (this!.widgetJson != null) { - widget = Mirai.fromJson(this!.widgetJson, context); - - if (widget != null) { - return MiraiNavigator.navigate( - context: context, - navigationType: this?.navigationType ?? NavigationType.screen, - navigationStyle: this?.navigationStyle ?? NavigationStyle.push, - widget: widget, - result: this?.result, - arguments: this?.arguments, - ); - } - } else if (this?.request != null) { - widget = Mirai.fromNetwork(this!.request!); - - return MiraiNavigator.navigate( - context: context, - navigationType: this?.navigationType ?? NavigationType.screen, - navigationStyle: this?.navigationStyle ?? NavigationStyle.push, - widget: widget, - result: this?.result, - arguments: this?.arguments, - ); - } else if (this?.assetPath != null) { - widget = await Mirai.fromAssets(this!.assetPath!, context); - - if (context.mounted && widget != null) { - return MiraiNavigator.navigate( - context: context, - navigationType: this?.navigationType ?? NavigationType.screen, - navigationStyle: this?.navigationStyle ?? NavigationStyle.push, - widget: widget, - result: this?.result, - arguments: this?.arguments, - ); - } - } else { - if (context.mounted) { - return MiraiNavigator.navigate( - context: context, - navigationType: this?.navigationType ?? NavigationType.screen, - navigationStyle: this?.navigationStyle ?? NavigationStyle.push, - routeName: this?.routeName, - result: this?.result, - arguments: this?.arguments, - ); - } - } - - break; - - case ActionType.request: - return MiraiNetwork.request(this!.request!); - case ActionType.none: - break; - } - } - return null; - } -} diff --git a/packages/mirai/lib/src/framework/framework.dart b/packages/mirai/lib/src/framework/framework.dart index e1d07517..27b5ca17 100644 --- a/packages/mirai/lib/src/framework/framework.dart +++ b/packages/mirai/lib/src/framework/framework.dart @@ -1,6 +1,7 @@ library framework; export 'mirai.dart'; +export 'mirai_action_parser.dart'; export 'mirai_app.dart'; export 'mirai_parser.dart'; export 'mirai_registry.dart'; diff --git a/packages/mirai/lib/src/framework/mirai.dart b/packages/mirai/lib/src/framework/mirai.dart index 16cdb4e8..e1d90647 100644 --- a/packages/mirai/lib/src/framework/mirai.dart +++ b/packages/mirai/lib/src/framework/mirai.dart @@ -1,10 +1,10 @@ +import 'dart:async'; import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:mirai/src/framework/mirai_parser.dart'; -import 'package:mirai/src/framework/mirai_registry.dart'; +import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/network/mirai_network.dart'; import 'package:mirai/src/network/mirai_request.dart'; import 'package:mirai/src/parsers/mirai_center/mirai_center_parser.dart'; @@ -56,12 +56,21 @@ class Mirai { const MiraiExpandedParser(), ]; + static final _actionParsers = [ + const MiraiNoneActionParser(), + const MiraiNavigateActionParser(), + const MiraiRequestActionParser(), + ]; + static Future initialize({ List parsers = const [], + List actionParsers = const [], Dio? dio, }) async { _parsers.addAll(parsers); + _actionParsers.addAll(actionParsers); MiraiRegistry.instance.registerAll(_parsers); + MiraiRegistry.instance.registerAllActions(_actionParsers); MiraiNetwork.initialize(dio ?? Dio()); } @@ -83,6 +92,28 @@ class Mirai { return null; } + static FutureOr onCallFromJson( + Map? json, + BuildContext context, + ) { + try { + if (json != null && json['actionType'] != null) { + String actionType = json['actionType']; + MiraiActionParser? miraiActionParser = + MiraiRegistry.instance.getActionParser(actionType); + if (miraiActionParser != null) { + final model = miraiActionParser.getModel(json); + return miraiActionParser.onCall(context, model); + } else { + Log.w('Action type [$actionType] not supported'); + } + } + } catch (e) { + Log.e(e); + } + return null; + } + static Widget fromNetwork( MiraiRequest request, { LoadingWidgetBuilder? loadingWidget, diff --git a/packages/mirai/lib/src/framework/mirai_action_parser.dart b/packages/mirai/lib/src/framework/mirai_action_parser.dart new file mode 100644 index 00000000..1c6ca47c --- /dev/null +++ b/packages/mirai/lib/src/framework/mirai_action_parser.dart @@ -0,0 +1,13 @@ +import 'dart:async'; + +import 'package:flutter/widgets.dart'; + +abstract class MiraiActionParser { + const MiraiActionParser(); + + String get type; + + T getModel(Map json); + + FutureOr onCall(BuildContext context, T model); +} diff --git a/packages/mirai/lib/src/framework/mirai_registry.dart b/packages/mirai/lib/src/framework/mirai_registry.dart index 93b3a667..cbf20589 100644 --- a/packages/mirai/lib/src/framework/mirai_registry.dart +++ b/packages/mirai/lib/src/framework/mirai_registry.dart @@ -12,6 +12,8 @@ class MiraiRegistry { static final _miraiParsers = {}; + static final _miraiActionParsers = {}; + bool register(MiraiParser parser) { final String type = parser.type; if (_miraiParsers.containsKey(type)) { @@ -23,6 +25,17 @@ class MiraiRegistry { } } + bool registerAction(MiraiActionParser parser) { + final String type = parser.type; + if (_miraiActionParsers.containsKey(type)) { + Log.w('Action $type is already registered'); + return false; + } else { + _miraiActionParsers[type] = parser; + return true; + } + } + Future registerAll(List parsers) { return Future.forEach( parsers, @@ -32,7 +45,20 @@ class MiraiRegistry { ); } + Future registerAllActions(List parsers) { + return Future.forEach( + parsers, + (MiraiActionParser parser) { + return registerAction(parser); + }, + ); + } + MiraiParser? getParser(String type) { return _miraiParsers[type]; } + + MiraiActionParser? getActionParser(String type) { + return _miraiActionParsers[type]; + } } diff --git a/packages/mirai/lib/src/parsers/mirai_actions/mirai_actions.dart b/packages/mirai/lib/src/parsers/mirai_actions/mirai_actions.dart new file mode 100644 index 00000000..9f782ea0 --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_actions/mirai_actions.dart @@ -0,0 +1,3 @@ +export 'package:mirai/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action_parser.dart'; +export 'package:mirai/src/parsers/mirai_actions/mirai_none_action/mirai_none_action_parser.dart'; +export 'package:mirai/src/parsers/mirai_actions/mirai_request_action/mirai_request_action_parser.dart'; diff --git a/packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.dart b/packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.dart new file mode 100644 index 00000000..0eb5c3c2 --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.dart @@ -0,0 +1,82 @@ +import 'dart:async'; + +import 'package:flutter/widgets.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:mirai/src/framework/framework.dart'; +import 'package:mirai/src/navigation/mirai_navigator.dart'; +import 'package:mirai/src/network/mirai_request.dart'; + +part 'mirai_navigate_action.freezed.dart'; +part 'mirai_navigate_action.g.dart'; + +@freezed +class MiraiNavigateAction with _$MiraiNavigateAction { + const MiraiNavigateAction._(); + + factory MiraiNavigateAction({ + MiraiRequest? request, + Map? widgetJson, + String? assetPath, + String? routeName, + NavigationType? navigationType, + NavigationStyle? navigationStyle, + Map? result, + Map? arguments, + }) = _MiraiNavigateAction; + + factory MiraiNavigateAction.fromJson(Map json) => + _$MiraiNavigateActionFromJson(json); + + FutureOr? onCall(BuildContext context) async { + Widget? widget; + if (widgetJson != null) { + widget = Mirai.fromJson(widgetJson, context); + + if (widget != null) { + return MiraiNavigator.navigate( + context: context, + navigationType: navigationType ?? NavigationType.screen, + navigationStyle: navigationStyle ?? NavigationStyle.push, + widget: widget, + result: result, + arguments: arguments, + ); + } + } else if (request != null) { + widget = Mirai.fromNetwork(request!); + + return MiraiNavigator.navigate( + context: context, + navigationType: navigationType ?? NavigationType.screen, + navigationStyle: navigationStyle ?? NavigationStyle.push, + widget: widget, + result: result, + arguments: arguments, + ); + } else if (assetPath != null) { + widget = await Mirai.fromAssets(assetPath!, context); + + if (context.mounted && widget != null) { + return MiraiNavigator.navigate( + context: context, + navigationType: navigationType ?? NavigationType.screen, + navigationStyle: navigationStyle ?? NavigationStyle.push, + widget: widget, + result: result, + arguments: arguments, + ); + } + } else { + if (context.mounted) { + return MiraiNavigator.navigate( + context: context, + navigationType: navigationType ?? NavigationType.screen, + navigationStyle: navigationStyle ?? NavigationStyle.push, + routeName: routeName, + result: result, + arguments: arguments, + ); + } + } + } +} diff --git a/packages/mirai/lib/src/action/mirai_action.freezed.dart b/packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.freezed.dart similarity index 77% rename from packages/mirai/lib/src/action/mirai_action.freezed.dart rename to packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.freezed.dart index ec726332..f15ad9df 100644 --- a/packages/mirai/lib/src/action/mirai_action.freezed.dart +++ b/packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.freezed.dart @@ -3,7 +3,7 @@ // 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_action.dart'; +part of 'mirai_navigate_action.dart'; // ************************************************************************** // FreezedGenerator @@ -14,13 +14,12 @@ 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#custom-getters-and-methods'); -MiraiAction _$MiraiActionFromJson(Map json) { - return _MiraiAction.fromJson(json); +MiraiNavigateAction _$MiraiNavigateActionFromJson(Map json) { + return _MiraiNavigateAction.fromJson(json); } /// @nodoc -mixin _$MiraiAction { - ActionType get actionType => throw _privateConstructorUsedError; +mixin _$MiraiNavigateAction { MiraiRequest? get request => throw _privateConstructorUsedError; Map? get widgetJson => throw _privateConstructorUsedError; String? get assetPath => throw _privateConstructorUsedError; @@ -32,19 +31,18 @@ mixin _$MiraiAction { Map toJson() => throw _privateConstructorUsedError; @JsonKey(ignore: true) - $MiraiActionCopyWith get copyWith => + $MiraiNavigateActionCopyWith get copyWith => throw _privateConstructorUsedError; } /// @nodoc -abstract class $MiraiActionCopyWith<$Res> { - factory $MiraiActionCopyWith( - MiraiAction value, $Res Function(MiraiAction) then) = - _$MiraiActionCopyWithImpl<$Res, MiraiAction>; +abstract class $MiraiNavigateActionCopyWith<$Res> { + factory $MiraiNavigateActionCopyWith( + MiraiNavigateAction value, $Res Function(MiraiNavigateAction) then) = + _$MiraiNavigateActionCopyWithImpl<$Res, MiraiNavigateAction>; @useResult $Res call( - {ActionType actionType, - MiraiRequest? request, + {MiraiRequest? request, Map? widgetJson, String? assetPath, String? routeName, @@ -57,9 +55,9 @@ abstract class $MiraiActionCopyWith<$Res> { } /// @nodoc -class _$MiraiActionCopyWithImpl<$Res, $Val extends MiraiAction> - implements $MiraiActionCopyWith<$Res> { - _$MiraiActionCopyWithImpl(this._value, this._then); +class _$MiraiNavigateActionCopyWithImpl<$Res, $Val extends MiraiNavigateAction> + implements $MiraiNavigateActionCopyWith<$Res> { + _$MiraiNavigateActionCopyWithImpl(this._value, this._then); // ignore: unused_field final $Val _value; @@ -69,7 +67,6 @@ class _$MiraiActionCopyWithImpl<$Res, $Val extends MiraiAction> @pragma('vm:prefer-inline') @override $Res call({ - Object? actionType = null, Object? request = freezed, Object? widgetJson = freezed, Object? assetPath = freezed, @@ -80,10 +77,6 @@ class _$MiraiActionCopyWithImpl<$Res, $Val extends MiraiAction> Object? arguments = freezed, }) { return _then(_value.copyWith( - actionType: null == actionType - ? _value.actionType - : actionType // ignore: cast_nullable_to_non_nullable - as ActionType, request: freezed == request ? _value.request : request // ignore: cast_nullable_to_non_nullable @@ -133,16 +126,15 @@ class _$MiraiActionCopyWithImpl<$Res, $Val extends MiraiAction> } /// @nodoc -abstract class _$$_MiraiActionCopyWith<$Res> - implements $MiraiActionCopyWith<$Res> { - factory _$$_MiraiActionCopyWith( - _$_MiraiAction value, $Res Function(_$_MiraiAction) then) = - __$$_MiraiActionCopyWithImpl<$Res>; +abstract class _$$_MiraiNavigateActionCopyWith<$Res> + implements $MiraiNavigateActionCopyWith<$Res> { + factory _$$_MiraiNavigateActionCopyWith(_$_MiraiNavigateAction value, + $Res Function(_$_MiraiNavigateAction) then) = + __$$_MiraiNavigateActionCopyWithImpl<$Res>; @override @useResult $Res call( - {ActionType actionType, - MiraiRequest? request, + {MiraiRequest? request, Map? widgetJson, String? assetPath, String? routeName, @@ -156,17 +148,16 @@ abstract class _$$_MiraiActionCopyWith<$Res> } /// @nodoc -class __$$_MiraiActionCopyWithImpl<$Res> - extends _$MiraiActionCopyWithImpl<$Res, _$_MiraiAction> - implements _$$_MiraiActionCopyWith<$Res> { - __$$_MiraiActionCopyWithImpl( - _$_MiraiAction _value, $Res Function(_$_MiraiAction) _then) +class __$$_MiraiNavigateActionCopyWithImpl<$Res> + extends _$MiraiNavigateActionCopyWithImpl<$Res, _$_MiraiNavigateAction> + implements _$$_MiraiNavigateActionCopyWith<$Res> { + __$$_MiraiNavigateActionCopyWithImpl(_$_MiraiNavigateAction _value, + $Res Function(_$_MiraiNavigateAction) _then) : super(_value, _then); @pragma('vm:prefer-inline') @override $Res call({ - Object? actionType = null, Object? request = freezed, Object? widgetJson = freezed, Object? assetPath = freezed, @@ -176,11 +167,7 @@ class __$$_MiraiActionCopyWithImpl<$Res> Object? result = freezed, Object? arguments = freezed, }) { - return _then(_$_MiraiAction( - actionType: null == actionType - ? _value.actionType - : actionType // ignore: cast_nullable_to_non_nullable - as ActionType, + return _then(_$_MiraiNavigateAction( request: freezed == request ? _value.request : request // ignore: cast_nullable_to_non_nullable @@ -219,10 +206,9 @@ class __$$_MiraiActionCopyWithImpl<$Res> /// @nodoc @JsonSerializable() -class _$_MiraiAction implements _MiraiAction { - _$_MiraiAction( - {this.actionType = ActionType.none, - this.request, +class _$_MiraiNavigateAction extends _MiraiNavigateAction { + _$_MiraiNavigateAction( + {this.request, final Map? widgetJson, this.assetPath, this.routeName, @@ -232,14 +218,12 @@ class _$_MiraiAction implements _MiraiAction { final Map? arguments}) : _widgetJson = widgetJson, _result = result, - _arguments = arguments; + _arguments = arguments, + super._(); - factory _$_MiraiAction.fromJson(Map json) => - _$$_MiraiActionFromJson(json); + factory _$_MiraiNavigateAction.fromJson(Map json) => + _$$_MiraiNavigateActionFromJson(json); - @override - @JsonKey() - final ActionType actionType; @override final MiraiRequest? request; final Map? _widgetJson; @@ -282,16 +266,14 @@ class _$_MiraiAction implements _MiraiAction { @override String toString() { - return 'MiraiAction(actionType: $actionType, request: $request, widgetJson: $widgetJson, assetPath: $assetPath, routeName: $routeName, navigationType: $navigationType, navigationStyle: $navigationStyle, result: $result, arguments: $arguments)'; + return 'MiraiNavigateAction(request: $request, widgetJson: $widgetJson, assetPath: $assetPath, routeName: $routeName, navigationType: $navigationType, navigationStyle: $navigationStyle, result: $result, arguments: $arguments)'; } @override bool operator ==(dynamic other) { return identical(this, other) || (other.runtimeType == runtimeType && - other is _$_MiraiAction && - (identical(other.actionType, actionType) || - other.actionType == actionType) && + other is _$_MiraiNavigateAction && (identical(other.request, request) || other.request == request) && const DeepCollectionEquality() .equals(other._widgetJson, _widgetJson) && @@ -312,7 +294,6 @@ class _$_MiraiAction implements _MiraiAction { @override int get hashCode => Object.hash( runtimeType, - actionType, request, const DeepCollectionEquality().hash(_widgetJson), assetPath, @@ -325,34 +306,33 @@ class _$_MiraiAction implements _MiraiAction { @JsonKey(ignore: true) @override @pragma('vm:prefer-inline') - _$$_MiraiActionCopyWith<_$_MiraiAction> get copyWith => - __$$_MiraiActionCopyWithImpl<_$_MiraiAction>(this, _$identity); + _$$_MiraiNavigateActionCopyWith<_$_MiraiNavigateAction> get copyWith => + __$$_MiraiNavigateActionCopyWithImpl<_$_MiraiNavigateAction>( + this, _$identity); @override Map toJson() { - return _$$_MiraiActionToJson( + return _$$_MiraiNavigateActionToJson( this, ); } } -abstract class _MiraiAction implements MiraiAction { - factory _MiraiAction( - {final ActionType actionType, - final MiraiRequest? request, +abstract class _MiraiNavigateAction extends MiraiNavigateAction { + factory _MiraiNavigateAction( + {final MiraiRequest? request, final Map? widgetJson, final String? assetPath, final String? routeName, final NavigationType? navigationType, final NavigationStyle? navigationStyle, final Map? result, - final Map? arguments}) = _$_MiraiAction; + final Map? arguments}) = _$_MiraiNavigateAction; + _MiraiNavigateAction._() : super._(); - factory _MiraiAction.fromJson(Map json) = - _$_MiraiAction.fromJson; + factory _MiraiNavigateAction.fromJson(Map json) = + _$_MiraiNavigateAction.fromJson; - @override - ActionType get actionType; @override MiraiRequest? get request; @override @@ -371,6 +351,6 @@ abstract class _MiraiAction implements MiraiAction { Map? get arguments; @override @JsonKey(ignore: true) - _$$_MiraiActionCopyWith<_$_MiraiAction> get copyWith => + _$$_MiraiNavigateActionCopyWith<_$_MiraiNavigateAction> get copyWith => throw _privateConstructorUsedError; } diff --git a/packages/mirai/lib/src/action/mirai_action.g.dart b/packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.g.dart similarity index 78% rename from packages/mirai/lib/src/action/mirai_action.g.dart rename to packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.g.dart index a297021e..6516c650 100644 --- a/packages/mirai/lib/src/action/mirai_action.g.dart +++ b/packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.g.dart @@ -1,16 +1,14 @@ // GENERATED CODE - DO NOT MODIFY BY HAND -part of 'mirai_action.dart'; +part of 'mirai_navigate_action.dart'; // ************************************************************************** // JsonSerializableGenerator // ************************************************************************** -_$_MiraiAction _$$_MiraiActionFromJson(Map json) => - _$_MiraiAction( - actionType: - $enumDecodeNullable(_$ActionTypeEnumMap, json['actionType']) ?? - ActionType.none, +_$_MiraiNavigateAction _$$_MiraiNavigateActionFromJson( + Map json) => + _$_MiraiNavigateAction( request: json['request'] == null ? null : MiraiRequest.fromJson(json['request'] as Map), @@ -25,9 +23,9 @@ _$_MiraiAction _$$_MiraiActionFromJson(Map json) => arguments: json['arguments'] as Map?, ); -Map _$$_MiraiActionToJson(_$_MiraiAction instance) => +Map _$$_MiraiNavigateActionToJson( + _$_MiraiNavigateAction instance) => { - 'actionType': _$ActionTypeEnumMap[instance.actionType]!, 'request': instance.request, 'widgetJson': instance.widgetJson, 'assetPath': instance.assetPath, @@ -38,12 +36,6 @@ Map _$$_MiraiActionToJson(_$_MiraiAction instance) => 'arguments': instance.arguments, }; -const _$ActionTypeEnumMap = { - ActionType.navigate: 'navigate', - ActionType.request: 'request', - ActionType.none: 'none', -}; - const _$NavigationTypeEnumMap = { NavigationType.screen: 'screen', NavigationType.dialog: 'dialog', diff --git a/packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action_parser.dart b/packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action_parser.dart new file mode 100644 index 00000000..e53e3925 --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action_parser.dart @@ -0,0 +1,19 @@ +import 'dart:async'; + +import 'package:flutter/widgets.dart'; +import 'package:mirai/src/framework/framework.dart'; +import 'package:mirai/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.dart'; + +class MiraiNavigateActionParser extends MiraiActionParser { + const MiraiNavigateActionParser(); + + @override + String get type => "navigate"; + + @override + getModel(Map json) => MiraiNavigateAction.fromJson(json); + + @override + FutureOr onCall(BuildContext context, MiraiNavigateAction model) => + model.onCall(context); +} diff --git a/packages/mirai/lib/src/parsers/mirai_actions/mirai_none_action/mirai_none_action_parser.dart b/packages/mirai/lib/src/parsers/mirai_actions/mirai_none_action/mirai_none_action_parser.dart new file mode 100644 index 00000000..62600678 --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_actions/mirai_none_action/mirai_none_action_parser.dart @@ -0,0 +1,17 @@ +import 'dart:async'; + +import 'package:flutter/widgets.dart'; +import 'package:mirai/src/framework/framework.dart'; + +class MiraiNoneActionParser extends MiraiActionParser> { + const MiraiNoneActionParser(); + + @override + String get type => "none"; + + @override + getModel(Map json) => json; + + @override + FutureOr onCall(BuildContext context, Map model) {} +} diff --git a/packages/mirai/lib/src/parsers/mirai_actions/mirai_request_action/mirai_request_action_parser.dart b/packages/mirai/lib/src/parsers/mirai_actions/mirai_request_action/mirai_request_action_parser.dart new file mode 100644 index 00000000..ed7ac7dc --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_actions/mirai_request_action/mirai_request_action_parser.dart @@ -0,0 +1,21 @@ +import 'dart:async'; + +import 'package:flutter/widgets.dart'; +import 'package:mirai/src/framework/framework.dart'; +import 'package:mirai/src/network/mirai_network.dart'; +import 'package:mirai/src/network/mirai_request.dart'; + +class MiraiRequestActionParser extends MiraiActionParser { + const MiraiRequestActionParser(); + + @override + String get type => "request"; + + @override + getModel(Map json) => MiraiRequest.fromJson(json); + + @override + FutureOr onCall(BuildContext context, MiraiRequest model) { + return MiraiNetwork.request(model); + } +} diff --git a/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.dart b/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.dart index 521b5f2c..48230cae 100644 --- a/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.dart +++ b/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:mirai/src/action/mirai_action.dart'; +import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/mirai_button_style/mirai_button_style.dart'; export 'package:mirai/src/parsers/mirai_elevated_button/mirai_elevated_button_parser.dart'; @@ -11,7 +11,7 @@ part 'mirai_elevated_button.g.dart'; @freezed class MiraiElevatedButton with _$MiraiElevatedButton { const factory MiraiElevatedButton({ - MiraiAction? onPressed, + Map? onPressed, MiraiButtonStyle? style, @Default(false) bool autofocus, @Default(Clip.none) Clip clipBehavior, diff --git a/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.freezed.dart b/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.freezed.dart index 6e1e1907..4c91a82b 100644 --- a/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.freezed.dart +++ b/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.freezed.dart @@ -20,7 +20,7 @@ MiraiElevatedButton _$MiraiElevatedButtonFromJson(Map json) { /// @nodoc mixin _$MiraiElevatedButton { - MiraiAction? get onPressed => throw _privateConstructorUsedError; + Map? get onPressed => throw _privateConstructorUsedError; MiraiButtonStyle? get style => throw _privateConstructorUsedError; bool get autofocus => throw _privateConstructorUsedError; Clip get clipBehavior => throw _privateConstructorUsedError; @@ -39,13 +39,12 @@ abstract class $MiraiElevatedButtonCopyWith<$Res> { _$MiraiElevatedButtonCopyWithImpl<$Res, MiraiElevatedButton>; @useResult $Res call( - {MiraiAction? onPressed, + {Map? onPressed, MiraiButtonStyle? style, bool autofocus, Clip clipBehavior, Map child}); - $MiraiActionCopyWith<$Res>? get onPressed; $MiraiButtonStyleCopyWith<$Res>? get style; } @@ -72,7 +71,7 @@ class _$MiraiElevatedButtonCopyWithImpl<$Res, $Val extends MiraiElevatedButton> onPressed: freezed == onPressed ? _value.onPressed : onPressed // ignore: cast_nullable_to_non_nullable - as MiraiAction?, + as Map?, style: freezed == style ? _value.style : style // ignore: cast_nullable_to_non_nullable @@ -92,18 +91,6 @@ class _$MiraiElevatedButtonCopyWithImpl<$Res, $Val extends MiraiElevatedButton> ) as $Val); } - @override - @pragma('vm:prefer-inline') - $MiraiActionCopyWith<$Res>? get onPressed { - if (_value.onPressed == null) { - return null; - } - - return $MiraiActionCopyWith<$Res>(_value.onPressed!, (value) { - return _then(_value.copyWith(onPressed: value) as $Val); - }); - } - @override @pragma('vm:prefer-inline') $MiraiButtonStyleCopyWith<$Res>? get style { @@ -126,14 +113,12 @@ abstract class _$$_MiraiElevatedButtonCopyWith<$Res> @override @useResult $Res call( - {MiraiAction? onPressed, + {Map? onPressed, MiraiButtonStyle? style, bool autofocus, Clip clipBehavior, Map child}); - @override - $MiraiActionCopyWith<$Res>? get onPressed; @override $MiraiButtonStyleCopyWith<$Res>? get style; } @@ -157,9 +142,9 @@ class __$$_MiraiElevatedButtonCopyWithImpl<$Res> }) { return _then(_$_MiraiElevatedButton( onPressed: freezed == onPressed - ? _value.onPressed + ? _value._onPressed : onPressed // ignore: cast_nullable_to_non_nullable - as MiraiAction?, + as Map?, style: freezed == style ? _value.style : style // ignore: cast_nullable_to_non_nullable @@ -184,18 +169,27 @@ class __$$_MiraiElevatedButtonCopyWithImpl<$Res> @JsonSerializable() class _$_MiraiElevatedButton implements _MiraiElevatedButton { const _$_MiraiElevatedButton( - {this.onPressed, + {final Map? onPressed, this.style, this.autofocus = false, this.clipBehavior = Clip.none, required final Map child}) - : _child = child; + : _onPressed = onPressed, + _child = child; factory _$_MiraiElevatedButton.fromJson(Map json) => _$$_MiraiElevatedButtonFromJson(json); + final Map? _onPressed; @override - final MiraiAction? onPressed; + Map? get onPressed { + final value = _onPressed; + if (value == null) return null; + if (_onPressed is EqualUnmodifiableMapView) return _onPressed; + // ignore: implicit_dynamic_type + return EqualUnmodifiableMapView(value); + } + @override final MiraiButtonStyle? style; @override @@ -222,8 +216,8 @@ class _$_MiraiElevatedButton implements _MiraiElevatedButton { return identical(this, other) || (other.runtimeType == runtimeType && other is _$_MiraiElevatedButton && - (identical(other.onPressed, onPressed) || - other.onPressed == onPressed) && + const DeepCollectionEquality() + .equals(other._onPressed, _onPressed) && (identical(other.style, style) || other.style == style) && (identical(other.autofocus, autofocus) || other.autofocus == autofocus) && @@ -234,8 +228,13 @@ class _$_MiraiElevatedButton implements _MiraiElevatedButton { @JsonKey(ignore: true) @override - int get hashCode => Object.hash(runtimeType, onPressed, style, autofocus, - clipBehavior, const DeepCollectionEquality().hash(_child)); + int get hashCode => Object.hash( + runtimeType, + const DeepCollectionEquality().hash(_onPressed), + style, + autofocus, + clipBehavior, + const DeepCollectionEquality().hash(_child)); @JsonKey(ignore: true) @override @@ -254,7 +253,7 @@ class _$_MiraiElevatedButton implements _MiraiElevatedButton { abstract class _MiraiElevatedButton implements MiraiElevatedButton { const factory _MiraiElevatedButton( - {final MiraiAction? onPressed, + {final Map? onPressed, final MiraiButtonStyle? style, final bool autofocus, final Clip clipBehavior, @@ -264,7 +263,7 @@ abstract class _MiraiElevatedButton implements MiraiElevatedButton { _$_MiraiElevatedButton.fromJson; @override - MiraiAction? get onPressed; + Map? get onPressed; @override MiraiButtonStyle? get style; @override diff --git a/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.g.dart b/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.g.dart index 647b16e9..208468bf 100644 --- a/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.g.dart +++ b/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.g.dart @@ -9,9 +9,7 @@ part of 'mirai_elevated_button.dart'; _$_MiraiElevatedButton _$$_MiraiElevatedButtonFromJson( Map json) => _$_MiraiElevatedButton( - onPressed: json['onPressed'] == null - ? null - : MiraiAction.fromJson(json['onPressed'] as Map), + onPressed: json['onPressed'] as Map?, style: json['style'] == null ? null : MiraiButtonStyle.fromJson(json['style'] as Map), diff --git a/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button_parser.dart b/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button_parser.dart index e199ac80..74d206df 100644 --- a/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button_parser.dart +++ b/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button_parser.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:mirai/src/action/mirai_action_parser.dart'; import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/parsers.dart'; import 'package:mirai/src/utils/widget_type.dart'; @@ -19,7 +18,7 @@ class MiraiElevatedButtonParser extends MiraiParser { return ElevatedButton( onPressed: model.onPressed == null ? null - : () => model.onPressed.onCall(context), + : () => Mirai.onCallFromJson(model.onPressed, context), autofocus: model.autofocus, style: model.style?.parseElevated, clipBehavior: model.clipBehavior, diff --git a/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.dart b/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.dart index 7308e723..79389c91 100644 --- a/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.dart +++ b/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.dart @@ -1,5 +1,5 @@ import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:mirai/src/action/mirai_action.dart'; +import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/mirai_text_style/mirai_text_style.dart'; import 'package:mirai/src/utils/button_utils.dart'; @@ -11,7 +11,7 @@ part 'mirai_floating_action_button.g.dart'; @freezed class MiraiFloatingActionButton with _$MiraiFloatingActionButton { const factory MiraiFloatingActionButton({ - MiraiAction? onPressed, + Map? onPressed, MiraiTextStyle? textStyle, @Default(FloatingActionButtonType.small) FloatingActionButtonType buttonType, diff --git a/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.freezed.dart b/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.freezed.dart index ca2d1280..1cfc4013 100644 --- a/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.freezed.dart +++ b/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.freezed.dart @@ -21,7 +21,7 @@ MiraiFloatingActionButton _$MiraiFloatingActionButtonFromJson( /// @nodoc mixin _$MiraiFloatingActionButton { - MiraiAction? get onPressed => throw _privateConstructorUsedError; + Map? get onPressed => throw _privateConstructorUsedError; MiraiTextStyle? get textStyle => throw _privateConstructorUsedError; FloatingActionButtonType get buttonType => throw _privateConstructorUsedError; bool get autofocus => throw _privateConstructorUsedError; @@ -56,7 +56,7 @@ abstract class $MiraiFloatingActionButtonCopyWith<$Res> { _$MiraiFloatingActionButtonCopyWithImpl<$Res, MiraiFloatingActionButton>; @useResult $Res call( - {MiraiAction? onPressed, + {Map? onPressed, MiraiTextStyle? textStyle, FloatingActionButtonType buttonType, bool autofocus, @@ -78,7 +78,6 @@ abstract class $MiraiFloatingActionButtonCopyWith<$Res> { Object? heroTag, Map child}); - $MiraiActionCopyWith<$Res>? get onPressed; $MiraiTextStyleCopyWith<$Res>? get textStyle; $MiraiTextStyleCopyWith<$Res>? get extendedTextStyle; } @@ -123,7 +122,7 @@ class _$MiraiFloatingActionButtonCopyWithImpl<$Res, onPressed: freezed == onPressed ? _value.onPressed : onPressed // ignore: cast_nullable_to_non_nullable - as MiraiAction?, + as Map?, textStyle: freezed == textStyle ? _value.textStyle : textStyle // ignore: cast_nullable_to_non_nullable @@ -204,18 +203,6 @@ class _$MiraiFloatingActionButtonCopyWithImpl<$Res, ) as $Val); } - @override - @pragma('vm:prefer-inline') - $MiraiActionCopyWith<$Res>? get onPressed { - if (_value.onPressed == null) { - return null; - } - - return $MiraiActionCopyWith<$Res>(_value.onPressed!, (value) { - return _then(_value.copyWith(onPressed: value) as $Val); - }); - } - @override @pragma('vm:prefer-inline') $MiraiTextStyleCopyWith<$Res>? get textStyle { @@ -251,7 +238,7 @@ abstract class _$$_MiraiFloatingActionButtonCopyWith<$Res> @override @useResult $Res call( - {MiraiAction? onPressed, + {Map? onPressed, MiraiTextStyle? textStyle, FloatingActionButtonType buttonType, bool autofocus, @@ -273,8 +260,6 @@ abstract class _$$_MiraiFloatingActionButtonCopyWith<$Res> Object? heroTag, Map child}); - @override - $MiraiActionCopyWith<$Res>? get onPressed; @override $MiraiTextStyleCopyWith<$Res>? get textStyle; @override @@ -318,9 +303,9 @@ class __$$_MiraiFloatingActionButtonCopyWithImpl<$Res> }) { return _then(_$_MiraiFloatingActionButton( onPressed: freezed == onPressed - ? _value.onPressed + ? _value._onPressed : onPressed // ignore: cast_nullable_to_non_nullable - as MiraiAction?, + as Map?, textStyle: freezed == textStyle ? _value.textStyle : textStyle // ignore: cast_nullable_to_non_nullable @@ -406,7 +391,7 @@ class __$$_MiraiFloatingActionButtonCopyWithImpl<$Res> @JsonSerializable() class _$_MiraiFloatingActionButton implements _MiraiFloatingActionButton { const _$_MiraiFloatingActionButton( - {this.onPressed, + {final Map? onPressed, this.textStyle, this.buttonType = FloatingActionButtonType.small, this.autofocus = false, @@ -427,14 +412,23 @@ class _$_MiraiFloatingActionButton implements _MiraiFloatingActionButton { this.tooltip, this.heroTag, required final Map child}) - : _icon = icon, + : _onPressed = onPressed, + _icon = icon, _child = child; factory _$_MiraiFloatingActionButton.fromJson(Map json) => _$$_MiraiFloatingActionButtonFromJson(json); + final Map? _onPressed; @override - final MiraiAction? onPressed; + Map? get onPressed { + final value = _onPressed; + if (value == null) return null; + if (_onPressed is EqualUnmodifiableMapView) return _onPressed; + // ignore: implicit_dynamic_type + return EqualUnmodifiableMapView(value); + } + @override final MiraiTextStyle? textStyle; @override @@ -501,8 +495,8 @@ class _$_MiraiFloatingActionButton implements _MiraiFloatingActionButton { return identical(this, other) || (other.runtimeType == runtimeType && other is _$_MiraiFloatingActionButton && - (identical(other.onPressed, onPressed) || - other.onPressed == onPressed) && + const DeepCollectionEquality() + .equals(other._onPressed, _onPressed) && (identical(other.textStyle, textStyle) || other.textStyle == textStyle) && (identical(other.buttonType, buttonType) || @@ -546,7 +540,7 @@ class _$_MiraiFloatingActionButton implements _MiraiFloatingActionButton { @override int get hashCode => Object.hashAll([ runtimeType, - onPressed, + const DeepCollectionEquality().hash(_onPressed), textStyle, buttonType, autofocus, @@ -586,7 +580,7 @@ class _$_MiraiFloatingActionButton implements _MiraiFloatingActionButton { abstract class _MiraiFloatingActionButton implements MiraiFloatingActionButton { const factory _MiraiFloatingActionButton( - {final MiraiAction? onPressed, + {final Map? onPressed, final MiraiTextStyle? textStyle, final FloatingActionButtonType buttonType, final bool autofocus, @@ -613,7 +607,7 @@ abstract class _MiraiFloatingActionButton implements MiraiFloatingActionButton { _$_MiraiFloatingActionButton.fromJson; @override - MiraiAction? get onPressed; + Map? get onPressed; @override MiraiTextStyle? get textStyle; @override diff --git a/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.g.dart b/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.g.dart index 4517cfd9..ee8c4e29 100644 --- a/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.g.dart +++ b/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.g.dart @@ -9,9 +9,7 @@ part of 'mirai_floating_action_button.dart'; _$_MiraiFloatingActionButton _$$_MiraiFloatingActionButtonFromJson( Map json) => _$_MiraiFloatingActionButton( - onPressed: json['onPressed'] == null - ? null - : MiraiAction.fromJson(json['onPressed'] as Map), + onPressed: json['onPressed'] as Map?, textStyle: json['textStyle'] == null ? null : MiraiTextStyle.fromJson(json['textStyle'] as Map), diff --git a/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button_parser.dart b/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button_parser.dart index c892a7ba..da8ed10e 100644 --- a/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button_parser.dart +++ b/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button_parser.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:mirai/src/action/mirai_action_parser.dart'; import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/mirai_floating_action_button/mirai_floating_action_button.dart'; import 'package:mirai/src/parsers/mirai_text_style/mirai_text_style.dart'; @@ -25,7 +24,7 @@ class MiraiFloatingActionButtonParser return FloatingActionButton.extended( onPressed: model.onPressed == null ? null - : () => model.onPressed.onCall(context), + : () => Mirai.onCallFromJson(model.onPressed, context), icon: Mirai.fromJson(model.icon, context), backgroundColor: model.backgroundColor?.toColor, foregroundColor: model.foregroundColor?.toColor, @@ -50,7 +49,7 @@ class MiraiFloatingActionButtonParser return FloatingActionButton.large( onPressed: model.onPressed == null ? null - : () => model.onPressed.onCall(context), + : () => Mirai.onCallFromJson(model.onPressed, context), backgroundColor: model.backgroundColor?.toColor, foregroundColor: model.foregroundColor?.toColor, focusColor: model.focusColor?.toColor, @@ -72,7 +71,7 @@ class MiraiFloatingActionButtonParser return FloatingActionButton( onPressed: model.onPressed == null ? null - : () => model.onPressed.onCall(context), + : () => Mirai.onCallFromJson(model.onPressed, context), backgroundColor: model.backgroundColor?.toColor, foregroundColor: model.foregroundColor?.toColor, focusColor: model.focusColor?.toColor, @@ -94,7 +93,7 @@ class MiraiFloatingActionButtonParser return FloatingActionButton.small( onPressed: model.onPressed == null ? null - : () => model.onPressed.onCall(context), + : () => Mirai.onCallFromJson(model.onPressed, context), backgroundColor: model.backgroundColor?.toColor, foregroundColor: model.foregroundColor?.toColor, focusColor: model.focusColor?.toColor, diff --git a/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.dart b/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.dart index ccd1c5f8..de2c3b09 100644 --- a/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.dart +++ b/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.dart @@ -1,5 +1,5 @@ import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:mirai/src/action/mirai_action.dart'; +import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/mirai_alignment/mirai_alignment.dart'; import 'package:mirai/src/parsers/mirai_button_style/mirai_button_style.dart'; import 'package:mirai/src/parsers/mirai_edge_insets/mirai_edge_insets.dart'; @@ -12,7 +12,7 @@ part 'mirai_icon_button.g.dart'; @freezed class MiraiIconButton with _$MiraiIconButton { const factory MiraiIconButton({ - MiraiAction? onPressed, + Map? onPressed, double? iconSize, MiraiEdgeInsets? padding, @Default(MiraiAlignment.center) MiraiAlignment alignment, diff --git a/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.freezed.dart b/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.freezed.dart index 0420ca73..da4b283e 100644 --- a/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.freezed.dart +++ b/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.freezed.dart @@ -20,7 +20,7 @@ MiraiIconButton _$MiraiIconButtonFromJson(Map json) { /// @nodoc mixin _$MiraiIconButton { - MiraiAction? get onPressed => throw _privateConstructorUsedError; + Map? get onPressed => throw _privateConstructorUsedError; double? get iconSize => throw _privateConstructorUsedError; MiraiEdgeInsets? get padding => throw _privateConstructorUsedError; MiraiAlignment get alignment => throw _privateConstructorUsedError; @@ -50,7 +50,7 @@ abstract class $MiraiIconButtonCopyWith<$Res> { _$MiraiIconButtonCopyWithImpl<$Res, MiraiIconButton>; @useResult $Res call( - {MiraiAction? onPressed, + {Map? onPressed, double? iconSize, MiraiEdgeInsets? padding, MiraiAlignment alignment, @@ -67,7 +67,6 @@ abstract class $MiraiIconButtonCopyWith<$Res> { Map? selectedIcon, Map child}); - $MiraiActionCopyWith<$Res>? get onPressed; $MiraiEdgeInsetsCopyWith<$Res>? get padding; $MiraiButtonStyleCopyWith<$Res>? get style; } @@ -106,7 +105,7 @@ class _$MiraiIconButtonCopyWithImpl<$Res, $Val extends MiraiIconButton> onPressed: freezed == onPressed ? _value.onPressed : onPressed // ignore: cast_nullable_to_non_nullable - as MiraiAction?, + as Map?, iconSize: freezed == iconSize ? _value.iconSize : iconSize // ignore: cast_nullable_to_non_nullable @@ -170,18 +169,6 @@ class _$MiraiIconButtonCopyWithImpl<$Res, $Val extends MiraiIconButton> ) as $Val); } - @override - @pragma('vm:prefer-inline') - $MiraiActionCopyWith<$Res>? get onPressed { - if (_value.onPressed == null) { - return null; - } - - return $MiraiActionCopyWith<$Res>(_value.onPressed!, (value) { - return _then(_value.copyWith(onPressed: value) as $Val); - }); - } - @override @pragma('vm:prefer-inline') $MiraiEdgeInsetsCopyWith<$Res>? get padding { @@ -216,7 +203,7 @@ abstract class _$$_MiraiIconButtonCopyWith<$Res> @override @useResult $Res call( - {MiraiAction? onPressed, + {Map? onPressed, double? iconSize, MiraiEdgeInsets? padding, MiraiAlignment alignment, @@ -233,8 +220,6 @@ abstract class _$$_MiraiIconButtonCopyWith<$Res> Map? selectedIcon, Map child}); - @override - $MiraiActionCopyWith<$Res>? get onPressed; @override $MiraiEdgeInsetsCopyWith<$Res>? get padding; @override @@ -271,9 +256,9 @@ class __$$_MiraiIconButtonCopyWithImpl<$Res> }) { return _then(_$_MiraiIconButton( onPressed: freezed == onPressed - ? _value.onPressed + ? _value._onPressed : onPressed // ignore: cast_nullable_to_non_nullable - as MiraiAction?, + as Map?, iconSize: freezed == iconSize ? _value.iconSize : iconSize // ignore: cast_nullable_to_non_nullable @@ -339,7 +324,7 @@ class __$$_MiraiIconButtonCopyWithImpl<$Res> @JsonSerializable() class _$_MiraiIconButton implements _MiraiIconButton { const _$_MiraiIconButton( - {this.onPressed, + {final Map? onPressed, this.iconSize, this.padding, this.alignment = MiraiAlignment.center, @@ -355,14 +340,23 @@ class _$_MiraiIconButton implements _MiraiIconButton { this.isSelected, final Map? selectedIcon, required final Map child}) - : _selectedIcon = selectedIcon, + : _onPressed = onPressed, + _selectedIcon = selectedIcon, _child = child; factory _$_MiraiIconButton.fromJson(Map json) => _$$_MiraiIconButtonFromJson(json); + final Map? _onPressed; @override - final MiraiAction? onPressed; + Map? get onPressed { + final value = _onPressed; + if (value == null) return null; + if (_onPressed is EqualUnmodifiableMapView) return _onPressed; + // ignore: implicit_dynamic_type + return EqualUnmodifiableMapView(value); + } + @override final double? iconSize; @override @@ -419,8 +413,8 @@ class _$_MiraiIconButton implements _MiraiIconButton { return identical(this, other) || (other.runtimeType == runtimeType && other is _$_MiraiIconButton && - (identical(other.onPressed, onPressed) || - other.onPressed == onPressed) && + const DeepCollectionEquality() + .equals(other._onPressed, _onPressed) && (identical(other.iconSize, iconSize) || other.iconSize == iconSize) && (identical(other.padding, padding) || other.padding == padding) && @@ -452,7 +446,7 @@ class _$_MiraiIconButton implements _MiraiIconButton { @override int get hashCode => Object.hash( runtimeType, - onPressed, + const DeepCollectionEquality().hash(_onPressed), iconSize, padding, alignment, @@ -485,7 +479,7 @@ class _$_MiraiIconButton implements _MiraiIconButton { abstract class _MiraiIconButton implements MiraiIconButton { const factory _MiraiIconButton( - {final MiraiAction? onPressed, + {final Map? onPressed, final double? iconSize, final MiraiEdgeInsets? padding, final MiraiAlignment alignment, @@ -506,7 +500,7 @@ abstract class _MiraiIconButton implements MiraiIconButton { _$_MiraiIconButton.fromJson; @override - MiraiAction? get onPressed; + Map? get onPressed; @override double? get iconSize; @override diff --git a/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.g.dart b/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.g.dart index bad56a88..bde6aec0 100644 --- a/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.g.dart +++ b/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.g.dart @@ -8,9 +8,7 @@ part of 'mirai_icon_button.dart'; _$_MiraiIconButton _$$_MiraiIconButtonFromJson(Map json) => _$_MiraiIconButton( - onPressed: json['onPressed'] == null - ? null - : MiraiAction.fromJson(json['onPressed'] as Map), + onPressed: json['onPressed'] as Map?, iconSize: (json['iconSize'] as num?)?.toDouble(), padding: json['padding'] == null ? null diff --git a/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button_parser.dart b/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button_parser.dart index ab81062a..0f177247 100644 --- a/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button_parser.dart +++ b/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button_parser.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:mirai/src/action/mirai_action_parser.dart'; import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/parsers.dart'; import 'package:mirai/src/utils/color_utils.dart'; @@ -20,7 +19,7 @@ class MiraiIconButtonParser extends MiraiParser { return IconButton( onPressed: model.onPressed == null ? null - : () => model.onPressed.onCall(context), + : () => Mirai.onCallFromJson(model.onPressed, context), iconSize: model.iconSize, padding: model.padding?.parse, alignment: model.alignment.value, diff --git a/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.dart b/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.dart index a1b41109..ee0f43f0 100644 --- a/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.dart +++ b/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:mirai/src/action/mirai_action.dart'; +import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/mirai_edge_insets/mirai_edge_insets.dart'; export 'package:mirai/src/parsers/mirai_list_tile/mirai_list_tile_parser.dart'; @@ -11,8 +11,8 @@ part 'mirai_list_tile.g.dart'; @freezed class MiraiListTile with _$MiraiListTile { const factory MiraiListTile({ - MiraiAction? onTap, - MiraiAction? onLongPress, + Map? onTap, + Map? onLongPress, Map? leading, Map? title, Map? subtitle, diff --git a/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.freezed.dart b/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.freezed.dart index 13fcc734..8a9c69f8 100644 --- a/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.freezed.dart +++ b/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.freezed.dart @@ -20,8 +20,8 @@ MiraiListTile _$MiraiListTileFromJson(Map json) { /// @nodoc mixin _$MiraiListTile { - MiraiAction? get onTap => throw _privateConstructorUsedError; - MiraiAction? get onLongPress => throw _privateConstructorUsedError; + Map? get onTap => throw _privateConstructorUsedError; + Map? get onLongPress => throw _privateConstructorUsedError; Map? get leading => throw _privateConstructorUsedError; Map? get title => throw _privateConstructorUsedError; Map? get subtitle => throw _privateConstructorUsedError; @@ -58,8 +58,8 @@ abstract class $MiraiListTileCopyWith<$Res> { _$MiraiListTileCopyWithImpl<$Res, MiraiListTile>; @useResult $Res call( - {MiraiAction? onTap, - MiraiAction? onLongPress, + {Map? onTap, + Map? onLongPress, Map? leading, Map? title, Map? subtitle, @@ -83,8 +83,6 @@ abstract class $MiraiListTileCopyWith<$Res> { double? minVerticalPadding, double? minLeadingWidth}); - $MiraiActionCopyWith<$Res>? get onTap; - $MiraiActionCopyWith<$Res>? get onLongPress; $MiraiEdgeInsetsCopyWith<$Res>? get contentPadding; } @@ -130,11 +128,11 @@ class _$MiraiListTileCopyWithImpl<$Res, $Val extends MiraiListTile> onTap: freezed == onTap ? _value.onTap : onTap // ignore: cast_nullable_to_non_nullable - as MiraiAction?, + as Map?, onLongPress: freezed == onLongPress ? _value.onLongPress : onLongPress // ignore: cast_nullable_to_non_nullable - as MiraiAction?, + as Map?, leading: freezed == leading ? _value.leading : leading // ignore: cast_nullable_to_non_nullable @@ -226,30 +224,6 @@ class _$MiraiListTileCopyWithImpl<$Res, $Val extends MiraiListTile> ) as $Val); } - @override - @pragma('vm:prefer-inline') - $MiraiActionCopyWith<$Res>? get onTap { - if (_value.onTap == null) { - return null; - } - - return $MiraiActionCopyWith<$Res>(_value.onTap!, (value) { - return _then(_value.copyWith(onTap: value) as $Val); - }); - } - - @override - @pragma('vm:prefer-inline') - $MiraiActionCopyWith<$Res>? get onLongPress { - if (_value.onLongPress == null) { - return null; - } - - return $MiraiActionCopyWith<$Res>(_value.onLongPress!, (value) { - return _then(_value.copyWith(onLongPress: value) as $Val); - }); - } - @override @pragma('vm:prefer-inline') $MiraiEdgeInsetsCopyWith<$Res>? get contentPadding { @@ -272,8 +246,8 @@ abstract class _$$_MiraiListTileCopyWith<$Res> @override @useResult $Res call( - {MiraiAction? onTap, - MiraiAction? onLongPress, + {Map? onTap, + Map? onLongPress, Map? leading, Map? title, Map? subtitle, @@ -297,10 +271,6 @@ abstract class _$$_MiraiListTileCopyWith<$Res> double? minVerticalPadding, double? minLeadingWidth}); - @override - $MiraiActionCopyWith<$Res>? get onTap; - @override - $MiraiActionCopyWith<$Res>? get onLongPress; @override $MiraiEdgeInsetsCopyWith<$Res>? get contentPadding; } @@ -343,13 +313,13 @@ class __$$_MiraiListTileCopyWithImpl<$Res> }) { return _then(_$_MiraiListTile( onTap: freezed == onTap - ? _value.onTap + ? _value._onTap : onTap // ignore: cast_nullable_to_non_nullable - as MiraiAction?, + as Map?, onLongPress: freezed == onLongPress - ? _value.onLongPress + ? _value._onLongPress : onLongPress // ignore: cast_nullable_to_non_nullable - as MiraiAction?, + as Map?, leading: freezed == leading ? _value._leading : leading // ignore: cast_nullable_to_non_nullable @@ -446,8 +416,8 @@ class __$$_MiraiListTileCopyWithImpl<$Res> @JsonSerializable() class _$_MiraiListTile implements _MiraiListTile { const _$_MiraiListTile( - {this.onTap, - this.onLongPress, + {final Map? onTap, + final Map? onLongPress, final Map? leading, final Map? title, final Map? subtitle, @@ -470,7 +440,9 @@ class _$_MiraiListTile implements _MiraiListTile { this.horizontalTitleGap, this.minVerticalPadding, this.minLeadingWidth}) - : _leading = leading, + : _onTap = onTap, + _onLongPress = onLongPress, + _leading = leading, _title = title, _subtitle = subtitle, _trailing = trailing; @@ -478,10 +450,26 @@ class _$_MiraiListTile implements _MiraiListTile { factory _$_MiraiListTile.fromJson(Map json) => _$$_MiraiListTileFromJson(json); + final Map? _onTap; @override - final MiraiAction? onTap; + Map? get onTap { + final value = _onTap; + if (value == null) return null; + if (_onTap is EqualUnmodifiableMapView) return _onTap; + // ignore: implicit_dynamic_type + return EqualUnmodifiableMapView(value); + } + + final Map? _onLongPress; @override - final MiraiAction? onLongPress; + Map? get onLongPress { + final value = _onLongPress; + if (value == null) return null; + if (_onLongPress is EqualUnmodifiableMapView) return _onLongPress; + // ignore: implicit_dynamic_type + return EqualUnmodifiableMapView(value); + } + final Map? _leading; @override Map? get leading { @@ -573,9 +561,9 @@ class _$_MiraiListTile implements _MiraiListTile { return identical(this, other) || (other.runtimeType == runtimeType && other is _$_MiraiListTile && - (identical(other.onTap, onTap) || other.onTap == onTap) && - (identical(other.onLongPress, onLongPress) || - other.onLongPress == onLongPress) && + const DeepCollectionEquality().equals(other._onTap, _onTap) && + const DeepCollectionEquality() + .equals(other._onLongPress, _onLongPress) && const DeepCollectionEquality().equals(other._leading, _leading) && const DeepCollectionEquality().equals(other._title, _title) && const DeepCollectionEquality().equals(other._subtitle, _subtitle) && @@ -619,8 +607,8 @@ class _$_MiraiListTile implements _MiraiListTile { @override int get hashCode => Object.hashAll([ runtimeType, - onTap, - onLongPress, + const DeepCollectionEquality().hash(_onTap), + const DeepCollectionEquality().hash(_onLongPress), const DeepCollectionEquality().hash(_leading), const DeepCollectionEquality().hash(_title), const DeepCollectionEquality().hash(_subtitle), @@ -661,8 +649,8 @@ class _$_MiraiListTile implements _MiraiListTile { abstract class _MiraiListTile implements MiraiListTile { const factory _MiraiListTile( - {final MiraiAction? onTap, - final MiraiAction? onLongPress, + {final Map? onTap, + final Map? onLongPress, final Map? leading, final Map? title, final Map? subtitle, @@ -690,9 +678,9 @@ abstract class _MiraiListTile implements MiraiListTile { _$_MiraiListTile.fromJson; @override - MiraiAction? get onTap; + Map? get onTap; @override - MiraiAction? get onLongPress; + Map? get onLongPress; @override Map? get leading; @override diff --git a/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.g.dart b/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.g.dart index d1dea723..8d0f76cb 100644 --- a/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.g.dart +++ b/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.g.dart @@ -8,12 +8,8 @@ part of 'mirai_list_tile.dart'; _$_MiraiListTile _$$_MiraiListTileFromJson(Map json) => _$_MiraiListTile( - onTap: json['onTap'] == null - ? null - : MiraiAction.fromJson(json['onTap'] as Map), - onLongPress: json['onLongPress'] == null - ? null - : MiraiAction.fromJson(json['onLongPress'] as Map), + onTap: json['onTap'] as Map?, + onLongPress: json['onLongPress'] as Map?, leading: json['leading'] as Map?, title: json['title'] as Map?, subtitle: json['subtitle'] as Map?, diff --git a/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile_parser.dart b/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile_parser.dart index 0a0fbd9e..2128d34d 100644 --- a/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile_parser.dart +++ b/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile_parser.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:mirai/src/action/mirai_action_parser.dart'; import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/mirai_edge_insets/mirai_edge_insets.dart'; import 'package:mirai/src/parsers/mirai_list_tile/mirai_list_tile.dart'; @@ -19,8 +18,8 @@ class MiraiListTileParser extends MiraiParser { @override Widget parse(BuildContext context, MiraiListTile model) { return ListTile( - onTap: () => model.onTap.onCall(context), - onLongPress: () => model.onLongPress.onCall(context), + onTap: () => Mirai.onCallFromJson(model.onTap, context), + onLongPress: () => Mirai.onCallFromJson(model.onLongPress, context), leading: Mirai.fromJson(model.leading, context), title: Mirai.fromJson(model.title, context), subtitle: Mirai.fromJson(model.subtitle, context), diff --git a/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.dart b/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.dart index 66c44025..42b8916e 100644 --- a/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.dart +++ b/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:mirai/src/action/mirai_action.dart'; +import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/mirai_button_style/mirai_button_style.dart'; export 'package:mirai/src/parsers/mirai_outlined_button/mirai_outlined_button_parser.dart'; @@ -11,7 +11,7 @@ part 'mirai_outlined_button.g.dart'; @freezed class MiraiOutlinedButton with _$MiraiOutlinedButton { const factory MiraiOutlinedButton({ - MiraiAction? onPressed, + Map? onPressed, MiraiButtonStyle? style, @Default(false) autofocus, @Default(Clip.none) Clip clipBehavior, diff --git a/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.freezed.dart b/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.freezed.dart index bdacebe7..dd6ce78c 100644 --- a/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.freezed.dart +++ b/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.freezed.dart @@ -20,7 +20,7 @@ MiraiOutlinedButton _$MiraiOutlinedButtonFromJson(Map json) { /// @nodoc mixin _$MiraiOutlinedButton { - MiraiAction? get onPressed => throw _privateConstructorUsedError; + Map? get onPressed => throw _privateConstructorUsedError; MiraiButtonStyle? get style => throw _privateConstructorUsedError; dynamic get autofocus => throw _privateConstructorUsedError; Clip get clipBehavior => throw _privateConstructorUsedError; @@ -39,13 +39,12 @@ abstract class $MiraiOutlinedButtonCopyWith<$Res> { _$MiraiOutlinedButtonCopyWithImpl<$Res, MiraiOutlinedButton>; @useResult $Res call( - {MiraiAction? onPressed, + {Map? onPressed, MiraiButtonStyle? style, dynamic autofocus, Clip clipBehavior, Map child}); - $MiraiActionCopyWith<$Res>? get onPressed; $MiraiButtonStyleCopyWith<$Res>? get style; } @@ -72,7 +71,7 @@ class _$MiraiOutlinedButtonCopyWithImpl<$Res, $Val extends MiraiOutlinedButton> onPressed: freezed == onPressed ? _value.onPressed : onPressed // ignore: cast_nullable_to_non_nullable - as MiraiAction?, + as Map?, style: freezed == style ? _value.style : style // ignore: cast_nullable_to_non_nullable @@ -92,18 +91,6 @@ class _$MiraiOutlinedButtonCopyWithImpl<$Res, $Val extends MiraiOutlinedButton> ) as $Val); } - @override - @pragma('vm:prefer-inline') - $MiraiActionCopyWith<$Res>? get onPressed { - if (_value.onPressed == null) { - return null; - } - - return $MiraiActionCopyWith<$Res>(_value.onPressed!, (value) { - return _then(_value.copyWith(onPressed: value) as $Val); - }); - } - @override @pragma('vm:prefer-inline') $MiraiButtonStyleCopyWith<$Res>? get style { @@ -126,14 +113,12 @@ abstract class _$$_MiraiOutlinedButtonCopyWith<$Res> @override @useResult $Res call( - {MiraiAction? onPressed, + {Map? onPressed, MiraiButtonStyle? style, dynamic autofocus, Clip clipBehavior, Map child}); - @override - $MiraiActionCopyWith<$Res>? get onPressed; @override $MiraiButtonStyleCopyWith<$Res>? get style; } @@ -157,9 +142,9 @@ class __$$_MiraiOutlinedButtonCopyWithImpl<$Res> }) { return _then(_$_MiraiOutlinedButton( onPressed: freezed == onPressed - ? _value.onPressed + ? _value._onPressed : onPressed // ignore: cast_nullable_to_non_nullable - as MiraiAction?, + as Map?, style: freezed == style ? _value.style : style // ignore: cast_nullable_to_non_nullable @@ -181,18 +166,27 @@ class __$$_MiraiOutlinedButtonCopyWithImpl<$Res> @JsonSerializable() class _$_MiraiOutlinedButton implements _MiraiOutlinedButton { const _$_MiraiOutlinedButton( - {this.onPressed, + {final Map? onPressed, this.style, this.autofocus = false, this.clipBehavior = Clip.none, required final Map child}) - : _child = child; + : _onPressed = onPressed, + _child = child; factory _$_MiraiOutlinedButton.fromJson(Map json) => _$$_MiraiOutlinedButtonFromJson(json); + final Map? _onPressed; @override - final MiraiAction? onPressed; + Map? get onPressed { + final value = _onPressed; + if (value == null) return null; + if (_onPressed is EqualUnmodifiableMapView) return _onPressed; + // ignore: implicit_dynamic_type + return EqualUnmodifiableMapView(value); + } + @override final MiraiButtonStyle? style; @override @@ -219,8 +213,8 @@ class _$_MiraiOutlinedButton implements _MiraiOutlinedButton { return identical(this, other) || (other.runtimeType == runtimeType && other is _$_MiraiOutlinedButton && - (identical(other.onPressed, onPressed) || - other.onPressed == onPressed) && + const DeepCollectionEquality() + .equals(other._onPressed, _onPressed) && (identical(other.style, style) || other.style == style) && const DeepCollectionEquality().equals(other.autofocus, autofocus) && (identical(other.clipBehavior, clipBehavior) || @@ -232,7 +226,7 @@ class _$_MiraiOutlinedButton implements _MiraiOutlinedButton { @override int get hashCode => Object.hash( runtimeType, - onPressed, + const DeepCollectionEquality().hash(_onPressed), style, const DeepCollectionEquality().hash(autofocus), clipBehavior, @@ -255,7 +249,7 @@ class _$_MiraiOutlinedButton implements _MiraiOutlinedButton { abstract class _MiraiOutlinedButton implements MiraiOutlinedButton { const factory _MiraiOutlinedButton( - {final MiraiAction? onPressed, + {final Map? onPressed, final MiraiButtonStyle? style, final dynamic autofocus, final Clip clipBehavior, @@ -265,7 +259,7 @@ abstract class _MiraiOutlinedButton implements MiraiOutlinedButton { _$_MiraiOutlinedButton.fromJson; @override - MiraiAction? get onPressed; + Map? get onPressed; @override MiraiButtonStyle? get style; @override diff --git a/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.g.dart b/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.g.dart index 25773752..2217e073 100644 --- a/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.g.dart +++ b/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.g.dart @@ -9,9 +9,7 @@ part of 'mirai_outlined_button.dart'; _$_MiraiOutlinedButton _$$_MiraiOutlinedButtonFromJson( Map json) => _$_MiraiOutlinedButton( - onPressed: json['onPressed'] == null - ? null - : MiraiAction.fromJson(json['onPressed'] as Map), + onPressed: json['onPressed'] as Map?, style: json['style'] == null ? null : MiraiButtonStyle.fromJson(json['style'] as Map), diff --git a/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button_parser.dart b/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button_parser.dart index d9a63f4d..9b655158 100644 --- a/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button_parser.dart +++ b/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button_parser.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:mirai/src/action/mirai_action_parser.dart'; import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/parsers.dart'; import 'package:mirai/src/utils/widget_type.dart'; @@ -19,7 +18,7 @@ class MiraiOutlinedButtonParser extends MiraiParser { return OutlinedButton( onPressed: model.onPressed == null ? null - : () => model.onPressed.onCall(context), + : () => Mirai.onCallFromJson(model.onPressed, context), style: model.style?.parseOutlined, autofocus: model.autofocus, clipBehavior: model.clipBehavior, diff --git a/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.dart b/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.dart index 42457242..633cdb13 100644 --- a/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.dart +++ b/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:mirai/src/action/mirai_action.dart'; +import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/mirai_button_style/mirai_button_style.dart'; export 'package:mirai/src/parsers/mirai_text_button/mirai_text_button_parser.dart'; @@ -11,7 +11,7 @@ part 'mirai_text_button.g.dart'; @freezed class MiraiTextButton with _$MiraiTextButton { const factory MiraiTextButton({ - MiraiAction? onPressed, + Map? onPressed, MiraiButtonStyle? style, @Default(false) autofocus, @Default(Clip.none) Clip clipBehavior, diff --git a/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.freezed.dart b/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.freezed.dart index a40c96b9..1789a2bb 100644 --- a/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.freezed.dart +++ b/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.freezed.dart @@ -20,7 +20,7 @@ MiraiTextButton _$MiraiTextButtonFromJson(Map json) { /// @nodoc mixin _$MiraiTextButton { - MiraiAction? get onPressed => throw _privateConstructorUsedError; + Map? get onPressed => throw _privateConstructorUsedError; MiraiButtonStyle? get style => throw _privateConstructorUsedError; dynamic get autofocus => throw _privateConstructorUsedError; Clip get clipBehavior => throw _privateConstructorUsedError; @@ -39,13 +39,12 @@ abstract class $MiraiTextButtonCopyWith<$Res> { _$MiraiTextButtonCopyWithImpl<$Res, MiraiTextButton>; @useResult $Res call( - {MiraiAction? onPressed, + {Map? onPressed, MiraiButtonStyle? style, dynamic autofocus, Clip clipBehavior, Map child}); - $MiraiActionCopyWith<$Res>? get onPressed; $MiraiButtonStyleCopyWith<$Res>? get style; } @@ -72,7 +71,7 @@ class _$MiraiTextButtonCopyWithImpl<$Res, $Val extends MiraiTextButton> onPressed: freezed == onPressed ? _value.onPressed : onPressed // ignore: cast_nullable_to_non_nullable - as MiraiAction?, + as Map?, style: freezed == style ? _value.style : style // ignore: cast_nullable_to_non_nullable @@ -92,18 +91,6 @@ class _$MiraiTextButtonCopyWithImpl<$Res, $Val extends MiraiTextButton> ) as $Val); } - @override - @pragma('vm:prefer-inline') - $MiraiActionCopyWith<$Res>? get onPressed { - if (_value.onPressed == null) { - return null; - } - - return $MiraiActionCopyWith<$Res>(_value.onPressed!, (value) { - return _then(_value.copyWith(onPressed: value) as $Val); - }); - } - @override @pragma('vm:prefer-inline') $MiraiButtonStyleCopyWith<$Res>? get style { @@ -126,14 +113,12 @@ abstract class _$$_MiraiTextButtonCopyWith<$Res> @override @useResult $Res call( - {MiraiAction? onPressed, + {Map? onPressed, MiraiButtonStyle? style, dynamic autofocus, Clip clipBehavior, Map child}); - @override - $MiraiActionCopyWith<$Res>? get onPressed; @override $MiraiButtonStyleCopyWith<$Res>? get style; } @@ -157,9 +142,9 @@ class __$$_MiraiTextButtonCopyWithImpl<$Res> }) { return _then(_$_MiraiTextButton( onPressed: freezed == onPressed - ? _value.onPressed + ? _value._onPressed : onPressed // ignore: cast_nullable_to_non_nullable - as MiraiAction?, + as Map?, style: freezed == style ? _value.style : style // ignore: cast_nullable_to_non_nullable @@ -181,18 +166,27 @@ class __$$_MiraiTextButtonCopyWithImpl<$Res> @JsonSerializable() class _$_MiraiTextButton implements _MiraiTextButton { const _$_MiraiTextButton( - {this.onPressed, + {final Map? onPressed, this.style, this.autofocus = false, this.clipBehavior = Clip.none, required final Map child}) - : _child = child; + : _onPressed = onPressed, + _child = child; factory _$_MiraiTextButton.fromJson(Map json) => _$$_MiraiTextButtonFromJson(json); + final Map? _onPressed; @override - final MiraiAction? onPressed; + Map? get onPressed { + final value = _onPressed; + if (value == null) return null; + if (_onPressed is EqualUnmodifiableMapView) return _onPressed; + // ignore: implicit_dynamic_type + return EqualUnmodifiableMapView(value); + } + @override final MiraiButtonStyle? style; @override @@ -219,8 +213,8 @@ class _$_MiraiTextButton implements _MiraiTextButton { return identical(this, other) || (other.runtimeType == runtimeType && other is _$_MiraiTextButton && - (identical(other.onPressed, onPressed) || - other.onPressed == onPressed) && + const DeepCollectionEquality() + .equals(other._onPressed, _onPressed) && (identical(other.style, style) || other.style == style) && const DeepCollectionEquality().equals(other.autofocus, autofocus) && (identical(other.clipBehavior, clipBehavior) || @@ -232,7 +226,7 @@ class _$_MiraiTextButton implements _MiraiTextButton { @override int get hashCode => Object.hash( runtimeType, - onPressed, + const DeepCollectionEquality().hash(_onPressed), style, const DeepCollectionEquality().hash(autofocus), clipBehavior, @@ -254,7 +248,7 @@ class _$_MiraiTextButton implements _MiraiTextButton { abstract class _MiraiTextButton implements MiraiTextButton { const factory _MiraiTextButton( - {final MiraiAction? onPressed, + {final Map? onPressed, final MiraiButtonStyle? style, final dynamic autofocus, final Clip clipBehavior, @@ -264,7 +258,7 @@ abstract class _MiraiTextButton implements MiraiTextButton { _$_MiraiTextButton.fromJson; @override - MiraiAction? get onPressed; + Map? get onPressed; @override MiraiButtonStyle? get style; @override diff --git a/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.g.dart b/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.g.dart index 120ffefa..d6fc268e 100644 --- a/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.g.dart +++ b/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.g.dart @@ -8,9 +8,7 @@ part of 'mirai_text_button.dart'; _$_MiraiTextButton _$$_MiraiTextButtonFromJson(Map json) => _$_MiraiTextButton( - onPressed: json['onPressed'] == null - ? null - : MiraiAction.fromJson(json['onPressed'] as Map), + onPressed: json['onPressed'] as Map?, style: json['style'] == null ? null : MiraiButtonStyle.fromJson(json['style'] as Map), diff --git a/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button_parser.dart b/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button_parser.dart index 9da50f6b..b61f7a68 100644 --- a/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button_parser.dart +++ b/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button_parser.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:mirai/src/action/mirai_action_parser.dart'; import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/parsers.dart'; import 'package:mirai/src/utils/widget_type.dart'; @@ -19,7 +18,7 @@ class MiraiTextButtonParser extends MiraiParser { return TextButton( onPressed: model.onPressed == null ? null - : () => model.onPressed.onCall(context), + : () => Mirai.onCallFromJson(model.onPressed, context), style: model.style?.parseText, autofocus: model.autofocus, clipBehavior: model.clipBehavior, diff --git a/packages/mirai/lib/src/parsers/parsers.dart b/packages/mirai/lib/src/parsers/parsers.dart index 98dc03fc..f7ba986b 100644 --- a/packages/mirai/lib/src/parsers/parsers.dart +++ b/packages/mirai/lib/src/parsers/parsers.dart @@ -1,5 +1,6 @@ library parsers; +export 'package:mirai/src/parsers/mirai_actions/mirai_actions.dart'; export 'package:mirai/src/parsers/mirai_alert_dialog/mirai_alert_dialog.dart'; export 'package:mirai/src/parsers/mirai_alignment/mirai_alignment.dart'; export 'package:mirai/src/parsers/mirai_alignment_directional/mirai_alignment_directional.dart'; From a91054a953b27609ba19a86e8947043f027eb051 Mon Sep 17 00:00:00 2001 From: Rodolfo Silva Date: Sat, 15 Jul 2023 08:06:31 -0300 Subject: [PATCH 02/11] refactor: import class directly --- packages/mirai/lib/src/framework/mirai.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/mirai/lib/src/framework/mirai.dart b/packages/mirai/lib/src/framework/mirai.dart index e1d90647..92546fb0 100644 --- a/packages/mirai/lib/src/framework/mirai.dart +++ b/packages/mirai/lib/src/framework/mirai.dart @@ -4,7 +4,8 @@ import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:mirai/src/framework/framework.dart'; +import 'package:mirai/src/framework/mirai_action_parser.dart'; +import 'package:mirai/src/framework/mirai_parser.dart'; import 'package:mirai/src/network/mirai_network.dart'; import 'package:mirai/src/network/mirai_request.dart'; import 'package:mirai/src/parsers/mirai_center/mirai_center_parser.dart'; From bd3faa13a37e09473effc50d5eda68a0c6facef1 Mon Sep 17 00:00:00 2001 From: Rodolfo Silva Date: Sat, 15 Jul 2023 08:41:10 -0300 Subject: [PATCH 03/11] docs: change the overview example --- docs/docs/overview.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/docs/overview.md b/docs/docs/overview.md index 6e93ff4a..064c2cd9 100644 --- a/docs/docs/overview.md +++ b/docs/docs/overview.md @@ -53,6 +53,9 @@ void main() async { parsers: const [ ExampleScreenParser(), ], + actionParsers: const [ + ExampleActionParser(), + ], dio: dio, ); From 3cd8ade1bb371f5c4e94aa5e0b01eba0a10e24db Mon Sep 17 00:00:00 2001 From: Rodolfo Silva Date: Sat, 15 Jul 2023 08:55:12 -0300 Subject: [PATCH 04/11] docs: add action parsers --- docs/docs/basics/parsers.md | 101 +++++++++++++++++++++++++++++++----- 1 file changed, 88 insertions(+), 13 deletions(-) diff --git a/docs/docs/basics/parsers.md b/docs/docs/basics/parsers.md index d0710202..e6650b44 100644 --- a/docs/docs/basics/parsers.md +++ b/docs/docs/basics/parsers.md @@ -6,11 +6,11 @@ sidebar_position: 1 Now that we have installed Mirai, let's talk about the "parsers". -Mirai Parser are the most important part of the Mirai framework. A parser is the class which will parse your json data into Flutter widget. +Mirai Parser are the most important part of the Mirai framework. A parser is the class which will parse your json data into Flutter widget and actions. -## Creating a Parser +## Creating a Widget Parser -To create a parser, simply extend a class with `MiraiParser`. +To create a widget parser, simply extend a class with `MiraiParser`. ```dart import 'package:flutter/material.dart'; @@ -44,24 +44,24 @@ class MiraiTextParser extends MiraiParser { } ``` -The above code snippet contains 3 main componets +The above code snippet contains 3 main components -- `type`: This is where you define the widget type, which is a uniquie identifier for the widget. +- `type`: This is where you define the widget type, which is a unique identifier for the widget. -- `getModel`: This is where you will define the model for your widget, which you will receive in `parse` method. The ideal way is to create a model class and returnt he fromJson function. +- `getModel`: This is where you will define the model for your widget, which you will receive in `parse` method. The ideal way is to create a model class and return the fromJson function. - `parse`: This is where the json is parsed into widget. The `parse` method provides you with `context` and the `model` and returns a widget. -## Registering a Parser +## Registering a Widget Parser There are two ways to register a parser: -1. Register in MiraiApp -2. Register through MiraiRegistry +1. Register in `MiraiApp` +2. Register through `MiraiRegistry` ### Register in MiraiApp -You can register your parser my passing it on MiraiApp. +You can register your parser my passing it on `MiraiApp`. ```dart MiraiApp( @@ -73,15 +73,15 @@ You can register your parser my passing it on MiraiApp. ### Register through MiraiRegistry -MiraiRegistry provides you with two method to register the parser. +`MiraiRegistry` provides you with two method to register the widget parser. -1.`register`: register method takes a `MiraiParser` and register it. +1.`register`: this method takes a `MiraiParser` and register it. ```dart MiraiRegistry.instance.register(parser); ``` -2.`registerAll`: registerAll method takes a list of `MiraiParser` and regsiter it. +2.`registerAll`: this method takes a list of `MiraiParser` and register it. ```dart MiraiRegistry.instance.registerAll([ @@ -89,3 +89,78 @@ MiraiRegistry.instance.registerAll([ MiraiButtonParser(), ]); ``` + +## Creating a Action Parser + +To create a action parser, simply extend a class with `MiraiActionParser`. + +```dart +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:mirai/mirai.dart'; + +class MiraiShareParser extends MiraiActionParser { + const MiraiShareParser(); + + @override + MiraiShare getModel(Map json) => MiraiShare.fromJson(json); + + @override + String get type => 'share'; + + @override + FutureOr onCall(BuildContext context, MiraiShare model) { + return MiraiShare.share( + subject: model.subject, + text: model.text, + ); + } +} +``` + +The above code snippet contains 3 main components + +- `type`: This is where you define the action type, which is a unique identifier for the action. + +- `getModel`: This is where you will define the model for your action, which you will receive in `onCall` method. The ideal way is to create a model class and return the fromJson function. + +- `onCall`: This is where the json is parsed into action. The `onCall` method provides you with `context` and the `model` and returns the result of the action. + +## Registering a Action Parser + +Like the Widget Parser registration, there are two ways to register a parser: + +1. Register in `MiraiApp` +2. Register through `MiraiRegistry` + +### Register in MiraiApp + +You can register your parser my passing it on `MiraiApp`. + +```dart + MiraiApp( + actionParsers: [ + MiraiShareParser(), + ], + ); +``` + +### Register through MiraiRegistry + +`MiraiRegistry` provides you with two method to register the action parser. + +1.`registerAction`: this method takes a `MiraiActionParser` and register it. + +```dart +MiraiRegistry.instance.registerAction(parser); +``` + +2.`registerAllActions`: this method takes a list of `MiraiActionParser` and register it. + +```dart +MiraiRegistry.instance.registerAll([ + MiraiShareParser(), + MiraiBluetoothParser(), +]); +``` From 0c1775370739cbbef4090eaf4db9c632bfba97d8 Mon Sep 17 00:00:00 2001 From: Rodolfo Silva Date: Sat, 15 Jul 2023 08:57:33 -0300 Subject: [PATCH 05/11] docs: fix registerAllActions method reference --- docs/docs/basics/parsers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/basics/parsers.md b/docs/docs/basics/parsers.md index e6650b44..99060c9f 100644 --- a/docs/docs/basics/parsers.md +++ b/docs/docs/basics/parsers.md @@ -159,7 +159,7 @@ MiraiRegistry.instance.registerAction(parser); 2.`registerAllActions`: this method takes a list of `MiraiActionParser` and register it. ```dart -MiraiRegistry.instance.registerAll([ +MiraiRegistry.instance.registerAllActions([ MiraiShareParser(), MiraiBluetoothParser(), ]); From 350efa0d26d52c51514455b036070a7fc42193d0 Mon Sep 17 00:00:00 2001 From: Rodolfo Silva Date: Mon, 17 Jul 2023 19:06:11 -0300 Subject: [PATCH 06/11] refactor: remove unused imports --- .../parsers/mirai_elevated_button/mirai_elevated_button.dart | 1 - .../mirai_floating_action_button.dart | 3 +-- .../lib/src/parsers/mirai_icon_button/mirai_icon_button.dart | 1 - .../mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.dart | 1 - .../parsers/mirai_outlined_button/mirai_outlined_button.dart | 1 - .../lib/src/parsers/mirai_text_button/mirai_text_button.dart | 1 - 6 files changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.dart b/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.dart index 48230cae..823ca447 100644 --- a/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.dart +++ b/packages/mirai/lib/src/parsers/mirai_elevated_button/mirai_elevated_button.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/mirai_button_style/mirai_button_style.dart'; export 'package:mirai/src/parsers/mirai_elevated_button/mirai_elevated_button_parser.dart'; diff --git a/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.dart b/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.dart index 79389c91..389c60e7 100644 --- a/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.dart +++ b/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.dart @@ -1,5 +1,4 @@ import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/mirai_text_style/mirai_text_style.dart'; import 'package:mirai/src/utils/button_utils.dart'; @@ -14,7 +13,7 @@ class MiraiFloatingActionButton with _$MiraiFloatingActionButton { Map? onPressed, MiraiTextStyle? textStyle, @Default(FloatingActionButtonType.small) - FloatingActionButtonType buttonType, + FloatingActionButtonType buttonType, @Default(false) bool autofocus, Map? icon, String? backgroundColor, diff --git a/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.dart b/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.dart index de2c3b09..488666c0 100644 --- a/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.dart +++ b/packages/mirai/lib/src/parsers/mirai_icon_button/mirai_icon_button.dart @@ -1,5 +1,4 @@ import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/mirai_alignment/mirai_alignment.dart'; import 'package:mirai/src/parsers/mirai_button_style/mirai_button_style.dart'; import 'package:mirai/src/parsers/mirai_edge_insets/mirai_edge_insets.dart'; diff --git a/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.dart b/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.dart index ee0f43f0..968814db 100644 --- a/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.dart +++ b/packages/mirai/lib/src/parsers/mirai_list_tile/mirai_list_tile.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/mirai_edge_insets/mirai_edge_insets.dart'; export 'package:mirai/src/parsers/mirai_list_tile/mirai_list_tile_parser.dart'; diff --git a/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.dart b/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.dart index 42b8916e..ccc8332a 100644 --- a/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.dart +++ b/packages/mirai/lib/src/parsers/mirai_outlined_button/mirai_outlined_button.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/mirai_button_style/mirai_button_style.dart'; export 'package:mirai/src/parsers/mirai_outlined_button/mirai_outlined_button_parser.dart'; diff --git a/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.dart b/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.dart index 633cdb13..2178045c 100644 --- a/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.dart +++ b/packages/mirai/lib/src/parsers/mirai_text_button/mirai_text_button.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/parsers/mirai_button_style/mirai_button_style.dart'; export 'package:mirai/src/parsers/mirai_text_button/mirai_text_button_parser.dart'; From d4b11c506f12dcc95932582038810c5150815ad6 Mon Sep 17 00:00:00 2001 From: Rodolfo Silva Date: Mon, 17 Jul 2023 19:06:28 -0300 Subject: [PATCH 07/11] fix: add missing import --- packages/mirai/lib/src/framework/mirai.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/mirai/lib/src/framework/mirai.dart b/packages/mirai/lib/src/framework/mirai.dart index 92546fb0..41c71f37 100644 --- a/packages/mirai/lib/src/framework/mirai.dart +++ b/packages/mirai/lib/src/framework/mirai.dart @@ -6,6 +6,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:mirai/src/framework/mirai_action_parser.dart'; import 'package:mirai/src/framework/mirai_parser.dart'; +import 'package:mirai/src/framework/mirai_registry.dart'; import 'package:mirai/src/network/mirai_network.dart'; import 'package:mirai/src/network/mirai_request.dart'; import 'package:mirai/src/parsers/mirai_center/mirai_center_parser.dart'; From e8aefe8123c893e81417843a13844c4a6397f963 Mon Sep 17 00:00:00 2001 From: Rodolfo Silva Date: Mon, 17 Jul 2023 19:08:30 -0300 Subject: [PATCH 08/11] docs: fix typos --- docs/docs/basics/parsers.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/docs/basics/parsers.md b/docs/docs/basics/parsers.md index 99060c9f..b9b3b1d1 100644 --- a/docs/docs/basics/parsers.md +++ b/docs/docs/basics/parsers.md @@ -90,9 +90,9 @@ MiraiRegistry.instance.registerAll([ ]); ``` -## Creating a Action Parser +## Creating an Action Parser -To create a action parser, simply extend a class with `MiraiActionParser`. +To create an action parser, simply extend a class with `MiraiActionParser`. ```dart import 'dart:async'; @@ -125,9 +125,9 @@ The above code snippet contains 3 main components - `getModel`: This is where you will define the model for your action, which you will receive in `onCall` method. The ideal way is to create a model class and return the fromJson function. -- `onCall`: This is where the json is parsed into action. The `onCall` method provides you with `context` and the `model` and returns the result of the action. +- `onCall`: This is where the JSON is parsed into an action. The `onCall` method provides you with `context` and the `model` and returns the result of the action. -## Registering a Action Parser +## Registering an Action Parser Like the Widget Parser registration, there are two ways to register a parser: From c5b93217062b4df51152d40d97c76d23a627e000 Mon Sep 17 00:00:00 2001 From: Rodolfo Silva Date: Mon, 17 Jul 2023 19:13:06 -0300 Subject: [PATCH 09/11] fix: component code format --- .../mirai_floating_action_button.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.dart b/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.dart index 389c60e7..7a7b7b7c 100644 --- a/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.dart +++ b/packages/mirai/lib/src/parsers/mirai_floating_action_button/mirai_floating_action_button.dart @@ -13,7 +13,7 @@ class MiraiFloatingActionButton with _$MiraiFloatingActionButton { Map? onPressed, MiraiTextStyle? textStyle, @Default(FloatingActionButtonType.small) - FloatingActionButtonType buttonType, + FloatingActionButtonType buttonType, @Default(false) bool autofocus, Map? icon, String? backgroundColor, From 0e3b9c84949d2c1ee2d5ce0ba7de1fe80842f27d Mon Sep 17 00:00:00 2001 From: Rodolfo Silva Date: Thu, 3 Aug 2023 06:38:27 -0300 Subject: [PATCH 10/11] refactor: change actions parsers folder --- packages/mirai/lib/mirai.dart | 1 + packages/mirai/lib/src/action_parsers/action_parsers.dart | 3 +++ .../mirai_navigate_action/mirai_navigate_action.dart | 0 .../mirai_navigate_action/mirai_navigate_action.freezed.dart | 0 .../mirai_navigate_action/mirai_navigate_action.g.dart | 0 .../mirai_navigate_action/mirai_navigate_action_parser.dart | 2 +- .../mirai_none_action/mirai_none_action_parser.dart | 0 .../mirai_request_action/mirai_request_action_parser.dart | 0 packages/mirai/lib/src/framework/mirai.dart | 1 + .../mirai/lib/src/parsers/mirai_actions/mirai_actions.dart | 3 --- packages/mirai/lib/src/parsers/parsers.dart | 1 - 11 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 packages/mirai/lib/src/action_parsers/action_parsers.dart rename packages/mirai/lib/src/{parsers/mirai_actions => action_parsers}/mirai_navigate_action/mirai_navigate_action.dart (100%) rename packages/mirai/lib/src/{parsers/mirai_actions => action_parsers}/mirai_navigate_action/mirai_navigate_action.freezed.dart (100%) rename packages/mirai/lib/src/{parsers/mirai_actions => action_parsers}/mirai_navigate_action/mirai_navigate_action.g.dart (100%) rename packages/mirai/lib/src/{parsers/mirai_actions => action_parsers}/mirai_navigate_action/mirai_navigate_action_parser.dart (83%) rename packages/mirai/lib/src/{parsers/mirai_actions => action_parsers}/mirai_none_action/mirai_none_action_parser.dart (100%) rename packages/mirai/lib/src/{parsers/mirai_actions => action_parsers}/mirai_request_action/mirai_request_action_parser.dart (100%) delete mode 100644 packages/mirai/lib/src/parsers/mirai_actions/mirai_actions.dart diff --git a/packages/mirai/lib/mirai.dart b/packages/mirai/lib/mirai.dart index 5e299538..99e708fd 100644 --- a/packages/mirai/lib/mirai.dart +++ b/packages/mirai/lib/mirai.dart @@ -1,5 +1,6 @@ library mirai; +export 'package:mirai/src/action_parsers/action_parsers.dart'; export 'package:mirai/src/framework/framework.dart'; export 'package:mirai/src/navigation/navigation.dart'; export 'package:mirai/src/network/network.dart'; diff --git a/packages/mirai/lib/src/action_parsers/action_parsers.dart b/packages/mirai/lib/src/action_parsers/action_parsers.dart new file mode 100644 index 00000000..1c512e7c --- /dev/null +++ b/packages/mirai/lib/src/action_parsers/action_parsers.dart @@ -0,0 +1,3 @@ +export 'package:mirai/src/action_parsers/mirai_navigate_action/mirai_navigate_action_parser.dart'; +export 'package:mirai/src/action_parsers/mirai_none_action/mirai_none_action_parser.dart'; +export 'package:mirai/src/action_parsers/mirai_request_action/mirai_request_action_parser.dart'; diff --git a/packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.dart b/packages/mirai/lib/src/action_parsers/mirai_navigate_action/mirai_navigate_action.dart similarity index 100% rename from packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.dart rename to packages/mirai/lib/src/action_parsers/mirai_navigate_action/mirai_navigate_action.dart diff --git a/packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.freezed.dart b/packages/mirai/lib/src/action_parsers/mirai_navigate_action/mirai_navigate_action.freezed.dart similarity index 100% rename from packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.freezed.dart rename to packages/mirai/lib/src/action_parsers/mirai_navigate_action/mirai_navigate_action.freezed.dart diff --git a/packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.g.dart b/packages/mirai/lib/src/action_parsers/mirai_navigate_action/mirai_navigate_action.g.dart similarity index 100% rename from packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.g.dart rename to packages/mirai/lib/src/action_parsers/mirai_navigate_action/mirai_navigate_action.g.dart diff --git a/packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action_parser.dart b/packages/mirai/lib/src/action_parsers/mirai_navigate_action/mirai_navigate_action_parser.dart similarity index 83% rename from packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action_parser.dart rename to packages/mirai/lib/src/action_parsers/mirai_navigate_action/mirai_navigate_action_parser.dart index e53e3925..146c1021 100644 --- a/packages/mirai/lib/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action_parser.dart +++ b/packages/mirai/lib/src/action_parsers/mirai_navigate_action/mirai_navigate_action_parser.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'package:flutter/widgets.dart'; +import 'package:mirai/src/action_parsers/mirai_navigate_action/mirai_navigate_action.dart'; import 'package:mirai/src/framework/framework.dart'; -import 'package:mirai/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action.dart'; class MiraiNavigateActionParser extends MiraiActionParser { const MiraiNavigateActionParser(); diff --git a/packages/mirai/lib/src/parsers/mirai_actions/mirai_none_action/mirai_none_action_parser.dart b/packages/mirai/lib/src/action_parsers/mirai_none_action/mirai_none_action_parser.dart similarity index 100% rename from packages/mirai/lib/src/parsers/mirai_actions/mirai_none_action/mirai_none_action_parser.dart rename to packages/mirai/lib/src/action_parsers/mirai_none_action/mirai_none_action_parser.dart diff --git a/packages/mirai/lib/src/parsers/mirai_actions/mirai_request_action/mirai_request_action_parser.dart b/packages/mirai/lib/src/action_parsers/mirai_request_action/mirai_request_action_parser.dart similarity index 100% rename from packages/mirai/lib/src/parsers/mirai_actions/mirai_request_action/mirai_request_action_parser.dart rename to packages/mirai/lib/src/action_parsers/mirai_request_action/mirai_request_action_parser.dart diff --git a/packages/mirai/lib/src/framework/mirai.dart b/packages/mirai/lib/src/framework/mirai.dart index 41c71f37..dcbdfa99 100644 --- a/packages/mirai/lib/src/framework/mirai.dart +++ b/packages/mirai/lib/src/framework/mirai.dart @@ -4,6 +4,7 @@ import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:mirai/src/action_parsers/action_parsers.dart'; import 'package:mirai/src/framework/mirai_action_parser.dart'; import 'package:mirai/src/framework/mirai_parser.dart'; import 'package:mirai/src/framework/mirai_registry.dart'; diff --git a/packages/mirai/lib/src/parsers/mirai_actions/mirai_actions.dart b/packages/mirai/lib/src/parsers/mirai_actions/mirai_actions.dart deleted file mode 100644 index 9f782ea0..00000000 --- a/packages/mirai/lib/src/parsers/mirai_actions/mirai_actions.dart +++ /dev/null @@ -1,3 +0,0 @@ -export 'package:mirai/src/parsers/mirai_actions/mirai_navigate_action/mirai_navigate_action_parser.dart'; -export 'package:mirai/src/parsers/mirai_actions/mirai_none_action/mirai_none_action_parser.dart'; -export 'package:mirai/src/parsers/mirai_actions/mirai_request_action/mirai_request_action_parser.dart'; diff --git a/packages/mirai/lib/src/parsers/parsers.dart b/packages/mirai/lib/src/parsers/parsers.dart index f7ba986b..98dc03fc 100644 --- a/packages/mirai/lib/src/parsers/parsers.dart +++ b/packages/mirai/lib/src/parsers/parsers.dart @@ -1,6 +1,5 @@ library parsers; -export 'package:mirai/src/parsers/mirai_actions/mirai_actions.dart'; export 'package:mirai/src/parsers/mirai_alert_dialog/mirai_alert_dialog.dart'; export 'package:mirai/src/parsers/mirai_alignment/mirai_alignment.dart'; export 'package:mirai/src/parsers/mirai_alignment_directional/mirai_alignment_directional.dart'; From b9a9e1d6a2221a84fa0d0ca38c1094cdbd8b8c50 Mon Sep 17 00:00:00 2001 From: Rodolfo Silva Date: Thu, 3 Aug 2023 06:44:55 -0300 Subject: [PATCH 11/11] refactor: add enum to store the standard action types --- .../mirai_navigate_action/mirai_navigate_action_parser.dart | 3 ++- .../mirai_none_action/mirai_none_action_parser.dart | 3 ++- .../mirai_request_action/mirai_request_action_parser.dart | 3 ++- packages/mirai/lib/src/utils/action_type.dart | 5 +++++ 4 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 packages/mirai/lib/src/utils/action_type.dart diff --git a/packages/mirai/lib/src/action_parsers/mirai_navigate_action/mirai_navigate_action_parser.dart b/packages/mirai/lib/src/action_parsers/mirai_navigate_action/mirai_navigate_action_parser.dart index 146c1021..de7ba65c 100644 --- a/packages/mirai/lib/src/action_parsers/mirai_navigate_action/mirai_navigate_action_parser.dart +++ b/packages/mirai/lib/src/action_parsers/mirai_navigate_action/mirai_navigate_action_parser.dart @@ -3,12 +3,13 @@ import 'dart:async'; import 'package:flutter/widgets.dart'; import 'package:mirai/src/action_parsers/mirai_navigate_action/mirai_navigate_action.dart'; import 'package:mirai/src/framework/framework.dart'; +import 'package:mirai/src/utils/action_type.dart'; class MiraiNavigateActionParser extends MiraiActionParser { const MiraiNavigateActionParser(); @override - String get type => "navigate"; + String get type => ActionType.navigate.name; @override getModel(Map json) => MiraiNavigateAction.fromJson(json); diff --git a/packages/mirai/lib/src/action_parsers/mirai_none_action/mirai_none_action_parser.dart b/packages/mirai/lib/src/action_parsers/mirai_none_action/mirai_none_action_parser.dart index 62600678..3647cc74 100644 --- a/packages/mirai/lib/src/action_parsers/mirai_none_action/mirai_none_action_parser.dart +++ b/packages/mirai/lib/src/action_parsers/mirai_none_action/mirai_none_action_parser.dart @@ -2,12 +2,13 @@ import 'dart:async'; import 'package:flutter/widgets.dart'; import 'package:mirai/src/framework/framework.dart'; +import 'package:mirai/src/utils/action_type.dart'; class MiraiNoneActionParser extends MiraiActionParser> { const MiraiNoneActionParser(); @override - String get type => "none"; + String get type => ActionType.none.name; @override getModel(Map json) => json; diff --git a/packages/mirai/lib/src/action_parsers/mirai_request_action/mirai_request_action_parser.dart b/packages/mirai/lib/src/action_parsers/mirai_request_action/mirai_request_action_parser.dart index ed7ac7dc..5304fdeb 100644 --- a/packages/mirai/lib/src/action_parsers/mirai_request_action/mirai_request_action_parser.dart +++ b/packages/mirai/lib/src/action_parsers/mirai_request_action/mirai_request_action_parser.dart @@ -4,12 +4,13 @@ import 'package:flutter/widgets.dart'; import 'package:mirai/src/framework/framework.dart'; import 'package:mirai/src/network/mirai_network.dart'; import 'package:mirai/src/network/mirai_request.dart'; +import 'package:mirai/src/utils/action_type.dart'; class MiraiRequestActionParser extends MiraiActionParser { const MiraiRequestActionParser(); @override - String get type => "request"; + String get type => ActionType.request.name; @override getModel(Map json) => MiraiRequest.fromJson(json); diff --git a/packages/mirai/lib/src/utils/action_type.dart b/packages/mirai/lib/src/utils/action_type.dart new file mode 100644 index 00000000..d88c29a1 --- /dev/null +++ b/packages/mirai/lib/src/utils/action_type.dart @@ -0,0 +1,5 @@ +enum ActionType { + navigate, + none, + request, +}