gallery_saver_plus 3.1.0 copy "gallery_saver_plus: ^3.1.0" to clipboard
gallery_saver_plus: ^3.1.0 copied to clipboard

Saves images and videos from network or temporary file to external storage. Both images and videos will be visible in Android Gallery and iOS Photos.

example/lib/main.dart

import 'dart:async';
import 'dart:io';
import 'dart:typed_data';
import 'dart:ui' as ui;

import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:gallery_saver_plus/gallery_saver.dart';
import 'package:image_picker/image_picker.dart';
import 'package:path_provider/path_provider.dart';

double textSize = 20;

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String firstButtonText = 'Take photo';
  String secondButtonText = 'Record video';

  String albumName = 'Media';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
      body: SafeArea(
        child: Container(
          color: Colors.white,
          child: Column(
            children: <Widget>[
              Flexible(
                flex: 1,
                child: Container(
                  child: SizedBox.expand(
                    child: TextButton(
                      style: ButtonStyle(
                        backgroundColor: MaterialStateProperty.all(Colors.blue),
                      ),
                      onPressed: _takePhoto,
                      child: Text(firstButtonText,
                          style: TextStyle(
                              fontSize: textSize, color: Colors.white)),
                    ),
                  ),
                ),
              ),
              ScreenshotWidget(),
              Flexible(
                child: Container(
                    child: SizedBox.expand(
                  child: TextButton(
                    style: ButtonStyle(
                      backgroundColor: MaterialStateProperty.all(Colors.white),
                    ),
                    onPressed: _recordVideo,
                    child: Text(secondButtonText,
                        style: TextStyle(
                            fontSize: textSize, color: Colors.blueGrey)),
                  ),
                )),
                flex: 1,
              )
            ],
          ),
        ),
      ),
    ));
  }

  void _takePhoto() async {
    ImagePicker()
        .getImage(source: ImageSource.camera)
        .then((PickedFile recordedImage) {
          if (recordedImage != null && recordedImage.path != null) {
            setState(() {
              firstButtonText = 'saving in progress...';
            });
            GallerySaver.saveImage(recordedImage.path, albumName: albumName)
                .then((bool success) {
              setState(() {
                firstButtonText = 'image saved!';
              });
            } as FutureOr<Null> Function(bool? value));
          }
        } as FutureOr<Null> Function(PickedFile? value));
  }

  void _recordVideo() async {
    ImagePicker()
        .getVideo(source: ImageSource.camera)
        .then((PickedFile recordedVideo) {
          if (recordedVideo != null && recordedVideo.path != null) {
            setState(() {
              secondButtonText = 'saving in progress...';
            });
            GallerySaver.saveVideo(recordedVideo.path, albumName: albumName)
                .then((bool success) {
              setState(() {
                secondButtonText = 'video saved!';
              });
            } as FutureOr<Null> Function(bool? value));
          }
        } as FutureOr<Null> Function(PickedFile? value));
  }

  // ignore: unused_element
  void _saveNetworkVideo() async {
    String path =
        'https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4';
    GallerySaver.saveVideo(path, albumName: albumName).then((bool success) {
      setState(() {
        print('Video is saved');
      });
    } as FutureOr<Null> Function(bool? value));
  }

  // ignore: unused_element
  void _saveNetworkImage() async {
    String path =
        'https://image.shutterstock.com/image-photo/montreal-canada-july-11-2019-600w-1450023539.jpg';
    GallerySaver.saveImage(path, albumName: albumName).then((bool success) {
      setState(() {
        print('Image is saved');
      });
    } as FutureOr<Null> Function(bool? value));
  }
}

class ScreenshotWidget extends StatefulWidget {
  @override
  _ScreenshotWidgetState createState() => _ScreenshotWidgetState();
}

class _ScreenshotWidgetState extends State<ScreenshotWidget> {
  final GlobalKey _globalKey = GlobalKey();
  String screenshotButtonText = 'Save screenshot';

  @override
  Widget build(BuildContext context) {
    return Flexible(
      flex: 1,
      child: RepaintBoundary(
        key: _globalKey,
        child: Container(
          child: SizedBox.expand(
            child: TextButton(
              style: ButtonStyle(
                backgroundColor: MaterialStateProperty.all(Colors.pink),
              ),
              onPressed: _saveScreenshot,
              child: Text(screenshotButtonText,
                  style: TextStyle(fontSize: textSize, color: Colors.white)),
            ),
          ),
        ),
      ),
    );
  }

  Future<void> _saveScreenshot() async {
    setState(() {
      screenshotButtonText = 'saving in progress...';
    });
    try {
      // //extract bytes
      // final RenderObject? boundary =
      //     _globalKey.currentContext?.findRenderObject();
      // final ui.Image image = await boundary.toImage(pixelRatio: 3.0);
      // final ByteData byteData =
      //     await image.toByteData(format: ui.ImageByteFormat.png);
      // final Uint8List pngBytes = byteData.buffer.asUint8List();

      // //create file
      // final String dir = (await getApplicationDocumentsDirectory()).path;
      // final String fullPath = '$dir/${DateTime.now().millisecond}.png';
      // File capturedFile = File(fullPath);
      // await capturedFile.writeAsBytes(pngBytes);
      // print(capturedFile.path);

      // await GallerySaver.saveImage(capturedFile.path).then((value) {
      //   setState(() {
      //     screenshotButtonText = 'screenshot saved!';
      //   });
      // });
    } catch (e) {
      print(e);
    }
  }
}
30
likes
0
points
28.7k
downloads

Publisher

verified publisheropen-ci.io

Weekly Downloads

Saves images and videos from network or temporary file to external storage. Both images and videos will be visible in Android Gallery and iOS Photos.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, http, path, path_provider

More

Packages that depend on gallery_saver_plus

Packages that implement gallery_saver_plus