thumbnail_creator 0.0.9 copy "thumbnail_creator: ^0.0.9" to clipboard
thumbnail_creator: ^0.0.9 copied to clipboard

A plugin, which converts images by filepath to thumbnails on the fly in a really fast manner. The image dimensions are choosable. At this moment, only working on android!

example/lib/main.dart

import 'dart:io';

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:thumbnail_creator/thumbnail_creator.dart';

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

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

class _MyAppState extends State<MyApp> {
  List<String> list;
  ThumbnailCreator _creator;
  Resourcer _resourcer;

  @override
  void initState() {
    super.initState();
    _creator = ThumbnailCreator();
    _resourcer = Resourcer();

    _resourcer.initLists().then((_) {
      setState(() {
        
      });
    });

    //initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    try {
      list = List();

       for(int i = 0; i < 300; i++) {
         list.addAll([
           "/storage/emulated/0/locally/image/a137fa270841cb039862774b69d8481081308567.jpg",
           "/storage/emulated/0/locally/image/68bc5ef349b264072ef39a159d8230f7c57acce6.jpg",
           "/storage/emulated/0/locally/image/b7cdf933f7b467f22d84105e6a3cf21c08203ea6.jpg",
           "/storage/emulated/0/locally/image/81cf706c66aea1d96dffa701f56cd495b127882f.jpg",
           "/storage/emulated/0/locally/image/6364f829d8492784141c37e3109053122cd0d97d.jpg",
           "/storage/emulated/0/locally/image/bea0274c42dc4b6684c491b025876810294a9b02.jpg",
           "/storage/emulated/0/locally/image/03b7f051ba4f77720e385e758e24e2e6d2492e81.jpg",
           "/storage/emulated/0/locally/image/465521787e62c4ab8e1cdd063988ec24f6c0d22f.jpg",
           "/storage/emulated/0/locally/image/9c2ca95465a35e05bdc6c74940a3be07b74e809f.jpg",
           "/storage/emulated/0/locally/image/1c846c6ca6bca5d62a3d4e499aaab29b6dcea381.jpg",
           "/storage/emulated/0/locally/image/36e54ca387679c5dd0e9b951713c065dec6c70c8.jpg",
           "/storage/emulated/0/locally/image/e5b6c7e9888c1ab72a28cb476bb179d2500c4566.jpg",
           "/storage/emulated/0/locally/image/30e245b1c74dae622631f97f38d22075484c6ea5.jpg",
           "/storage/emulated/0/locally/image/0b4552dfc2c0e0fa917a0b1642220282500272d3.jpg",
           "/storage/emulated/0/locally/image/56ee55ac00cfb5852789a05d11c1f289d272396f.jpg",
           "/storage/emulated/0/locally/image/b05028e0239dcbc7396c7c328ad43c45a6314729.jpg",
           "/storage/emulated/0/locally/image/d6c515f7594d5dec9d14a05b17942b3853186380.jpg",
           "/storage/emulated/0/locally/image/be8847b00bb13a275dcac03ca78fcd15123641fc.jpg",
           "/storage/emulated/0/locally/image/84ecb92fad1c95127f95a96f82dd7c356a3b9161.jpg",
           "/storage/emulated/0/locally/image/893309d79142ea46badca700a9a563bb10a60a78.jpg",
           "/storage/emulated/0/locally/image/e2d25e2fe2fd411bdda7b915d3f38c9861ed4103.jpg",
           "/storage/emulated/0/locally/image/05168ef82b4a1e494b8c60b83792a2fccf12caab.jpg",
           "/storage/emulated/0/locally/image/e38b216d1c933cc6f451141df315bb00a1cd57eb.jpg",
           "/storage/emulated/0/locally/image/1c444b4ed919e850c729e60e3852b9f9e6edca6a.png",
           "/storage/emulated/0/locally/image/84ecb92fad1c95127f95a96f82dd7c356a3b9161.jpg",
           "/storage/emulated/0/locally/image/893309d79142ea46badca700a9a563bb10a60a78.jpg",
           "/storage/emulated/0/locally/image/e2d25e2fe2fd411bdda7b915d3f38c9861ed4103.jpg",
           "/storage/emulated/0/locally/image/05168ef82b4a1e494b8c60b83792a2fccf12caab.jpg",
           "/storage/emulated/0/locally/image/e38b216d1c933cc6f451141df315bb00a1cd57eb.jpg",
           "/storage/emulated/0/locally/image/1c444b4ed919e850c729e60e3852b9f9e6edca6a.png",
           "/storage/emulated/0/locally/image/98bf443a84820e4f22bbca4c5c009da52dee532e.png",
           "/storage/emulated/0/locally/image/ecffbb87e773a5e09596e398cbcb05e2fd451706.jpg",
           "/storage/emulated/0/locally/image/0a83fc2f99a2eb5060346811290d3ae00efe20c0.jpg",
           "/storage/emulated/0/locally/image/c7d2650b14dd75f77928f57b2b380ba0dfcae3ee.jpg",
           "/storage/emulated/0/locally/image/4ae7f7136682e43f25bb4a58a53652a36bfa0d8d.jpg",
           "/storage/emulated/0/locally/image/c6833bf5b021ff71a940a39d5d4c47d77c139b7f.jpg",
           "/storage/emulated/0/locally/image/a2f47ea0037ca5d843980969827bcc77949ed9df.jpg",
           "/storage/emulated/0/locally/image/a086700a723cd82a48e2779422ae3e4446c60038.jpg",
           "/storage/emulated/0/locally/image/a137fa270841cb039862774b69d8481081308567.jpg",
           "/storage/emulated/0/locally/image/68bc5ef349b264072ef39a159d8230f7c57acce6.jpg",
           "/storage/emulated/0/locally/image/b7cdf933f7b467f22d84105e6a3cf21c08203ea6.jpg",
           "/storage/emulated/0/locally/image/591b6a36cb31472082056095c141c28acab5225c.jpg",
           "/storage/emulated/0/locally/image/6517b869959366db8703b62f51123ca38c681933.jpg",
           "/storage/emulated/0/locally/image/023c249708c1f3a854117612cc2ae2306cb59d7d.jpg",
           "/storage/emulated/0/locally/image/0d4a4f61c8453531a6a2a476102fa48ba0be0ffe.jpg"
         ]);
       }

      if (this.mounted) {
        setState((){});
      }
    } on PlatformException {

    }

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: GridView.builder(
            gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
              crossAxisCount: 4,
              crossAxisSpacing: 1,
              mainAxisSpacing: 1,
            ),
            cacheExtent: 1200,
            itemBuilder: (_, __) {
              return FutureBuilder(
                future: _creator.getThumbnail(
                  _resourcer.imageList[__].path,
                  reqHeight: 100,
                  reqWidth: 100,
                ),
                builder: (BuildContext context, AsyncSnapshot image) {
                  if(image.hasData) {
                    return image.data is String ? Image.file(
                      File(image.data),
                      fit: BoxFit.cover,
                      width: 100,
                      height: 100,
                      gaplessPlayback: true,
                    ) : Image.memory(
                      image.data,
                      fit: BoxFit.cover,
                      width: 100,
                      height: 100,
                      gaplessPlayback: true,
                    );
                  } else {
                    print(image.data);
                    return Container(
                      width: 10,
                      height: 10,
                      child: Center(
                        child: CircularProgressIndicator(
                          valueColor: AlwaysStoppedAnimation(Colors.black),
                        ),
                      ),
                    );
                  }
                }
              );
            },
          itemCount: _resourcer.imageList != null ? _resourcer.imageList.length : 0,
        ),
      ),
    );
  }
}


