异常1
Illegal argument in isolate message : (object is a closure - Function 'XXXX':.)
问题描述
// flutter使用compute时报异常,使用代码如下
await compute(fibonacci, 40)
异常原因
compute的第一个参数得是一个顶级方法,不能是类的内部方法, 也不能是静态方法
异常2
Invalid argument(s): string is not well-formed UTF-16
When the exception was thrown, this was the stack:
#0 ParagraphBuilder.addText (dart:ui/text.dart:3032:7)
#1 TextSpan.build (package:flutter/src/painting/text_span.dart:277:17)
#2 TextPainter._createParagraph (package:flutter/src/painting/text_painter.dart:614:10)
#3 TextPainter.layout (package:flutter/src/painting/text_painter.dart:662:7)
#4 RenderParagraph._layoutText (package:flutter/src/rendering/paragraph.dart:635:18)
#5 RenderParagraph._layoutTextWithConstraints (package:flutter/src/rendering/paragraph.dart:658:5)
对应issue: github.com/flutter/flu…
复现
- Text中使用🖤\ud83d可以复现
- Text('😈'.substring(0,1))可以复现
修复:使用safeSubString替代substring
/// 这个方法的substring支持utf-16, 截取范围超过长度不会抛异常,但会打印一个警告信息
String safeSubstring(int start, [int? end]) {
List<int> runeList = runes.toList();
end ??= runeList.length;
if (end > runeList.length) {
print(
'RangeError: end:$end great than string length ${runeList.length}, auto-correct end to ${runeList.length} now, but you should check your code');
end = runeList.length;
}
if (start > runeList.length) {
print(
"RangeError: start:$start great than string length ${runeList.length}, auto-correct end to ${runeList.length} now, but you should check your code");
start = runeList.length;
}
return String.fromCharCodes(runeList.sublist(start, end));
}