我有一个要缩放的小部件A
(像素完美)。根据设备的显示宽度,A
的大小应增加或减小。我尝试使用Transform.scale
小部件来更改A
的大小。这很好用,但是Transform.scale
小部件的大小永远不会改变。它始终与A
的原始大小匹配(不缩放)。
有没有办法强迫Transform.scale
始终采用其子代的大小?还是有替代方法?
您可以在此处找到显示当前情况和所需情况的图像
编辑:
小部件A
及其子项应均匀缩小/增长。它们之间的比率不应改变。
这是我目前尝试的代码
_buildWidgetA(scalingFactor) {
return Transform.scale(
scale: scalingFactor,
child: A(),
);
}
答案 0 :(得分:3)
由于@LOfG的输入,我了解到您无法使用Transform.scale
小部件实现所需的行为。不幸的是,此小部件不会更改其大小以匹配缩放后的子代的尺寸,但将始终保留原始未缩放子代的宽度和高度。
我找到了另一个小部件FittedBox
,通过它可以实现所需的行为。使用FittedBox
时,您没有像使用Transform.scale
那样定义缩放比例。您宁可将FittedBox
放在Container
内并定义其宽度或高度或两者。然后将FittedBox
的子级缩放以匹配父级Container
。
https://api.flutter.dev/flutter/widgets/FittedBox-class.html
_buildWidgetA(width, height) {
return Container(
width: width,
height: height,
child: FittedBox(
child: A(),
),
);
}
答案 1 :(得分:0)
要根据设备的宽度缩放窗口小部件,可以使用Media Query更改比例:
第一种方法:
@override
Widget build(BuildContext context) {
double width = MediaQuery.of(context).size.width; //getting the current width
return Scaffold(
body: Transform.scale(
scale: width <= 420 ? 0.5 : 0.8,
child: Align(
child: Container(
alignment: Alignment.center,
width: 420,
height: 420,
color: Colors.red,
child: Text('Example', style: TextStyle(fontSize: 50),),
),
),
)
);
}
第二种方法:
Scaffold(
body: Container(
alignment: Alignment.center,
width: width * 0.5,
height: width * 0.5,
color: Colors.green,
child: Text(
'Example Text',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: width * 0.1,
),
),
),
);