如何将Flutter CameraPreview尺寸设置为“全屏”

时间:2019-06-24 11:25:56

标签: android flutter flutter-layout

我使用CameraPreview来测量对象的高度,但是问题是我无法全屏设置cameraPreview高度。

我尝试过定位的小部件,它会填满整个屏幕,但图像会被拉伸。 我尝试过 Transform Widget ,但是高度不能全屏显示,即将到来空白。图像未拉伸。

我的代码:

final size = MediaQuery.of(context).size;
final deviceRatio = size.width / size.height;

return Stack(
            children: <Widget>[
              Transform.scale(
                scale: controller.value.aspectRatio/deviceRatio,
                child: new AspectRatio(
                  aspectRatio: controller.value.aspectRatio,
                  child: new CameraPreview(controller),
                ),
              ),);

请帮助我适应CameraPreview“ FULLSCREEN”,而不会产生图像拉长的情况。

enter image description here

3 个答案:

答案 0 :(得分:4)

CameraValue.aspectRatio 返回宽度/高度而不是高度/宽度,因为 0.7.0,CameraPreview 现在处理 AspectRatio 本身,因此 imo 工作代码片段如下:

#include <stdio.h>
int check(int num){
if (num%2 == 0){
    return 0;
}else{
    return 1;}
}

int main(){
int a;
cin>>a;
if(check(a)){
    return 0;
}else{
    return 1;}
return 0;}

更新:

在通过变换缩放后,在 TransitionRoute 中使用时,预览可能会超出屏幕尺寸限制。 (在 CupertinoPageRoute 中托管时,拖动手势会清楚地显示这一点)。

所以我认为剪辑预览以使其与屏幕尺寸完全匹配是个好主意。

/// only work inside WidgetsApp or MaterialApp, which introduces a MediaQuery
final scale = 1 / (controller.value.aspectRatio * MediaQuery.of(context).size.aspectRatio);
return Transform.scale(
  scale: scale,
  alignment: Alignment.topCenter,
  child: CameraPreview(controller),
);

答案 1 :(得分:0)

问题已通过将“中心”窗口小部件包装在“转换”窗口小部件中解决

final size = MediaQuery.of(context).size;
final deviceRatio = size.width / size.height;
return Stack(
            children: <Widget>[
              Center(
                child:Transform.scale(
                      scale: controller.value.aspectRatio/deviceRatio,
                      child: new AspectRatio(
                       aspectRatio: controller.value.aspectRatio,
                       child: new CameraPreview(controller),
                       ),
                   ),),);

答案 2 :(得分:0)

我关注了 https://flutter.dev/docs/cookbook/plugins/picture-using-camera

中的演示

而且我没有自定义 CameraPreview 的 AspectRatio(实际上我做了但它不起作用)。

我解决的方法很简单。

return Stack(
  children: [
    Container(
        width: double.infinity,
        height: double.infinity,
        child: CameraPreview(_cameraController))
  ],
);

我正在使用 Container 小部件的属性 width 和 height 使 CameraPreview 拉伸为全屏。