From aeccce5ddadcb1ab177e87adfa7a2775d16f2a76 Mon Sep 17 00:00:00 2001 From: Divyanshu Bhargava Date: Wed, 20 Mar 2024 21:57:39 +0400 Subject: [PATCH] Add support for the auto complete widget --- .../assets/json/auto_complete_example.json | 29 ++ .../assets/json/home_screen.json | 31 ++ examples/mirai_gallery/ios/Podfile.lock | 14 + examples/mirai_gallery/macos/Podfile.lock | 16 +- .../macos/Runner.xcodeproj/project.pbxproj | 18 ++ packages/mirai/lib/src/framework/mirai.dart | 2 + .../mirai_auto_complete.dart | 23 ++ .../mirai_auto_complete.freezed.dart | 268 ++++++++++++++++++ .../mirai_auto_complete.g.dart | 37 +++ .../mirai_auto_complete_parser.dart | 37 +++ packages/mirai/lib/src/parsers/parsers.dart | 1 + packages/mirai/lib/src/utils/widget_type.dart | 1 + 12 files changed, 476 insertions(+), 1 deletion(-) create mode 100644 examples/mirai_gallery/assets/json/auto_complete_example.json create mode 100644 packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete.dart create mode 100644 packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete.freezed.dart create mode 100644 packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete.g.dart create mode 100644 packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete_parser.dart diff --git a/examples/mirai_gallery/assets/json/auto_complete_example.json b/examples/mirai_gallery/assets/json/auto_complete_example.json new file mode 100644 index 00000000..516f6dd1 --- /dev/null +++ b/examples/mirai_gallery/assets/json/auto_complete_example.json @@ -0,0 +1,29 @@ +{ + "type": "scaffold", + "appBar": { + "type": "appBar", + "title": { + "type": "text", + "data": "Autocomplete Basic" + } + }, + "body": { + "type": "center", + "child": { + "type": "column", + "children": [ + { + "type": "text", + "data": "Type below to autocomplete the following possible results: [aardvark, bobcat, chameleon]." + }, + { + "type": "autocomplete", + "options": [ + "aardvark", "bobcat", "chameleon" + ], + "onSelected": {} + } + ] + } + } +} \ No newline at end of file diff --git a/examples/mirai_gallery/assets/json/home_screen.json b/examples/mirai_gallery/assets/json/home_screen.json index f8be6fd7..6f5f6ccd 100644 --- a/examples/mirai_gallery/assets/json/home_screen.json +++ b/examples/mirai_gallery/assets/json/home_screen.json @@ -52,6 +52,37 @@ } } }, + { + "type": "listTile", + "leading": { + "type": "icon", + "iconType": "material", + "icon": "done_all" + }, + "title": { + "type": "text", + "data": "Mirai AutoComplete", + "style": { + "fontSize": 21 + } + }, + "subtitle": { + "type": "text", + "data": "Create a auto complete widget with list of strings", + "style": { + "fontSize": 12 + } + }, + "isThreeLine": true, + "onTap": { + "actionType": "navigate", + "navigationStyle": "push", + "widgetJson": { + "type": "exampleScreen", + "assetPath": "assets/json/auto_complete_example.json" + } + } + }, { "type": "listTile", "leading": { diff --git a/examples/mirai_gallery/ios/Podfile.lock b/examples/mirai_gallery/ios/Podfile.lock index 3b52d011..adccfb77 100644 --- a/examples/mirai_gallery/ios/Podfile.lock +++ b/examples/mirai_gallery/ios/Podfile.lock @@ -1,20 +1,34 @@ PODS: - Flutter (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - sqflite (0.0.3): + - Flutter + - FlutterMacOS - webview_flutter_wkwebview (0.0.1): - Flutter DEPENDENCIES: - Flutter (from `Flutter`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + - sqflite (from `.symlinks/plugins/sqflite/darwin`) - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) EXTERNAL SOURCES: Flutter: :path: Flutter + path_provider_foundation: + :path: ".symlinks/plugins/path_provider_foundation/darwin" + sqflite: + :path: ".symlinks/plugins/sqflite/darwin" webview_flutter_wkwebview: :path: ".symlinks/plugins/webview_flutter_wkwebview/ios" SPEC CHECKSUMS: Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 + path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c + sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec webview_flutter_wkwebview: be0f0d33777f1bfd0c9fdcb594786704dbf65f36 PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796 diff --git a/examples/mirai_gallery/macos/Podfile.lock b/examples/mirai_gallery/macos/Podfile.lock index 1f6779f9..dab7b727 100644 --- a/examples/mirai_gallery/macos/Podfile.lock +++ b/examples/mirai_gallery/macos/Podfile.lock @@ -1,16 +1,30 @@ PODS: - FlutterMacOS (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - sqflite (0.0.3): + - Flutter + - FlutterMacOS DEPENDENCIES: - FlutterMacOS (from `Flutter/ephemeral`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/darwin`) EXTERNAL SOURCES: FlutterMacOS: :path: Flutter/ephemeral + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + sqflite: + :path: Flutter/ephemeral/.symlinks/plugins/sqflite/darwin SPEC CHECKSUMS: FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c + sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367 -COCOAPODS: 1.14.3 +COCOAPODS: 1.15.2 diff --git a/examples/mirai_gallery/macos/Runner.xcodeproj/project.pbxproj b/examples/mirai_gallery/macos/Runner.xcodeproj/project.pbxproj index 110378e8..875d1163 100644 --- a/examples/mirai_gallery/macos/Runner.xcodeproj/project.pbxproj +++ b/examples/mirai_gallery/macos/Runner.xcodeproj/project.pbxproj @@ -240,6 +240,7 @@ 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 7866210B3EA7701BEC7B9DC8 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -381,6 +382,23 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 7866210B3EA7701BEC7B9DC8 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; FC682B1371BF9CD8324FEA17 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; diff --git a/packages/mirai/lib/src/framework/mirai.dart b/packages/mirai/lib/src/framework/mirai.dart index cb8b3bfe..0f628274 100644 --- a/packages/mirai/lib/src/framework/mirai.dart +++ b/packages/mirai/lib/src/framework/mirai.dart @@ -7,6 +7,7 @@ import 'package:flutter/services.dart'; import 'package:mirai/src/action_parsers/action_parsers.dart'; import 'package:mirai/src/action_parsers/mirai_network_request/mirai_network_request_parser.dart'; import 'package:mirai/src/framework/mirai_registry.dart'; +import 'package:mirai/src/parsers/mirai_auto_complete/mirai_auto_complete_parser.dart'; import 'package:mirai/src/parsers/parsers.dart'; import 'package:mirai/src/services/mirai_network_service.dart'; import 'package:mirai/src/utils/log.dart'; @@ -69,6 +70,7 @@ class Mirai { const MiraiBottomNavigationViewParser(), const MiraiDefaultBottomNavigationControllerParser(), const MiraiWrapParser(), + const MiraiAutoCompleteParser(), ]; static final _actionParsers = [ diff --git a/packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete.dart b/packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete.dart new file mode 100644 index 00000000..0955bd27 --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; + +export 'mirai_auto_complete_parser.dart'; + +part 'mirai_auto_complete.freezed.dart'; +part 'mirai_auto_complete.g.dart'; + +@freezed +class MiraiAutoComplete with _$MiraiAutoComplete { + const factory MiraiAutoComplete({ + required List options, + Map? onSelected, + @Default(200) double optionsMaxHeight, + // optionsViewBuilder, + @Default(OptionsViewOpenDirection.down) + OptionsViewOpenDirection optionsViewOpenDirection, + String? initialValue, + }) = _MiraiAutoComplete; + + factory MiraiAutoComplete.fromJson(Map json) => + _$MiraiAutoCompleteFromJson(json); +} diff --git a/packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete.freezed.dart b/packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete.freezed.dart new file mode 100644 index 00000000..36572608 --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete.freezed.dart @@ -0,0 +1,268 @@ +// 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_auto_complete.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +MiraiAutoComplete _$MiraiAutoCompleteFromJson(Map json) { + return _MiraiAutoComplete.fromJson(json); +} + +/// @nodoc +mixin _$MiraiAutoComplete { + List get options => throw _privateConstructorUsedError; + Map? get onSelected => throw _privateConstructorUsedError; + double get optionsMaxHeight => + throw _privateConstructorUsedError; // optionsViewBuilder, + OptionsViewOpenDirection get optionsViewOpenDirection => + throw _privateConstructorUsedError; + String? get initialValue => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $MiraiAutoCompleteCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $MiraiAutoCompleteCopyWith<$Res> { + factory $MiraiAutoCompleteCopyWith( + MiraiAutoComplete value, $Res Function(MiraiAutoComplete) then) = + _$MiraiAutoCompleteCopyWithImpl<$Res, MiraiAutoComplete>; + @useResult + $Res call( + {List options, + Map? onSelected, + double optionsMaxHeight, + OptionsViewOpenDirection optionsViewOpenDirection, + String? initialValue}); +} + +/// @nodoc +class _$MiraiAutoCompleteCopyWithImpl<$Res, $Val extends MiraiAutoComplete> + implements $MiraiAutoCompleteCopyWith<$Res> { + _$MiraiAutoCompleteCopyWithImpl(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? options = null, + Object? onSelected = freezed, + Object? optionsMaxHeight = null, + Object? optionsViewOpenDirection = null, + Object? initialValue = freezed, + }) { + return _then(_value.copyWith( + options: null == options + ? _value.options + : options // ignore: cast_nullable_to_non_nullable + as List, + onSelected: freezed == onSelected + ? _value.onSelected + : onSelected // ignore: cast_nullable_to_non_nullable + as Map?, + optionsMaxHeight: null == optionsMaxHeight + ? _value.optionsMaxHeight + : optionsMaxHeight // ignore: cast_nullable_to_non_nullable + as double, + optionsViewOpenDirection: null == optionsViewOpenDirection + ? _value.optionsViewOpenDirection + : optionsViewOpenDirection // ignore: cast_nullable_to_non_nullable + as OptionsViewOpenDirection, + initialValue: freezed == initialValue + ? _value.initialValue + : initialValue // ignore: cast_nullable_to_non_nullable + as String?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$MiraiAutoCompleteImplCopyWith<$Res> + implements $MiraiAutoCompleteCopyWith<$Res> { + factory _$$MiraiAutoCompleteImplCopyWith(_$MiraiAutoCompleteImpl value, + $Res Function(_$MiraiAutoCompleteImpl) then) = + __$$MiraiAutoCompleteImplCopyWithImpl<$Res>; + @override + @useResult + $Res call( + {List options, + Map? onSelected, + double optionsMaxHeight, + OptionsViewOpenDirection optionsViewOpenDirection, + String? initialValue}); +} + +/// @nodoc +class __$$MiraiAutoCompleteImplCopyWithImpl<$Res> + extends _$MiraiAutoCompleteCopyWithImpl<$Res, _$MiraiAutoCompleteImpl> + implements _$$MiraiAutoCompleteImplCopyWith<$Res> { + __$$MiraiAutoCompleteImplCopyWithImpl(_$MiraiAutoCompleteImpl _value, + $Res Function(_$MiraiAutoCompleteImpl) _then) + : super(_value, _then); + + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? options = null, + Object? onSelected = freezed, + Object? optionsMaxHeight = null, + Object? optionsViewOpenDirection = null, + Object? initialValue = freezed, + }) { + return _then(_$MiraiAutoCompleteImpl( + options: null == options + ? _value._options + : options // ignore: cast_nullable_to_non_nullable + as List, + onSelected: freezed == onSelected + ? _value._onSelected + : onSelected // ignore: cast_nullable_to_non_nullable + as Map?, + optionsMaxHeight: null == optionsMaxHeight + ? _value.optionsMaxHeight + : optionsMaxHeight // ignore: cast_nullable_to_non_nullable + as double, + optionsViewOpenDirection: null == optionsViewOpenDirection + ? _value.optionsViewOpenDirection + : optionsViewOpenDirection // ignore: cast_nullable_to_non_nullable + as OptionsViewOpenDirection, + initialValue: freezed == initialValue + ? _value.initialValue + : initialValue // ignore: cast_nullable_to_non_nullable + as String?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$MiraiAutoCompleteImpl implements _MiraiAutoComplete { + const _$MiraiAutoCompleteImpl( + {required final List options, + final Map? onSelected, + this.optionsMaxHeight = 200, + this.optionsViewOpenDirection = OptionsViewOpenDirection.down, + this.initialValue}) + : _options = options, + _onSelected = onSelected; + + factory _$MiraiAutoCompleteImpl.fromJson(Map json) => + _$$MiraiAutoCompleteImplFromJson(json); + + final List _options; + @override + List get options { + if (_options is EqualUnmodifiableListView) return _options; + // ignore: implicit_dynamic_type + return EqualUnmodifiableListView(_options); + } + + final Map? _onSelected; + @override + Map? get onSelected { + final value = _onSelected; + if (value == null) return null; + if (_onSelected is EqualUnmodifiableMapView) return _onSelected; + // ignore: implicit_dynamic_type + return EqualUnmodifiableMapView(value); + } + + @override + @JsonKey() + final double optionsMaxHeight; +// optionsViewBuilder, + @override + @JsonKey() + final OptionsViewOpenDirection optionsViewOpenDirection; + @override + final String? initialValue; + + @override + String toString() { + return 'MiraiAutoComplete(options: $options, onSelected: $onSelected, optionsMaxHeight: $optionsMaxHeight, optionsViewOpenDirection: $optionsViewOpenDirection, initialValue: $initialValue)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$MiraiAutoCompleteImpl && + const DeepCollectionEquality().equals(other._options, _options) && + const DeepCollectionEquality() + .equals(other._onSelected, _onSelected) && + (identical(other.optionsMaxHeight, optionsMaxHeight) || + other.optionsMaxHeight == optionsMaxHeight) && + (identical( + other.optionsViewOpenDirection, optionsViewOpenDirection) || + other.optionsViewOpenDirection == optionsViewOpenDirection) && + (identical(other.initialValue, initialValue) || + other.initialValue == initialValue)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => Object.hash( + runtimeType, + const DeepCollectionEquality().hash(_options), + const DeepCollectionEquality().hash(_onSelected), + optionsMaxHeight, + optionsViewOpenDirection, + initialValue); + + @JsonKey(ignore: true) + @override + @pragma('vm:prefer-inline') + _$$MiraiAutoCompleteImplCopyWith<_$MiraiAutoCompleteImpl> get copyWith => + __$$MiraiAutoCompleteImplCopyWithImpl<_$MiraiAutoCompleteImpl>( + this, _$identity); + + @override + Map toJson() { + return _$$MiraiAutoCompleteImplToJson( + this, + ); + } +} + +abstract class _MiraiAutoComplete implements MiraiAutoComplete { + const factory _MiraiAutoComplete( + {required final List options, + final Map? onSelected, + final double optionsMaxHeight, + final OptionsViewOpenDirection optionsViewOpenDirection, + final String? initialValue}) = _$MiraiAutoCompleteImpl; + + factory _MiraiAutoComplete.fromJson(Map json) = + _$MiraiAutoCompleteImpl.fromJson; + + @override + List get options; + @override + Map? get onSelected; + @override + double get optionsMaxHeight; + @override // optionsViewBuilder, + OptionsViewOpenDirection get optionsViewOpenDirection; + @override + String? get initialValue; + @override + @JsonKey(ignore: true) + _$$MiraiAutoCompleteImplCopyWith<_$MiraiAutoCompleteImpl> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete.g.dart b/packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete.g.dart new file mode 100644 index 00000000..7db57995 --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete.g.dart @@ -0,0 +1,37 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'mirai_auto_complete.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_$MiraiAutoCompleteImpl _$$MiraiAutoCompleteImplFromJson( + Map json) => + _$MiraiAutoCompleteImpl( + options: + (json['options'] as List).map((e) => e as String).toList(), + onSelected: json['onSelected'] as Map?, + optionsMaxHeight: (json['optionsMaxHeight'] as num?)?.toDouble() ?? 200, + optionsViewOpenDirection: $enumDecodeNullable( + _$OptionsViewOpenDirectionEnumMap, + json['optionsViewOpenDirection']) ?? + OptionsViewOpenDirection.down, + initialValue: json['initialValue'] as String?, + ); + +Map _$$MiraiAutoCompleteImplToJson( + _$MiraiAutoCompleteImpl instance) => + { + 'options': instance.options, + 'onSelected': instance.onSelected, + 'optionsMaxHeight': instance.optionsMaxHeight, + 'optionsViewOpenDirection': + _$OptionsViewOpenDirectionEnumMap[instance.optionsViewOpenDirection]!, + 'initialValue': instance.initialValue, + }; + +const _$OptionsViewOpenDirectionEnumMap = { + OptionsViewOpenDirection.up: 'up', + OptionsViewOpenDirection.down: 'down', +}; diff --git a/packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete_parser.dart b/packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete_parser.dart new file mode 100644 index 00000000..4fee1cc6 --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_auto_complete/mirai_auto_complete_parser.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; +import 'package:mirai/src/framework/framework.dart'; +import 'package:mirai/src/parsers/mirai_auto_complete/mirai_auto_complete.dart'; +import 'package:mirai/src/utils/widget_type.dart'; +import 'package:mirai_framework/mirai_framework.dart'; + +class MiraiAutoCompleteParser extends MiraiParser { + const MiraiAutoCompleteParser(); + + @override + String get type => WidgetType.autocomplete.name; + + @override + MiraiAutoComplete getModel(Map json) => + MiraiAutoComplete.fromJson(json); + + @override + Widget parse(BuildContext context, MiraiAutoComplete model) { + return Autocomplete( + optionsBuilder: (TextEditingValue textEditingValue) { + if (textEditingValue.text == '') { + return const Iterable.empty(); + } + return model.options.where((String option) { + return option.contains(textEditingValue.text.toLowerCase()); + }); + }, + onSelected: (String val) => + Mirai.onCallFromJson(model.onSelected, context), + optionsMaxHeight: model.optionsMaxHeight, + optionsViewOpenDirection: model.optionsViewOpenDirection, + initialValue: model.initialValue != null + ? TextEditingValue(text: model.initialValue!) + : null, + ); + } +} diff --git a/packages/mirai/lib/src/parsers/parsers.dart b/packages/mirai/lib/src/parsers/parsers.dart index 3c6dda43..1e9006ab 100644 --- a/packages/mirai/lib/src/parsers/parsers.dart +++ b/packages/mirai/lib/src/parsers/parsers.dart @@ -6,6 +6,7 @@ export 'package:mirai/src/parsers/mirai_alignment/mirai_alignment.dart'; export 'package:mirai/src/parsers/mirai_alignment_directional/mirai_alignment_directional.dart'; export 'package:mirai/src/parsers/mirai_alignment_geometry/mirai_alignment_geometry.dart'; export 'package:mirai/src/parsers/mirai_app_bar/mirai_app_bar.dart'; +export 'package:mirai/src/parsers/mirai_auto_complete/mirai_auto_complete.dart'; export 'package:mirai/src/parsers/mirai_border/mirai_border.dart'; export 'package:mirai/src/parsers/mirai_border_radius/mirai_border_radius.dart'; export 'package:mirai/src/parsers/mirai_border_side/mirai_border_side.dart'; diff --git a/packages/mirai/lib/src/utils/widget_type.dart b/packages/mirai/lib/src/utils/widget_type.dart index 1e7f6435..32ace2bc 100644 --- a/packages/mirai/lib/src/utils/widget_type.dart +++ b/packages/mirai/lib/src/utils/widget_type.dart @@ -47,4 +47,5 @@ enum WidgetType { defaultBottomNavigationController, bottomNavigationView, wrap, + autocomplete, }