当我在AnimatedSwitcher中包装CustomPaint的子代时,该子代小部件不再考虑外部容器的大小。
下面的一些测试代码。
在切换器被注释掉的情况下,根据需要,该文本显示在左上角。取消对切换器的注释,将文本移动到屏幕的中央,就像没有SizedBox.expand一样。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: SizedBox.expand(
child: CustomPaint(
painter: Painter(),
// child: AnimatedSwitcher(
// duration: Duration(milliseconds: 500),
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Text(
'$_counter',
style: Theme.of(context).textTheme.display1,
key: ValueKey<int>(_counter),
),
),
),
),
// ),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
class Painter extends CustomPainter {
Paint _bgPaint = Paint()
..style = PaintingStyle.fill
..color = Colors.lightBlue;
@override
void paint(Canvas canvas, Size size) {
Rect fullScreen = const Offset(0.0, 0.0) & size;
canvas.drawRect(fullScreen, _bgPaint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return true;
}
}
我可以将Text本身包装在另一个SizedBox.expand
中,但是为什么AnimatedSwitcher使其必要?