我如何在画廊中保存图片?

问题描述

这是打开相机的按钮的代码 所以我想在拍照时将其保存在图库中 我使用camera_camera包 https://pub.dev/packages/camera_camera

解决方法

您可以在下面复制粘贴运行完整代码
步骤1:将<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>添加到AndroidManifest.xml
步骤2:使用软件包https://pub.dev/packages/gallery_saver
步骤3:在onFile中使用GallerySaver.saveImageNavigator.pop(context,file)
代码段

Camera(
    onFile: (file) async {
      print("saver start");
      bool success = await GallerySaver.saveImage(file.path);
      print("saver end $success");
      Navigator.pop(context,file);
    },

工作演示

enter image description here

完整代码

import 'dart:developer';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:camera_camera/camera_camera.dart';
import 'package:gallery_saver/gallery_saver.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',theme: ThemeData(
        primarySwatch: Colors.blue,),home: HomeScreen(),);
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  File val;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: Text("")),floatingActionButton: FloatingActionButton(
            child: Icon(Icons.camera_alt),onPressed: () async {
              val = await showDialog(
                  context: context,builder: (context) => Camera(
                        onFile: (file) async {
                          print("saver start");
                          bool success = await GallerySaver.saveImage(file.path);
                          print("saver end $success");
                          Navigator.pop(context,file);
                        },mode: CameraMode.fullscreen,//initialCamera: CameraSide.front,//enableCameraChange: false,//  orientationEnablePhoto: CameraOrientation.landscape,onChangeCamera: (direction,_) {
                          print('--------------');
                          print('$direction');
                          print('--------------');
                        },// imageMask: CameraFocus.square(
                        //   color: Colors.black.withOpacity(0.5),// ),));
              setState(() {});
            }),body: Center(
            child: Container(
                height: MediaQuery.of(context).size.height * 0.7,width: MediaQuery.of(context).size.width * 0.8,child: val != null
                    ? Image.file(
                        val,fit: BoxFit.contain,)
                    : Text("Tire a foto"))));
  }
}