Is it possible to `try catch` in Composable functi...
# compose
s
Is it possible to
try catch
in Composable function? Code in 🧵
Copy code
@Composable
fun String.toAnnotatedString(): AnnotatedString? {
    return try {
        val pattern = Pattern.compile("\\*\\*(.*?)\\*\\*")
        val matcher = pattern.matcher(this)
        val sb = StringBuffer()
        val stringBuilder = AnnotatedString.Builder()
        while (matcher.find()) {
            sb.setLength(0)
            val group = matcher.group()
            val spanText = group.substring(2, group.length - 2)
            matcher.appendReplacement(sb, spanText)
            stringBuilder.append(sb.toString())
            val start = stringBuilder.length - spanText.length
            stringBuilder.addStyle(SpanStyle(color = MaterialTheme.colors.secondary),start = start,end = stringBuilder.length)
        }
        sb.setLength(0)
        matcher.appendTail(sb)
        stringBuilder.append(sb.toString())
        stringBuilder.toAnnotatedString()
    }catch (ex: Exception) {
        null
    }
}
d
I don't see why that has to be composable.
Ahh,
MaterialTheme
.
👌 1
s
@Dominaezzz Because of MaterialTheme.colors.secondary
d
It's possible but I think it's bad practice. Best to move
MaterialTheme.colors.secondary
outside the try catch.
👍 2
unrelated: Prefer
StringBuilder
over
StringBuffer
.
StringBuffer
is for multi-threaded use so it'll be slower.
s
Yeah Thanks, i didn't noticed that 👍
Actually,
appendTail
method expects StringBuffer
d
There's an overload that takes a
StringBuilder
👍 2
145 Views