如何根据 window 大小显示更多或更少的元素?
How do I show more or less of an element depending on window size?
我想要一个横幅小部件,可能是一个 VideoPlayer(来自 video_player 插件)或者只是一张图片。
根据 screen/window 的大小,我希望我的横幅如下所示:
https://i.imgur.com/YADZSrV.mp4
假设视频中的缩放是 window 尺寸变化。
基本上:
如果宽高比原来的宽 -> 在顶部和底部显示较少(有点放大)
如果 aspect 比原来的高 -> 在侧面显示较少(居中时有点裁剪)
我有一些东西可以部分工作。它在 window 变宽时有效,但当它变得更细时,它只是开始缩小所有内容,它不会保持完整高度,同时在侧面显示更少。
这是我正在进行的工作:
return ClipRect(
child: OverflowBox(
maxWidth: double.infinity,
maxHeight: double.infinity,
child: Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
child: VideoPlayer(_controller),
),
),
);
您可以使用 LayoutBuilder 获取其内容的大小并相应地以不同方式呈现:
https://api.flutter.dev/flutter/widgets/LayoutBuilder-class.html
在你的情况下,它会是这样的:
return ClipRect(
child: OverflowBox(
maxWidth: double.infinity,
maxHeight: double.infinity,
child: LayoutBuilder(
builder: (context, constraints) {
if (constaints.bigger.width > constaints.bigger.height) {
return Text('More width than height');
}
else {
return Text('More height than width');
}
}
)
),
);
使用 FittedBox 小部件和 BoxFit 枚举可以很容易地解决这个问题。
FittedBox(
fit: BoxFit.cover,
child: Container(
width: 960,
height: 360,
child: VideoPlayer(_controller),
),
)
使用 VideoPlayer 小部件作为 Container 的子项,我将大小设置为视频的原始大小。
使用图像的示例:
FittedBox(
fit: BoxFit.cover,
child: Image(
image: NetworkImage(
'https://flutter.github.io/assets-for-api-docs/assets/widgets/owl-2.jpg'),
),
)
我想要一个横幅小部件,可能是一个 VideoPlayer(来自 video_player 插件)或者只是一张图片。
根据 screen/window 的大小,我希望我的横幅如下所示:
https://i.imgur.com/YADZSrV.mp4
假设视频中的缩放是 window 尺寸变化。
基本上:
如果宽高比原来的宽 -> 在顶部和底部显示较少(有点放大)
如果 aspect 比原来的高 -> 在侧面显示较少(居中时有点裁剪)
我有一些东西可以部分工作。它在 window 变宽时有效,但当它变得更细时,它只是开始缩小所有内容,它不会保持完整高度,同时在侧面显示更少。
这是我正在进行的工作:
return ClipRect(
child: OverflowBox(
maxWidth: double.infinity,
maxHeight: double.infinity,
child: Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
child: VideoPlayer(_controller),
),
),
);
您可以使用 LayoutBuilder 获取其内容的大小并相应地以不同方式呈现: https://api.flutter.dev/flutter/widgets/LayoutBuilder-class.html
在你的情况下,它会是这样的:
return ClipRect(
child: OverflowBox(
maxWidth: double.infinity,
maxHeight: double.infinity,
child: LayoutBuilder(
builder: (context, constraints) {
if (constaints.bigger.width > constaints.bigger.height) {
return Text('More width than height');
}
else {
return Text('More height than width');
}
}
)
),
);
使用 FittedBox 小部件和 BoxFit 枚举可以很容易地解决这个问题。
FittedBox(
fit: BoxFit.cover,
child: Container(
width: 960,
height: 360,
child: VideoPlayer(_controller),
),
)
使用 VideoPlayer 小部件作为 Container 的子项,我将大小设置为视频的原始大小。
使用图像的示例:
FittedBox(
fit: BoxFit.cover,
child: Image(
image: NetworkImage(
'https://flutter.github.io/assets-for-api-docs/assets/widgets/owl-2.jpg'),
),
)