Как уменьшить высоту, а ширину оставить максимальной у камеры в пакете camera?

Для управления высотой и шириной кадра камеры в пакете camera в Flutter, вам необходимо использовать параметры pictureSize и previewSize.

1. Прежде всего, вам нужно создать экземпляр класса CameraController, чтобы получить доступ к камере:

CameraController controller;

2. В методе onCreate вашей основной виджета (например, метод initState виджета Stateful), вы должны инициализировать ваш контроллер камеры и задать настройки:

void initState() {
  super.initState();
  controller = CameraController(yourCamera, ResolutionPreset.high);
  controller.initialize().then((_) {
    if (!mounted) {
      return;
    }
    setState(() {});
  });
}

Здесь yourCamera - это объект камеры, который вы хотите использовать.

3. Когда контроллер камеры был инициализирован, вы можете настроить параметры pictureSize и previewSize:

Future<void> setCameraAndCaptureSize() async {
  if (!controller.value.isInitialized) {
    return null;
  }
  
  // Получение текущих настроек камеры
  final CameraDescription cameraDescription =
      await yourCamera;

  // Получение списка поддерживаемых разрешений для изображений и предпросмотра
  final characteristics =
      await yourCamera;
  final availableCaptureSize =
      characteristics.map((e) => e.) .toList();

  // Определение наиболее подходящего разрешения
  Size minimumCaptureSize = availableCaptureSize[0];
  for (Size size in availableCaptureSize) {
    if (size.height < minimumCaptureSize.height) {
      minimumCaptureSize = size;
    }
  }

  // Установка разрешений
  final int maxPreviewWidth = MediaQuery.of(context).size.width.floor();
  final int maxPreviewHeight = MediaQuery.of(context).size.height.floor();
  final double aspectRatio =
      MediaQuery.of(context).size.aspectRatio;
  final double minAspectRation = math.min(camera
      .value.aspectRatio, aspectRatio);
  final double maxAspectRation = math.max(camera
      .value.aspectRatio, aspectRatio);

  Size? captureSize;
  for (Size size in availableCaptureSize) {
    if (size.height <= maxPreviewHeight &&
        size.width <= maxPreviewWidth) {
      if (size.height >= minimumCaptureSize.height) {
        if (captureSize == null ||
            (size.height * size.width).floor() >
                (captureSize.height * captureSize.width)
                    .floor()) {
          captureSize = size;
        }
      }
    }
  }
  if (captureSize == null) {
    captureSize = availableCaptureSize.last;
  }
  yourCamera.
      .value = yourCamera.value.copyWith(
    pictureSize: captureSize,
    previewSize: captureSize);
  
  setState(() {
    // ...
  });
}

В этом коде yourCamera - это объект камеры, которую вы хотите использовать, ResolutionPreset.high - предустановленное значение для выбранной камеры. availableCaptureSize содержит все поддерживаемые разрешения камеры, а minimumCaptureSize - выбранное разрешение для управления высотой и шириной кадра камеры.

4. Наконец, вы можете использовать контроллер камеры для захвата фотографий или отображения предварительного просмотра:

Widget build(BuildContext context) {
  if (!controller.value.isInitialized) {
    return Container();
  }
  return MaterialApp(
    home: Scaffold(
      body: AspectRatio(
        aspectRatio: controller.value.aspectRatio,
        child: CameraPreview(controller),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          controller.takePicture().then((XFile file) {
            if (mounted) {
              // Обработка полученного изображения
              // ...
            }
          });
        },
        child: Icon(Icons.camera_alt),
      ),
    ),
  );
}

В этом коде AspectRatio используется для поддержки корректных пропорций изображения, а CameraPreview отображает предварительный просмотр с использованием контроллера камеры controller.

Вот и всё! Теперь вы знаете, как управлять высотой и шириной кадра камеры в пакете camera в Flutter. Вы можете настроить параметры pictureSize и previewSize, чтобы уменьшить высоту и оставить максимальную ширину камеры.