首页 > 解决方案 > 如何以半屏宽高比或 const 高度显示相机不起作用

问题描述

我想以半屏显示相机以捕捉照片,但我尝试给出高度和纵横比,但它们都没有在这里工作是我尝试过的代码。相机仍在全屏打开我正在使用这个相机

 Widget _camera() {
    return Container(
      height: MediaQuery.of(context).size.height / 2,   // This is the height not working 
      child: Stack(
        alignment: Alignment.topCenter,
        children: [
         Container(
            child: AspectRatio(
              aspectRatio: 16 / 9,                      //this is also not working
              child: CameraPreview(_cameraController),
            ),
          ),
    // This is to draw a rectangle on a camera
          Container(
            margin: const EdgeInsets.only(top: 16),
            width: MediaQuery.of(context).size.width - 16,
            height: MediaQuery.of(context).size.height / 2.8,
            decoration: BoxDecoration(
              borderRadius: BorderRadius.circular(16),
              border: Border.all(color: KpColors.whiteColor),
            ),
          ),
        ],
      ),
    );
  }

标签: flutterdart

解决方案


您可以使用比例更改比例,这篇文章

Map<String, double> ratios = {
      '1:1': 1 / 1,
      '9:16': 9 / 16,
      '3:4': 3 / 4,
      '9:21': 9 / 21,
      'full': MediaQuery.of(context).size.aspectRatio,
    };

final size = MediaQuery.of(context).size;
         print('screen ratio: ${size.aspectRatio}, default: $_defaultRatio');

         return Transform.scale(
           scale: 1.0,
           child: AspectRatio(
             aspectRatio: _defaultRatio,
             child: OverflowBox(
               alignment: Alignment.center,
               child: FittedBox(
                 fit: size.aspectRatio >= _defaultRatio
                     ? BoxFit.fitHeight
                     : BoxFit.fitWidth,
                 child: Container(
                   width: size.aspectRatio >= _defaultRatio
                       ? size.height
                       : size.width,
                   height: size.aspectRatio >= _defaultRatio
                       ? size.height / controller.value.aspectRatio
                       : size.width / controller.value.aspectRatio,
                   child: Stack(
                     children: <Widget>[
                       CameraPreview(controller),
                     ],
                   ),
                 ),
               ),
             ),
           ),
         );

推荐阅读