пакет camera, как сделать фото по указанному пути?

Как сделать фото по указанному пути? Вот метод, который делает фото

Future<void> _funMakePhoto() async {

  //если контроллер инициализирован
  if (!_cameraController.value.isInitialized) {
   return null;
  }

  //если фотография в данный момент не делается
  if (_cameraController.value.isTakingPicture) {
   return null;
  }

  //путь + название файла
  var now = DateTime.now();
  String directory = await ExtStorage.getExternalStoragePublicDirectory(ExtStorage.DIRECTORY_PICTURES);
  String file = '${now.year}-${now.month}-${now.day}-${now.hour}${now.minute}${now.second}.png';
  //соединение пути
  String pathAll = join(directory, file);

  /*КАК БЫЛО РАНЬШЕ ЛЕГКО И ПРОСТО, СЕЙЧАС ТАК НЕЛЬЗЯ*/
  //await _cameraController.takePicture(pathAll);

  //передаем путь + название файла
  XFile xFile = XFile(pathAll);

  //делаем снимок по этому пути
  xFile = await _cameraController.takePicture();

 }

Раньше было просто, методу

await _cameraController.takePicture(pathAll);

передавался путь + название файла и метод создавал там файл изображения. Теперь так нельзя, нужно использовать XFile. Скорее всего, я что-то делаю не верно, потому что после нажатия на кнопку сделать фото, фото вроде бы делается (на некоторе время экран останавливается), но перейдя в галерею и в папку Pictures фото там нет. Далее полный код.

main.dart

import 'dart:io';

import 'package:flutter/material.dart';

import 'package:camera/camera.dart';
import 'package:ext_storage/ext_storage.dart';
import 'package:path/path.dart';

List<CameraDescription> cameras = [];

Future<void> main() async {
 WidgetsFlutterBinding.ensureInitialized();
 cameras = await availableCameras();
 runApp(MyApp());
}

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
  return MaterialApp(
   debugShowCheckedModeBanner: false,
   title: 'Name App',
   theme: ThemeData(
    primarySwatch: Colors.blue,
   ),
   home: Scaffold(
    appBar: AppBar(
     title: Text('Name Page'),
    ),
    body: MyHomePage(),
   ),
  );
 }
}

class MyHomePage extends StatefulWidget {
 @override
 _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

 CameraController _cameraController;
 int _idCameras = 0;

 @override
 void initState() {
  super.initState();
  _funSetCameraController(cameras[0]);

 }

 @override
 void dispose() {
  super.dispose();
  _cameraController.dispose();

 }

 void _f1() {
  setState(() {

  });
 }

 Future<void> _funSetCameraController(CameraDescription cameraDescription) async {

  if (_cameraController != null) {
   await _cameraController.dispose();
  }

  _cameraController = CameraController(
   cameraDescription,
   ResolutionPreset.max
  );

  // If the controller is updated then update the UI.
  _cameraController.addListener(() {
   if (mounted) setState(() {});
  });

  try {
   await _cameraController.initialize();
  } on CameraException catch (e) {
   print(e);
  }

  if (mounted) {
   setState(() {});
  }

 }

 //метод переключает камеры
 void _funChoiceCameras(int id) {
  setState(() {
   switch(id) {
    case 0:
     _funSetCameraController(cameras[0]);
     _idCameras = 0;
     break;
    case 1:
     _funSetCameraController(cameras[1]);
     _idCameras = 1;
     break;
   }
  });
 }

 Future<void> _funMakePhoto() async {

  //если контроллер инициализирован
  if (!_cameraController.value.isInitialized) {
   return null;
  }

  //если фотография в данный момент не делается
  if (_cameraController.value.isTakingPicture) {
   return null;
  }

  //путь + название файла
  var now = DateTime.now();
  String directory = await ExtStorage.getExternalStoragePublicDirectory(ExtStorage.DIRECTORY_PICTURES);
  String file = '${now.year}-${now.month}-${now.day}-${now.hour}${now.minute}${now.second}.png';
  //соединение пути
  String pathAll = join(directory, file);

  /*КАК БЫЛО РАНЬШЕ ЛЕГКО И ПРОСТО, СЕЙЧАС ТАК НЕЛЬЗЯ*/
  //await _cameraController.takePicture(pathAll);

  //передаем путь + название файла
  XFile xFile = XFile(pathAll);

  //делаем снимок по этому пути
  xFile = await _cameraController.takePicture();

 }

 @override
 Widget build(BuildContext context) {

  if(!_cameraController.value.isInitialized) {
   return Container();
  }

  return Column(
   children: [
    Expanded(
     flex: 1,
     child: Container(
      width: MediaQuery.of(context).size.width,
      child: CameraPreview(_cameraController),
     ),
    ),
    Row(
     mainAxisAlignment: MainAxisAlignment.spaceAround,
     children: [
      TextButton(
       onPressed: () { _funChoiceCameras(0); },
       child: Container(
        width: 75.0,
        height: 50.0,
        decoration: BoxDecoration(
         border: Border.all(
          width: 2.0,
          color: (_idCameras == 0) ? Colors.pink : Colors.grey,
         ),
         borderRadius: BorderRadius.all(
          Radius.circular(10.0)
         ),
        ),
        alignment: Alignment.center,
        child: Icon(
         Icons.camera_rear_rounded,
         size: 38.0,
         color: (_idCameras == 0) ? Colors.pink : Colors.grey,
        ),
       ),
      ),

      TextButton(
       onPressed: () { _funChoiceCameras(1); },
       child: Container(
        width: 75.0,
        height: 50.0,
        decoration: BoxDecoration(
         border: Border.all(
          width: 2.0,
          color: (_idCameras == 1) ? Colors.pink : Colors.grey,
         ),
         borderRadius: BorderRadius.all(
          Radius.circular(10.0)
         ),
        ),
        alignment: Alignment.center,
        child: Icon(
         Icons.camera_front_rounded,
         size: 38.0,
         color: (_idCameras == 1) ? Colors.pink : Colors.grey,
        ),
       ),
      ),

      TextButton(
       onPressed: () { _funMakePhoto(); },
       child: Container(
        width: 75.0,
        height: 50.0,
        decoration: BoxDecoration(
         border: Border.all(
          width: 2.0,
          color: Colors.deepPurple,
         ),
         borderRadius: BorderRadius.all(
          Radius.circular(10.0)
         ),
        ),
        alignment: Alignment.center,
        child: Icon(
         Icons.photo_camera_rounded,
         size: 38.0,
         color: Colors.deepPurple,
        ),
       ),
      ),
     ],
    ),
   ],
  );
 }

}

Ответы (0 шт):