Skip to content

Commit 2afcde8

Browse files
committed
refactor(neon_rich_text): Separate building rich object from text span rendering
Signed-off-by: provokateurin <kate@provokateurin.de>
1 parent e7ed3c7 commit 2afcde8

File tree

4 files changed

+50
-43
lines changed

4 files changed

+50
-43
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import 'package:flutter/widgets.dart';
2+
import 'package:meta/meta.dart';
3+
import 'package:neon_rich_text/src/rich_objects/deck_card.dart';
4+
import 'package:neon_rich_text/src/rich_objects/fallback.dart';
5+
import 'package:neon_rich_text/src/rich_objects/file.dart';
6+
import 'package:neon_rich_text/src/rich_objects/mention.dart';
7+
import 'package:nextcloud/core.dart' as core;
8+
9+
/// Renders a rich object [parameter] to be interactive.
10+
@internal
11+
InlineSpan buildRichObjectParameter({
12+
required core.RichObjectParameter parameter,
13+
required TextStyle? textStyle,
14+
required bool isPreview,
15+
}) {
16+
if (isPreview) {
17+
return TextSpan(
18+
text: parameter.name,
19+
style: textStyle,
20+
);
21+
}
22+
23+
return WidgetSpan(
24+
alignment: PlaceholderAlignment.middle,
25+
child: switch (parameter.type) {
26+
core.RichObjectParameter_Type.user ||
27+
core.RichObjectParameter_Type.call ||
28+
core.RichObjectParameter_Type.guest ||
29+
core.RichObjectParameter_Type.userGroup =>
30+
NeonRichObjectMention(
31+
parameter: parameter,
32+
textStyle: textStyle,
33+
),
34+
core.RichObjectParameter_Type.file => NeonRichObjectFile(
35+
parameter: parameter,
36+
textStyle: textStyle,
37+
),
38+
core.RichObjectParameter_Type.deckCard => NeonRichObjectDeckCard(
39+
parameter: parameter,
40+
),
41+
_ => NeonRichObjectFallback(
42+
parameter: parameter,
43+
textStyle: textStyle,
44+
),
45+
},
46+
);
47+
}

packages/neon_framework/packages/neon_rich_text/lib/src/rich_text.dart

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@ import 'package:built_value/json_object.dart';
33
import 'package:flutter/gestures.dart';
44
import 'package:flutter/widgets.dart';
55
import 'package:intersperse/intersperse.dart';
6-
import 'package:neon_rich_text/src/rich_objects/deck_card.dart';
7-
import 'package:neon_rich_text/src/rich_objects/fallback.dart';
8-
import 'package:neon_rich_text/src/rich_objects/file.dart';
9-
import 'package:neon_rich_text/src/rich_objects/mention.dart';
6+
import 'package:neon_rich_text/src/rich_objects/rich_objects.dart';
107
import 'package:nextcloud/core.dart' as core;
118

129
/// Renders the [text] as a rich [TextSpan].
@@ -127,42 +124,3 @@ TextSpan buildRichTextSpan({
127124
children: children,
128125
);
129126
}
130-
131-
/// Renders a rich object [parameter] to be interactive.
132-
InlineSpan buildRichObjectParameter({
133-
required core.RichObjectParameter parameter,
134-
required TextStyle? textStyle,
135-
required bool isPreview,
136-
}) {
137-
if (isPreview) {
138-
return TextSpan(
139-
text: parameter.name,
140-
style: textStyle,
141-
);
142-
}
143-
144-
return WidgetSpan(
145-
alignment: PlaceholderAlignment.middle,
146-
child: switch (parameter.type) {
147-
core.RichObjectParameter_Type.user ||
148-
core.RichObjectParameter_Type.call ||
149-
core.RichObjectParameter_Type.guest ||
150-
core.RichObjectParameter_Type.userGroup =>
151-
NeonRichObjectMention(
152-
parameter: parameter,
153-
textStyle: textStyle,
154-
),
155-
core.RichObjectParameter_Type.file => NeonRichObjectFile(
156-
parameter: parameter,
157-
textStyle: textStyle,
158-
),
159-
core.RichObjectParameter_Type.deckCard => NeonRichObjectDeckCard(
160-
parameter: parameter,
161-
),
162-
_ => NeonRichObjectFallback(
163-
parameter: parameter,
164-
textStyle: textStyle,
165-
),
166-
},
167-
);
168-
}

packages/neon_framework/packages/neon_rich_text/pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ dependencies:
1414
sdk: flutter
1515
flutter_material_design_icons: ^1.1.7296
1616
intersperse: ^2.0.0
17+
meta: ^1.0.0
1718
neon_framework:
1819
git:
1920
url: https://github.com/nextcloud/neon

packages/neon_framework/packages/neon_rich_text/test/rich_text_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'package:neon_framework/theme.dart';
1111
import 'package:neon_framework/utils.dart';
1212
import 'package:neon_framework/widgets.dart';
1313
import 'package:neon_rich_text/neon_rich_text.dart';
14+
import 'package:neon_rich_text/src/rich_objects/rich_objects.dart';
1415
import 'package:nextcloud/core.dart' as core;
1516
import 'package:provider/provider.dart';
1617
import 'package:rxdart/rxdart.dart';

0 commit comments

Comments
 (0)