ios - 将目录中的所有图像显示到 Flutter 中的列表

标签 ios flutter dart dart-sdk

我想知道是否有一种方法可以将用户移动设备中特定目录中的所有图像或文件显示为 flutter 中的列表/数组,以便我可以在 ListView 中使用。

谢谢,欢迎任何帮助。

PS:我想尝试使用 path_provider 但不知道如何。

最佳答案

我正在开发使用本地存储/应用程序目录的应用程序。

花了五天时间我找到了解决方案...

import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';

final Directory _photoDir = new Directory(
    '/storage/emulated/0/Android/data/com.eclixtech.doc_scanner/files/CroppedImages');

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Document Scanner',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ImageCapture(),
    );
  }
}

class ImageCapture extends StatefulWidget {
  @override
   _ImageCaptureState createState() => _ImageCaptureState();
}

class _ImageCaptureState extends State<ImageCapture> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Doc Scanner'),
      ),
      body: Container(
        child: FutureBuilder(
          builder: (context, status) {
            return ImageGrid(directory: _photoDir);
          },
        ),
      ),
    );
  }
}
class ImageGrid extends StatelessWidget {
  final Directory directory;

  const ImageGrid({Key key, this.directory}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    var refreshGridView;
    var imageList = directory
        .listSync()
        .map((item) => item.path)
        .where((item) => item.endsWith(".jpg"))
        .toList(growable: false);
    return GridView.builder(
      itemCount: imageList.length,
      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 3, childAspectRatio: 3.0 / 4.6),
      itemBuilder: (context, index) {
        File file = new File(imageList[index]);
        String name = file.path.split('/').last;
        return Card(
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(8.0),
          ),
          child: Padding(
            padding: const EdgeInsets.all(5.0),
            child: InkWell(
              onTap: () => {
                refreshGridView =
                Navigator.push(context, MaterialPageRoute(builder: (context) {
              return ImageEditClass(
                imagepath: imageList[index],
              );
            })).then((refreshGridView) {
              if (refreshGridView != null) {
                build(context);
              }
            }).catchError((er) {
              print(er);
            }),
              },
               child: Padding(
                 padding: new EdgeInsets.all(4.0),
                 child: Image.file(
                   File(imageList[index]),
                   fit: BoxFit.cover,
                 ),
               ),
            ),
          ),
        );
      },
    );
  }
}

您可以在此处提及图片的扩展名(.jpg、.png 等)。

.where((item) => item.endsWith(".jpg"))

在上面提到的代码中。

关于ios - 将目录中的所有图像显示到 Flutter 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54692052/

相关文章:

ios - 强制 Wifi 弹出窗口 : Click a link to open Safari

ios - 如何使用 Runner.app 创建用于测试的 .ipa 文件?

android - 如何找到我们是否在 Dart (Flutter) 中运行单元测试

flutter - Dart Isolate 作为长期 worker

android-studio - 断言失败: bool 表达式不能为null?如何解决这个问题?

list - Flutter 计算其类别中商品的总价

ios - 如何编写核心数据获取请求谓词以将 NSNumber 作为位图进行比较

iphone - 如何将 iPhone 数据备份到服务器?

ios - 以编程方式创建 View 的空 View 应用程序和单 View 应用程序之间有什么区别?

flutter - 在Flutter和Dart中如何测试数据是否成功写入json?