class Resourcer {
  StreamController _streamController;
  Stream _stream;
  Directory _externalDocumentsDirectory;
  List<File> imageList = List();

  Stream get loadingStatusStream => _stream;

  List<String> _imageFormats = [
    'jpg',
    'jpeg',
    'png',
    'gif',
    'bmp',
    'webp',
    'wbmp',
  ];


  Future initLists() async {
    _externalDocumentsDirectory = Directory('/storage/emulated/0');

    imageList.clear();

    await _getDirectoryContent(_externalDocumentsDirectory.uri);
  }

  void dispose() {
    imageList.clear();
  }

  Future _getDirectoryContent(Uri uri) async {
    try {
      Stream<FileSystemEntity> stream = Directory.fromUri(uri).list();

      await for (FileSystemEntity entity in stream) {
        if (entity is File) {
          _determineDestination(entity);
        } else if (entity is Directory) {
          await _getDirectoryContent(entity.uri);
        }
      }
    } catch(err) {

    }
  }

  void _determineDestination(FileSystemEntity entity) {
    if (entity is File) {
      try {
        int lastIndex = entity.path.lastIndexOf('.') + 1;
        String extension = entity.path.substring(lastIndex, entity.path.length).toLowerCase();

        if (_imageFormats.indexOf(extension) != -1) {
          //print(extension);
          imageList.add(entity);
        }
      } catch (err) {
        
      }
    }
  }
}
0
likes
20
pub points
0%
popularity

Publisher

unverified uploader

A plugin, which converts images by filepath to thumbnails on the fly in a really fast manner. The image dimensions are choosable. At this moment, only working on android!

Homepage

License

unknown (LICENSE)

Dependencies

flutter

More

Packages that depend on thumbnail_creator