Flutter   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了file – 在Flutter中保存照片(尤其是相机胶卷)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我无法弄清楚如何保存到相机胶卷(相当于React Native的CameraRoll saveToCameraRoll().

> Flutter camera建议使用path_provider获取应用程序目录,但似乎没有获取相机卷目录路径的选项.
>我在CameraController.capture上遇到异常

相关的变化(只有相关的变化,以差异的形式)在这里:@L_944_7@

我的整个main.dart在下面是为了方便repro(搜索问题:查找相关部分):

import 'dart:async';
import 'dart:io';

import 'package:Flutter/material.dart';
import 'package:camera/camera.dart';
import 'package:Flutter/services.dart';
import 'package:path_provider/path_provider.dart';

List<CameraDescription> cameras;

Future<Null> main() async {
  SystemChrome.setPreferredOrientations([
    DeviceOrientation.porTraitUp,DeviceOrientation.porTraitDown
  ]);

  cameras = await availableCameras();
  runApp(new CameraApp());
}

class CameraApp extends StatefulWidget {
  @override
  _CameraAppState createState() => new _CameraAppState();
}

class _CameraAppState extends State<CameraApp> {
  String _appdirectoryPath;
  CameraController controller;

  Future<void> _requestappdirectory() async {
    // QUESTION: `path_provider` doesn't have getCameraRollDirectory()
    Directory _appdirectory = await getApplicationDocumentsDirectory();

    setState(() {
      _appdirectoryPath = _appdirectory.path;
    });
  }

  @override
  void initState() {
    super.initState();
    _requestappdirectory();
    controller = new CameraController(cameras[0],ResolutionPreset.medium);
    controller.initialize().then((_) {
      if (!mounted) {
        return;
      }
      setState(() {});
    });
  }

  @override
  void dispose() {
    controller?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    if (!controller.value.initialized) {
      return new Container();
    }

    return new MaterialApp(
      title: 'Flutter Demo',theme: new ThemeData(
        priMarySwatch: Colors.red,),home: new Scaffold(
        body: new Center(
          child: new AspectRatio(
            aspectRatio: controller.value.aspectRatio,child: new CameraPreview(controller),floaTingActionButton: new FloaTingActionButton(
          tooltip: 'Increment',child: new Icon(Icons.camera),onPressed: () {
            print('capturing');
            print(_appdirectoryPath);
            // QUESTION: this errors out
            controller.capture(_appdirectoryPath);
          },floaTingActionButtonLOCATIOn: FloaTingActionButtonLOCATIOn.centerFloat,);
  }
}

日志信息如下:

I/Flutter ( 5471): capturing
I/Flutter ( 5471): /data/user/0/com.example.mycameraapp/app_Flutter
W/LegacyrequestMapper( 5471): convertrequestMetadata - control.awbRegions setTing is not supported,ignoring value
W/LegacyrequestMapper( 5471): Only received metering rectangles with weight 0.
W/LegacyrequestMapper( 5471): Only received metering rectangles with weight 0.
I/requestThread-0( 5471): Received jpeg.
I/requestThread-0( 5471): Producing jpeg buffer...
W/LegacyrequestMapper( 5471): convertrequestMetadata - control.awbRegions setTing is not supported,ignoring value
W/LegacyrequestMapper( 5471): Only received metering rectangles with weight 0.
W/LegacyrequestMapper( 5471): Only received metering rectangles with weight 0.
E/Flutter ( 5471): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/Flutter ( 5471): CameraException(IOError,Failed saving imagE)
E/Flutter ( 5471): #0      CameraController.capture (package:camera/camera.dart:234:7)
E/Flutter ( 5471): <asynchronous suspension>
E/Flutter ( 5471): #1      _CameraAppState.build.<anonymous closure> (file:///Users/briankung/workspace/mobile/Flutter/my_camera_app/lib/main.dart:84:24)
E/Flutter ( 5471): #2      _InkResponseState._handleTap (package:Flutter/src/material/ink_well.dart:478:14)
E/Flutter ( 5471): #3      _InkResponseState.build.<anonymous closure> (package:Flutter/src/material/ink_well.dart:530:30)
E/Flutter ( 5471): #4      GestureRecognizer.invokeCallBACk (package:Flutter/src/gestures/recognizer.dart:102:24)
E/Flutter ( 5471): #5      TapGestureRecognizer._checkUp (package:Flutter/src/gestures/tap.dart:161:9)
E/Flutter ( 5471): #6      TapGestureRecognizer.acceptGesture (package:Flutter/src/gestures/tap.dart:123:7)
E/Flutter ( 5471): #7      GestureArenaManager.sweep (package:Flutter/src/gestures/arena.dart:156:27)
E/Flutter ( 5471): #8      _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:Flutter/src/gestures/binding.dart:147:20)
E/Flutter ( 5471): #9      _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:Flutter/src/gestures/binding.dart:121:22)
E/Flutter ( 5471): #10     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:Flutter/src/gestures/binding.dart:101:7)
E/Flutter ( 5471): #11     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:Flutter/src/gestures/binding.dart:64:7)
E/Flutter ( 5471): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:Flutter/src/gestures/binding.dart:48:7)
E/Flutter ( 5471): #13     _invoke1 (dart:ui/hooks.dart:134:13)
E/Flutter ( 5471): #14     _dispatchPointerDataPacket (dart:ui/hooks.dart:91:5)
I/requestQueue( 5471): RepeaTing capture request cancelled.

谢谢!

忘记版本号:

$Flutter --version
Flutter 0.2.8 • chAnnel beta • https://github.com/Flutter/Flutter.git
Framework • revision b397406561 (10 days ago) • 2018-04-02 13:53:20 -0700
ENGIne • revision c903c217a1
Tools • Dart 2.0.0-dev.43.0.Flutter-52afcba357

// pubspec.yaml

camera:
  dependency: "direct main"
  description:
    name: camera
    url: "https://pub.dartlang.org"
  source: hosted
  version: "0.1.2"
path_provider:
  dependency: "direct main"
  description:
    name: path_provider
    url: "https://pub.dartlang.org"
  source: hosted
  version: "0.4.0"

解决方法

不幸的是,我不认为扑动目前暴露了这个功能.

您最好的选择可能是编写插件或使用平台频道来执行此操作.您可以像在this example中一样使用临时目录,然后将路径传递给android,在那里您将读取文件并将其插入到库中,如下所示:

@H_527_14@mediaStore.Images.Media.insertImage( getContentResolver(),yourBitmap,yourtitle,yourDescription );`

如果您在其中一个Flutter存储库中创建功能请求,并且有人决定通过为您编写插件来帮助您,那么您可能会很幸运.

大佬总结

以上是大佬教程为你收集整理的file – 在Flutter中保存照片(尤其是相机胶卷)全部内容,希望文章能够帮你解决file – 在Flutter中保存照片(尤其是相机胶卷)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。