Skip to content

Commit

Permalink
Merge pull request #198 from Securrency-OSS/dv/add-text-recognizer
Browse files Browse the repository at this point in the history
feat: Add tap gesture recognizer to the Mirai text Span
  • Loading branch information
divyanshub024 committed Sep 8, 2023
2 parents abbe6d1 + ed46530 commit 0071d4b
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 13 deletions.
9 changes: 9 additions & 0 deletions examples/mirai_gallery/assets/json/text_example.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,15 @@
"style": {
"fontWeight": "w800",
"color": "#6750A4"
},
"onTap": {
"actionType": "navigate",
"navigationStyle": "push",
"navigationType": "screen",
"widgetJson": {
"type": "exampleScreen",
"assetPath": "assets/json/web_view_example.json"
}
}
}
]
Expand Down
4 changes: 2 additions & 2 deletions examples/mirai_gallery/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -626,10 +626,10 @@ packages:
dependency: transitive
description:
name: webview_flutter_platform_interface
sha256: "9d32a63a5ee111b37482cb3eac3379b9f0992afd27a52ee30279dbf06f41918b"
sha256: "6d9213c65f1060116757a7c473247c60f3f7f332cac33dc417c9e362a9a13e4f"
url: "https://pub.dev"
source: hosted
version: "2.5.1"
version: "2.6.0"
webview_flutter_wkwebview:
dependency: transitive
description:
Expand Down
1 change: 1 addition & 0 deletions packages/mirai/lib/src/parsers/mirai_text/mirai_text.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class MiraiTextSpan with _$MiraiTextSpan {
const factory MiraiTextSpan({
String? data,
MiraiTextStyle? style,
Map<String, dynamic>? onTap,
}) = _MiraiTextSpan;

factory MiraiTextSpan.fromJson(Map<String, dynamic> json) =>
Expand Down
42 changes: 35 additions & 7 deletions packages/mirai/lib/src/parsers/mirai_text/mirai_text.freezed.dart
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,7 @@ MiraiTextSpan _$MiraiTextSpanFromJson(Map<String, dynamic> json) {
mixin _$MiraiTextSpan {
String? get data => throw _privateConstructorUsedError;
MiraiTextStyle? get style => throw _privateConstructorUsedError;
Map<String, dynamic>? get onTap => throw _privateConstructorUsedError;

Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
@JsonKey(ignore: true)
Expand All @@ -440,7 +441,7 @@ abstract class $MiraiTextSpanCopyWith<$Res> {
MiraiTextSpan value, $Res Function(MiraiTextSpan) then) =
_$MiraiTextSpanCopyWithImpl<$Res, MiraiTextSpan>;
@useResult
$Res call({String? data, MiraiTextStyle? style});
$Res call({String? data, MiraiTextStyle? style, Map<String, dynamic>? onTap});

$MiraiTextStyleCopyWith<$Res>? get style;
}
Expand All @@ -460,6 +461,7 @@ class _$MiraiTextSpanCopyWithImpl<$Res, $Val extends MiraiTextSpan>
$Res call({
Object? data = freezed,
Object? style = freezed,
Object? onTap = freezed,
}) {
return _then(_value.copyWith(
data: freezed == data
Expand All @@ -470,6 +472,10 @@ class _$MiraiTextSpanCopyWithImpl<$Res, $Val extends MiraiTextSpan>
? _value.style
: style // ignore: cast_nullable_to_non_nullable
as MiraiTextStyle?,
onTap: freezed == onTap
? _value.onTap
: onTap // ignore: cast_nullable_to_non_nullable
as Map<String, dynamic>?,
) as $Val);
}

Expand All @@ -494,7 +500,7 @@ abstract class _$$_MiraiTextSpanCopyWith<$Res>
__$$_MiraiTextSpanCopyWithImpl<$Res>;
@override
@useResult
$Res call({String? data, MiraiTextStyle? style});
$Res call({String? data, MiraiTextStyle? style, Map<String, dynamic>? onTap});

@override
$MiraiTextStyleCopyWith<$Res>? get style;
Expand All @@ -513,6 +519,7 @@ class __$$_MiraiTextSpanCopyWithImpl<$Res>
$Res call({
Object? data = freezed,
Object? style = freezed,
Object? onTap = freezed,
}) {
return _then(_$_MiraiTextSpan(
data: freezed == data
Expand All @@ -523,14 +530,20 @@ class __$$_MiraiTextSpanCopyWithImpl<$Res>
? _value.style
: style // ignore: cast_nullable_to_non_nullable
as MiraiTextStyle?,
onTap: freezed == onTap
? _value._onTap
: onTap // ignore: cast_nullable_to_non_nullable
as Map<String, dynamic>?,
));
}
}

/// @nodoc
@JsonSerializable()
class _$_MiraiTextSpan implements _MiraiTextSpan {
const _$_MiraiTextSpan({this.data, this.style});
const _$_MiraiTextSpan(
{this.data, this.style, final Map<String, dynamic>? onTap})
: _onTap = onTap;

factory _$_MiraiTextSpan.fromJson(Map<String, dynamic> json) =>
_$$_MiraiTextSpanFromJson(json);
Expand All @@ -539,10 +552,19 @@ class _$_MiraiTextSpan implements _MiraiTextSpan {
final String? data;
@override
final MiraiTextStyle? style;
final Map<String, dynamic>? _onTap;
@override
Map<String, dynamic>? get onTap {
final value = _onTap;
if (value == null) return null;
if (_onTap is EqualUnmodifiableMapView) return _onTap;
// ignore: implicit_dynamic_type
return EqualUnmodifiableMapView(value);
}

@override
String toString() {
return 'MiraiTextSpan(data: $data, style: $style)';
return 'MiraiTextSpan(data: $data, style: $style, onTap: $onTap)';
}

@override
Expand All @@ -551,12 +573,14 @@ class _$_MiraiTextSpan implements _MiraiTextSpan {
(other.runtimeType == runtimeType &&
other is _$_MiraiTextSpan &&
(identical(other.data, data) || other.data == data) &&
(identical(other.style, style) || other.style == style));
(identical(other.style, style) || other.style == style) &&
const DeepCollectionEquality().equals(other._onTap, _onTap));
}

@JsonKey(ignore: true)
@override
int get hashCode => Object.hash(runtimeType, data, style);
int get hashCode => Object.hash(
runtimeType, data, style, const DeepCollectionEquality().hash(_onTap));

@JsonKey(ignore: true)
@override
Expand All @@ -574,7 +598,9 @@ class _$_MiraiTextSpan implements _MiraiTextSpan {

abstract class _MiraiTextSpan implements MiraiTextSpan {
const factory _MiraiTextSpan(
{final String? data, final MiraiTextStyle? style}) = _$_MiraiTextSpan;
{final String? data,
final MiraiTextStyle? style,
final Map<String, dynamic>? onTap}) = _$_MiraiTextSpan;

factory _MiraiTextSpan.fromJson(Map<String, dynamic> json) =
_$_MiraiTextSpan.fromJson;
Expand All @@ -584,6 +610,8 @@ abstract class _MiraiTextSpan implements MiraiTextSpan {
@override
MiraiTextStyle? get style;
@override
Map<String, dynamic>? get onTap;
@override
@JsonKey(ignore: true)
_$$_MiraiTextSpanCopyWith<_$_MiraiTextSpan> get copyWith =>
throw _privateConstructorUsedError;
Expand Down
2 changes: 2 additions & 0 deletions packages/mirai/lib/src/parsers/mirai_text/mirai_text.g.dart

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

13 changes: 9 additions & 4 deletions packages/mirai/lib/src/parsers/mirai_text/mirai_text_parser.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:mirai/src/framework/framework.dart';
import 'package:mirai/src/parsers/mirai_text/mirai_text.dart';
Expand All @@ -20,10 +21,14 @@ class MiraiTextParser extends MiraiParser<MiraiText> {
TextSpan(
text: model.data,
children: model.children
.map((child) => TextSpan(
text: child.data,
style: child.style?.parse,
))
.map(
(child) => TextSpan(
text: child.data,
style: child.style?.parse,
recognizer: TapGestureRecognizer()
..onTap = () => Mirai.onCallFromJson(child.onTap, context),
),
)
.toList(),
),
style: model.style?.parse,
Expand Down

0 comments on commit 0071d4b

Please sign in to comment.