Есть ли способ, как я могу прочитать миниатюры из телефонной галереи? - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь отобразить все изображения галереи телефона самостоятельно, прочитав каталог внешних файлов и, возможно, каждое изображение, которое заканчивается на jpg или png. Я добился этого, но не смог отобразить их все в сетке из-за их размеров или нет. изображений, приложение вылетает. Код выглядит примерно так ...

new GridView.count(
              shrinkWrap: true,
              physics: new ClampingScrollPhysics(),
              crossAxisCount: 2,
              //        children: new List<Widget>.generate(_images.length, (index) {
              //        children: new List<Widget>.generate(allImages.length, (index) {
              children: new List<Widget>.generate(_PhoneImages.length, (index) {
                File imgFile = _phoneImageFiles[index];
                thumbBytes = _phoneThumbBytes[index]; // assuming it got created!!!
//                    print('thumbbytes $thumbBytes');
                print('phone image index: $index');
                return new GridTile(
                  child: new GestureDetector(
                      child: new Stack(
                        children: [

                          new Card(
//                                color: Colors.blue.shade200,
                            color: Colors.white70,
                            child: new Center(
                              //                                  child: new Text('tile $index'),
                              //                          child: new Image.asset(_images[index]),
                              /*
                            child: new CachedNetworkImage(
                              imageUrl: allImages[index].path,
  //                            placeholder: new CircularProgressIndicator(),
                              errorWidget: new Icon(Icons.error),
                            )
                          */

                              child: new Image.file(imgFile,
//                                  child: new Image.memory(thumbBytes,

Итак, я попробовал библиотеку изменения размера изображения, которая говорит мне сделать тяжелую операцию изменения размера, которая занимает почти 20 минут, прежде чем я могу показать миниатюры.

Все, что мне нужно, это читать миниатюры из галереи, например, как отображается телефонная галерея. Мне не нужна категоризация. Мне нужны все и ссылка на их полную версию, чтобы я мог что-то с ними сделать позже.

1 Ответ

0 голосов
/ 13 сентября 2018

Я думаю, что это может помочь multi_image_picker

* 1006 например *

import 'package:flutter/material.dart';
import 'package:multi_image_picker/asset.dart';

class AssetView extends StatefulWidget {
  final int _index;
  final Asset _asset;

  AssetView(this._index, this._asset);

  @override
  State<StatefulWidget> createState() => AssetState(this._index, this._asset);
}

class AssetState extends State<AssetView> {
  int _index = 0;
  Asset _asset;
  AssetState(this._index, this._asset);

  @override
  void initState() {
    super.initState();
    _loadImage();
  }

  void _loadImage() async {
    await this._asset.requestThumbnail(300, 300); // here requesting thumbnail
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    if (null != this._asset.thumbData) {
      return Image.memory(
        this._asset.thumbData.buffer.asUint8List(),
        fit: BoxFit.cover,
      );
    }

    return Text(
      '${this._index}',
      style: Theme.of(context).textTheme.headline,
    );
  }
}

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

import 'package:flutter/services.dart';
import 'package:multi_image_picker/asset.dart';
import 'package:multi_image_picker/multi_image_picker.dart';
import 'asset_view.dart';

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

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

class _MyAppState extends State<MyApp> {
  List<Asset> images = List<Asset>();
  String _error;

  @override
  void initState() {
    super.initState();
  }

  Widget buildGridView() {
    return GridView.count(
      crossAxisCount: 3,
      children: List.generate(images.length, (index) {
        return AssetView(index, images[index]);
      }),
    );
  }

  Future<void> loadAssets() async {
    setState(() {
      images = List<Asset>();
    });

    List resultList;
    String error;

    try {
      resultList = await MultiImagePicker.pickImages(
        maxImages: 300,
      );
    } on PlatformException catch (e) {
      error = e.message;
    }

    // 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.
    if (!mounted) return;

    setState(() {
      images = resultList;
      if (error == null) _error = 'No Error Dectected';
    });
  }

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new Scaffold(
        appBar: new AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Column(
          children: <Widget>[
            Center(child: Text('Error: $_error')),
            RaisedButton(
              child: Text("Pick images"),
              onPressed: loadAssets,
            ),
            Expanded(
              child: buildGridView(),
            )
          ],
        ),
      ),
    );
  }
}
...