gallery_saver_updated 3.0.0 copy "gallery_saver_updated: ^3.0.0" to clipboard
gallery_saver_updated: ^3.0.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: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_updated/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!';
    //       });
    //     });
    //   }
    // });
  }

  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!';
    //       });
    //     });
    //   }
    // });
  }

  // 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');
    //   });
    // });
  }

  // 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');
    //   });
    // });
  }
}

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 RenderRepaintBoundary 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);
    // }
  }
}
3
likes
140
points
2.42k
downloads

Publisher

unverified uploader

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.

Homepage

Documentation

API reference

License

Apache-2.0 (license)

Dependencies

flutter, http, path, path_provider

More

Packages that depend on gallery_saver_updated