diff --git a/lib/src/utils/string_helper.dart b/lib/src/utils/string_helper.dart new file mode 100644 index 00000000..44abfd8a --- /dev/null +++ b/lib/src/utils/string_helper.dart @@ -0,0 +1,16 @@ +Map parseKeyValuePairs(String s, Set targetKeys) { + final result = {}; + final pairs = s.split(';'); + for (final pair in pairs) { + final _index = pair.indexOf(':'); + if (_index < 0) { + continue; + } + final _key = pair.substring(0, _index).trim(); + if (targetKeys.contains(_key)) { + result[_key] = pair.substring(_index + 1).trim(); + } + } + + return result; +} diff --git a/lib/src/widgets/editor.dart b/lib/src/widgets/editor.dart index fa39aa14..49bd20d6 100644 --- a/lib/src/widgets/editor.dart +++ b/lib/src/widgets/editor.dart @@ -17,6 +17,7 @@ import '../models/documents/nodes/container.dart' as container_node; import '../models/documents/nodes/embed.dart'; import '../models/documents/nodes/leaf.dart' as leaf; import '../models/documents/nodes/line.dart'; +import '../utils/string_helper.dart'; import 'box.dart'; import 'controller.dart'; import 'cursor.dart'; @@ -108,19 +109,8 @@ Widget _defaultEmbedBuilder( final style = node.style.attributes['style']; if (_isMobile() && style != null) { - final imageStyles = style.value.toString().split(';'); - final _keys = {'mobileWidth', 'mobileHeight', 'mobileMargin'}; - final _attrs = {}; - for (final imageStyle in imageStyles) { - final _index = imageStyle.indexOf(':'); - if (_index < 0) { - continue; - } - final _key = imageStyle.substring(0, _index).trim(); - if (_keys.contains(_key)) { - _attrs[_key] = imageStyle.substring(_index + 1).trim(); - } - } + final _attrs = parseKeyValuePairs(style.value.toString(), + {'mobileWidth', 'mobileHeight', 'mobileMargin'}); if (_attrs.isNotEmpty) { // TODO: return image with custom width, height and margin }