Skip to content

Commit

Permalink
Add support for spacer widget
Browse files Browse the repository at this point in the history
  • Loading branch information
cscoderr committed May 10, 2024
1 parent 9cb7645 commit 985179a
Show file tree
Hide file tree
Showing 9 changed files with 326 additions and 0 deletions.
31 changes: 31 additions & 0 deletions examples/mirai_gallery/assets/json/home_screen.json
Original file line number Diff line number Diff line change
Expand Up @@ -836,6 +836,37 @@
}
}
},
{
"type": "listTile",
"leading": {
"type": "icon",
"iconType": "material",
"icon": "space_dashboard"
},
"title": {
"type": "text",
"data": "Mirai Spacer",
"style": {
"fontSize": 21
}
},
"subtitle": {
"type": "text",
"data": "Creates an adjustable, empty spacer that can be used to tune the spacing between widgets in a Flex container.",
"style": {
"fontSize": 12
}
},
"isThreeLine": true,
"onTap": {
"actionType": "navigate",
"navigationStyle": "push",
"widgetJson": {
"type": "exampleScreen",
"assetPath": "assets/json/spacer_example.json"
}
}
},
{
"type": "listTile",
"leading": {
Expand Down
84 changes: 84 additions & 0 deletions examples/mirai_gallery/assets/json/spacer_example.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
{
"type": "scaffold",
"appBar": {
"type": "appBar",
"title": {
"type": "text",
"data": "Spacer"
}
},
"body": {
"type": "padding",
"padding": {
"left": 20,
"right": 20,
"top": 20,
"bottom": 20
},
"child": {
"type": "column",
"children": [
{
"type": "textField",
"keyboardType": "text",
"maxLines": 1,
"decoration": {
"hintText": "Enter your pin"
}
},
{
"type": "spacer"
},
{
"type": "row",
"children": [
{
"type": "row",
"children": [
{
"type": "text",
"data": "Forgot Pin",
"style": {
"fontSize": 17
}
},
{
"type": "icon",
"iconType": "material",
"icon": "keyboard_arrow_right",
"size": 24
}
]
},
{
"type": "spacer"
},
{
"type": "text",
"data": "Need help?",
"style": {
"fontSize": 17
}
}
]
},
{
"type": "spacer",
"flex": 2
},
{
"type": "elevatedButton",
"child": {
"type": "text",
"data": "Submit"
},
"style": {
"backgroundColor": "primary",
"foregroundColor": "#ffffff"
},
"onPressed": {}
}
]
}
}
}
1 change: 1 addition & 0 deletions packages/mirai/lib/src/framework/mirai.dart
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ class Mirai {
const MiraiCheckBoxWidgetParser(),
const MiraiExpandedParser(),
const MiraiFlexibleParser(),
const MiraiMiraiSpacerParser(),
const MiraiSafeAreaParser(),
const MiraiSwitchParser(),
const MiraiAlignParser(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import 'package:freezed_annotation/freezed_annotation.dart';

export 'package:mirai/src/parsers/mirai_mirai_spacer/mirai_mirai_spacer_parser.dart';

part 'mirai_mirai_spacer.freezed.dart';
part 'mirai_mirai_spacer.g.dart';

@freezed
class MiraiMiraiSpacer with _$MiraiMiraiSpacer {
const factory MiraiMiraiSpacer({
@Default(1) int flex,
}) = _MiraiMiraiSpacer;

factory MiraiMiraiSpacer.fromJson(Map<String, dynamic> json) =>
_$MiraiMiraiSpacerFromJson(json);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
// coverage:ignore-file
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark

part of 'mirai_mirai_spacer.dart';

// **************************************************************************
// FreezedGenerator
// **************************************************************************

T _$identity<T>(T value) => value;

final _privateConstructorUsedError = UnsupportedError(
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models');

MiraiMiraiSpacer _$MiraiMiraiSpacerFromJson(Map<String, dynamic> json) {
return _MiraiMiraiSpacer.fromJson(json);
}

/// @nodoc
mixin _$MiraiMiraiSpacer {
int get flex => throw _privateConstructorUsedError;

Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
@JsonKey(ignore: true)
$MiraiMiraiSpacerCopyWith<MiraiMiraiSpacer> get copyWith =>
throw _privateConstructorUsedError;
}

/// @nodoc
abstract class $MiraiMiraiSpacerCopyWith<$Res> {
factory $MiraiMiraiSpacerCopyWith(
MiraiMiraiSpacer value, $Res Function(MiraiMiraiSpacer) then) =
_$MiraiMiraiSpacerCopyWithImpl<$Res, MiraiMiraiSpacer>;
@useResult
$Res call({int flex});
}

/// @nodoc
class _$MiraiMiraiSpacerCopyWithImpl<$Res, $Val extends MiraiMiraiSpacer>
implements $MiraiMiraiSpacerCopyWith<$Res> {
_$MiraiMiraiSpacerCopyWithImpl(this._value, this._then);

// ignore: unused_field
final $Val _value;
// ignore: unused_field
final $Res Function($Val) _then;

@pragma('vm:prefer-inline')
@override
$Res call({
Object? flex = null,
}) {
return _then(_value.copyWith(
flex: null == flex
? _value.flex
: flex // ignore: cast_nullable_to_non_nullable
as int,
) as $Val);
}
}

/// @nodoc
abstract class _$$MiraiMiraiSpacerImplCopyWith<$Res>
implements $MiraiMiraiSpacerCopyWith<$Res> {
factory _$$MiraiMiraiSpacerImplCopyWith(_$MiraiMiraiSpacerImpl value,
$Res Function(_$MiraiMiraiSpacerImpl) then) =
__$$MiraiMiraiSpacerImplCopyWithImpl<$Res>;
@override
@useResult
$Res call({int flex});
}

/// @nodoc
class __$$MiraiMiraiSpacerImplCopyWithImpl<$Res>
extends _$MiraiMiraiSpacerCopyWithImpl<$Res, _$MiraiMiraiSpacerImpl>
implements _$$MiraiMiraiSpacerImplCopyWith<$Res> {
__$$MiraiMiraiSpacerImplCopyWithImpl(_$MiraiMiraiSpacerImpl _value,
$Res Function(_$MiraiMiraiSpacerImpl) _then)
: super(_value, _then);

@pragma('vm:prefer-inline')
@override
$Res call({
Object? flex = null,
}) {
return _then(_$MiraiMiraiSpacerImpl(
flex: null == flex
? _value.flex
: flex // ignore: cast_nullable_to_non_nullable
as int,
));
}
}

/// @nodoc
@JsonSerializable()
class _$MiraiMiraiSpacerImpl implements _MiraiMiraiSpacer {
const _$MiraiMiraiSpacerImpl({this.flex = 1});

factory _$MiraiMiraiSpacerImpl.fromJson(Map<String, dynamic> json) =>
_$$MiraiMiraiSpacerImplFromJson(json);

@override
@JsonKey()
final int flex;

@override
String toString() {
return 'MiraiMiraiSpacer(flex: $flex)';
}

@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$MiraiMiraiSpacerImpl &&
(identical(other.flex, flex) || other.flex == flex));
}

@JsonKey(ignore: true)
@override
int get hashCode => Object.hash(runtimeType, flex);

@JsonKey(ignore: true)
@override
@pragma('vm:prefer-inline')
_$$MiraiMiraiSpacerImplCopyWith<_$MiraiMiraiSpacerImpl> get copyWith =>
__$$MiraiMiraiSpacerImplCopyWithImpl<_$MiraiMiraiSpacerImpl>(
this, _$identity);

@override
Map<String, dynamic> toJson() {
return _$$MiraiMiraiSpacerImplToJson(
this,
);
}
}

abstract class _MiraiMiraiSpacer implements MiraiMiraiSpacer {
const factory _MiraiMiraiSpacer({final int flex}) = _$MiraiMiraiSpacerImpl;

factory _MiraiMiraiSpacer.fromJson(Map<String, dynamic> json) =
_$MiraiMiraiSpacerImpl.fromJson;

@override
int get flex;
@override
@JsonKey(ignore: true)
_$$MiraiMiraiSpacerImplCopyWith<_$MiraiMiraiSpacerImpl> get copyWith =>
throw _privateConstructorUsedError;
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import 'package:flutter/material.dart';
import 'package:mirai/src/parsers/mirai_mirai_spacer/mirai_mirai_spacer.dart';
import 'package:mirai/src/utils/widget_type.dart';
import 'package:mirai_framework/mirai_framework.dart';

class MiraiMiraiSpacerParser extends MiraiParser<MiraiMiraiSpacer> {
const MiraiMiraiSpacerParser();

@override
MiraiMiraiSpacer getModel(Map<String, dynamic> json) =>
MiraiMiraiSpacer.fromJson(json);

@override
String get type => WidgetType.spacer.name;

@override
Widget parse(BuildContext context, MiraiMiraiSpacer model) {
return Spacer(flex: model.flex);
}
}
1 change: 1 addition & 0 deletions packages/mirai/lib/src/parsers/parsers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ export 'package:mirai/src/parsers/mirai_input_formatters/mirai_input_formatter.d
export 'package:mirai/src/parsers/mirai_list_tile/mirai_list_tile.dart';
export 'package:mirai/src/parsers/mirai_list_tile_theme_data/mirai_list_tile_theme_data.dart';
export 'package:mirai/src/parsers/mirai_list_view/mirai_list_view.dart';
export 'package:mirai/src/parsers/mirai_mirai_spacer/mirai_mirai_spacer.dart';
export 'package:mirai/src/parsers/mirai_navigation_bar_item/mirai_bottom_navigation_bar_item.dart';
export 'package:mirai/src/parsers/mirai_navigation_bar_theme_data/mirai_navigation_bar_theme_data.dart';
export 'package:mirai/src/parsers/mirai_network_widget/mirai_network_widget.dart';
Expand Down
1 change: 1 addition & 0 deletions packages/mirai/lib/src/utils/widget_type.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ enum WidgetType {
checkBox,
expanded,
flexible,
spacer,
safeArea,
align,
pageView,
Expand Down

0 comments on commit 985179a

Please sign in to comment.