Загрузка изображений из галереи в GridView не удалась - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть приложение для флаттера, и я хочу выбрать изображения из галереи. Я не хочу использовать image_picker , потому что я хочу внедрить изображения в приложение и выбрать его там.

Как в Instagram:

Instagram Post picture

Я попробовал следующее с плагином image_gallery :

class PickImagesFromGalleryScreen extends StatefulWidget {
  static const routeName = '/pick-images-from-gallery-screen';

  @override
  State<PickImagesFromGalleryScreen> createState() =>
      _PickImagesFromGalleryScreenState();
}

class _PickImagesFromGalleryScreenState
    extends State<PickImagesFromGalleryScreen> {
  List<File> _allImages = [];
  List<File> _selectedImages = [];

  void _imageSelected(int index) {
    if (_selectedImages.contains(_allImages[index])) {
      setState(() {
        _selectedImages.remove(_allImages[index]);
      });
    } else {
      setState(() {
        _selectedImages.add(_allImages[index]);
      });
    }
  }

  void _returnWithImages() {
    Navigator.pop(context, _selectedImages);
  }

  Future<void> _loadImageList() async {
    Map<dynamic, dynamic> allImageTemp;
    allImageTemp = await FlutterGallaryPlugin.getAllImages;

    List tempAllImageURIs = allImageTemp['URIList'] as List;
    List<File> tempAllImageFiles = [];
    tempAllImageURIs.forEach((image) {
      tempAllImageFiles.add(File(image.toString()));
    });

    setState(() {
      _allImages = tempAllImageFiles; // App crashes here
    });
  }

  GestureDetector _buildGridTile(int index) {
    return GestureDetector(
      onTap: () => _imageSelected(index),
      child: Column(
        mainAxisSize: MainAxisSize.max,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          Image.file(
            _allImages[index],
            fit: BoxFit.contain,
          ),
          Text(_selectedImages.contains(_allImages[index])
              ? 'Selected'
              : 'Not selected')
        ],
      ),
    );
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: GridView.builder(
        scrollDirection: Axis.vertical,
        gridDelegate:
            SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3),
        itemCount: _allImages.length,
        itemBuilder: (context, index) => _buildGridTile(index),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _returnWithImages,
      ),
    );
  }
}

Загрузка изображений из галереи работ. Приложение вылетает, когда я хочу восстановить экран с изображениями.

Журнал:

E/        ( 1668): getAllImageList: /storage/2862-17EF/DCIM/Camera/IMG_20200322_095128.jpg
E/        ( 1668): getAllImageList: IMG_20200322_095128.jpg
E/        ( 1668): getAllImageList: 1586286068
E/        ( 1668): getAllImageList: IMG_20200322_095128
E/        ( 1668): getAllImageList: /storage/2862-17EF/DCIM/Camera/IMG_20200318_122356.jpg
E/        ( 1668): getAllImageList: IMG_20200318_122356.jpg
E/        ( 1668): getAllImageList: 1586286069
E/        ( 1668): getAllImageList: IMG_20200318_122356
E/        ( 1668): getAllImageList: /storage/2862-17EF/DCIM/Camera/IMG_20200322_095134.jpg
... // a lot of images
E/        ( 1668): getAllImageList: IMG-20200423-WA0003.jpg
E/        ( 1668): getAllImageList: 1587648989
E/        ( 1668): getAllImageList: IMG-20200423-WA0003
E/        ( 1668): getAllImageList: /storage/emulated/0/DCIM/Camera/IMG_20200423_212507.jpg
E/        ( 1668): getAllImageList: IMG_20200423_212507.jpg
E/        ( 1668): getAllImageList: 1587669908
E/        ( 1668): getAllImageList: IMG_20200423_212507
Lost connection to device.
Exited (sigterm)

Это потому, что у меня слишком много изображений (более 900)? Я не понимаю, почему приложение падает. Я использую конструктор GridView.builder, поэтому приложение не отображает их сразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...