TGViewer
Flutter. Много Flutter. Много @flutter_amiga · 2.96K subscribers
Post #152 2.04K
Камера во Flutter

Hola, Amigos! С вами Саша Чаплыгин, Flutter-dev Amiga. Работаю над улучшением NDA-проекта — приложение, в котором используется камера для сканирования определенных элементов на товаре. Делюсь с вами обзором, как начать использовать камеру в приложении Flutter.

Нам понадобится пакет camera. Добавьте его в файл pubspec.yaml вашего проекта:

yaml
dependencies:
camera: ^0.9.4+5


После этого запустите flutter pub get для установки зависимостей.

Создадим свою собственную страницу.
Используем виджет CameraPreview для отображения камеры на экране. Для этого в initState инициализируем наш CameraController c использованием CameraDescription (полученным из availableCameras).

*код нашего виджета*
late CameraController _controller;

@override
void initState() {
super.initState();
_controller = CameraController(
widget.camera, // CameraDescription
ResolutionPreset.high,
);

_controller.initialize().then((_) {
if (!mounted) {
return;
}
setState(() {});
});
}

@override
void dispose() {
_controller.dispose();
super.dispose();
}

@override
Widget build(BuildContext context) {
if (!_controller.value.isInitialized) {
return Container();
}
return AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: CameraPreview(_controller), // кастомизируем тут
);
}
}


Теперь у нас есть экран камеры, добавим функционал для запуска и остановки камеры. Например, вы можете добавить кнопку «Сделать фото» и кнопку «Записать видео», добавив их в ваш кастомный виджет с экраном камеры.

FloatingActionButton(
onPressed: () async {
try {
if (!_controller.value.isInitialized) {
return;
}
final image = await _controller.takePicture();
// Обработка сохраненной фотографии
} catch (e) {
// Обработка ошибок
}
},
child: Icon(Icons.camera),
),
FloatingActionButton(
onPressed: () async {
try {
if (!_controller.value.isInitialized) {
return;
}
if (!_controller.value.isRecordingVideo) {
await _controller.startVideoRecording();
} else {
final video = await _controller.stopVideoRecording();
// Обработка сохраненного видео
}
} catch (e) {
// Обработка ошибок
}
},
child: Icon(
_controller.value.isRecordingVideo
? Icons.stop
: Icons.videocam,
),
),


Не забудьте добавить разрешение на доступ к камере в файлах Info.plist на iOS и в AndroidManifest.xml на Android. И обрабатывайте исключения, дабы не попасть впросак🙂 Удачи!

Пишите в комментариях было ли полезно и рассказывайте о своих проектах Flutter с камерой!
  • 👍 19
  • 🔥 11
  • ❤ 1
More from @flutter_amiga
  1. Sep 9, 2026AI BOOST’26: выручка падает — что делают крупные digital-агентства и при чем здесь AI 22–2…
  2. Aug 18, 2026Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Сегодня посмотрим на чек-…
  3. Aug 13, 2026Hola, Amigos! Сегодня вышли Flutter 3.47 и Dart 3.13. Давайте вместе разберемся, что в них…
  4. Jul 31, 2026Дайджест июля Hola, Amigos! Собрали в одну подборку все полезные посты июля, которые вы мо…
  5. Jul 28, 2026Hola, Amigos! Сегодня посмотрим на один пакет, который может быть полезен в разработке - p…
  6. Jul 24, 2026Hola, Amigos! Сегодня мы вводим новую рубрику - обзоры правил для статического анализатора…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →