///打印日志的类
class Log {
Log._();
static void printMsg(Object obj) {
assert(() {
print(obj.toString());
return true;
}());
}
}
复制代码
系统代码中,有大量的这种形式,因为断言只在调试模式执行,这样就可以将一些只需要在调试模式下执行的代码放到断言里,release的时候是不执行的,比如我们新手阶段常见的这个:
拿RenderFlex
来举例,就是在它的paint
方法里有这样的代码:
@override
void paint(PaintingContext context, Offset offset) {
if (_overflow <= 0.0) {
defaultPaint(context, offset);
return;
}
// There's no point in drawing the children if we're empty.
if (size.isEmpty)
return;
// We have overflow. Clip it.
context.pushClipRect(needsCompositing, offset, Offset.zero & size, defaultPaint);
assert(() {
// Only set this if it's null to save work. It gets reset to null if the
// _direction changes.
final String debugOverflowHints =
'The overflowing $runtimeType has an orientation of $_direction.\n'
'The edge of the $runtimeType that is overflowing has been marked '
'in the rendering with a yellow and black striped pattern. This is '
'usually caused by the contents being too big for the $runtimeType. '
'Consider applying a flex factor (e.g. using an Expanded widget) to '
'force the children of the $runtimeType to fit within the available '
'space instead of being sized to their natural size.\n'
'This is considered an error condition because it indicates that there '
'is content that cannot be seen. If the content is legitimately bigger '
'than the available space, consider clipping it with a ClipRect widget '
'before putting it in the flex, or using a scrollable container rather '
'than a Flex, like a ListView.';
// Simulate a child rect that overflows by the right amount. This child
// rect is never used for drawing, just for determining the overflow
// location and amount.
Rect overflowChildRect;
switch (_direction) {
case Axis.horizontal:
overflowChildRect = Rect.fromLTWH(0.0, 0.0, size.width + _overflow, 0.0);
break;
case Axis.vertical:
overflowChildRect = Rect.fromLTWH(0.0, 0.0, 0.0, size.height + _overflow);
break;
}
paintOverflowIndicator(context, offset, Offset.zero & size, overflowChildRect, overflowHints: debugOverflowHints);
return true;
}());
}
复制代码