首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从应用程序文档目录中检索图像/屏幕快照?

如何从应用程序文档目录中检索图像/屏幕快照?
EN

Stack Overflow用户
提问于 2022-07-10 13:34:44
回答 1查看 118关注 0票数 0

我正在尝试构建一个应用程序库功能,我可以在应用程序中截图某些小部件,然后在应用程序的内部库屏幕中显示它。目前,我使用的是颤振屏幕截图包,然后我将截图保存到应用程序文档目录路径。但是,如何取回图像,并在应用程序中再次显示它们呢?

EN

回答 1

Stack Overflow用户

发布于 2022-07-10 13:47:54

在使用path_provider包之前,我是这样做的。(这只适用于一个图像,但您可以修改代码以检索多个图像)。

创建未初始化的变量:

代码语言:javascript
复制
Image? image;

然后,在initState中:

代码语言:javascript
复制
void initState() {
    _loadImage();
    super.initState();
  }

这是_loadImage()

代码语言:javascript
复制
  Future<void> _loadImage() async {
    final path = await imagePath;
    final _doesTheImageExist = File('${path}/qr.png').existsSync();
    print(_doesTheImageExist);
    if (_doesTheImageExist == true) {
      setState(() {
        image = Image.file(File("${path}/qr.png"));
      });
    } else {
      print('no');
      setState(() {
        image = null;
      });
    }
  }

创建一个获取图像路径imagePath的getter

代码语言:javascript
复制
  Future<String> get imagePath async {
    final directory = (await getApplicationDocumentsDirectory()).path;
    return '$directory/qr.png';
  }

然后,创建一个函数将图像保存到设备:

代码语言:javascript
复制
Future<void> _captureAndSaveQRCode() async {
    final imageDirectory = await imagePath;

    await _screenshotController.captureAndSave(imageDirectory,
        fileName: 'qr.png');
    await _loadImage();
    // setState(() {});
  }

下面是完整的可运行示例:

代码语言:javascript
复制
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'package:screenshot/screenshot.dart';

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const Scaffold(
        body: QrCode(),
      ),
    );
  }
}

class QrCode extends StatefulWidget {
  const QrCode({Key? key}) : super(key: key);

  @override
  State<QrCode> createState() => _QrCodeState();
}

class _QrCodeState extends State<QrCode> {
  final _screenshotController = ScreenshotController();

  Image? image;
  
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: image != null
          ? Center(
          child: Padding(
            padding: const EdgeInsets.only(
              top: 100.0,
            ),
            child: Column(
              children: [
                image!,
              ],
            ),
          ))
          : Center(
        child: Column(
          children: [
            TextButton(
                onPressed: _captureAndSaveQRCode,
                child: Text("Save QrCode")),
            Screenshot(
                controller: _screenshotController,
                child: _buildQRImage('data'))
          ],
        ),
      ),
    );
  }

  Widget _buildQRImage(String data) {
    return QrImage(
      data: data,
      size: 250.0,
      version: QrVersions.auto,
      errorCorrectionLevel: QrErrorCorrectLevel.H,
      gapless: false,
      foregroundColor: Colors.black,
      backgroundColor: Colors.white,
    );
  }

  Future<String> get imagePath async {
    final directory = (await getApplicationDocumentsDirectory()).path;
    return '$directory/qr.png';
  }

  Future<void> _loadImage() async {
    final path = await imagePath;
    final _doesTheImageExist = File('${path}/qr.png').existsSync();
    print(_doesTheImageExist);
    if (_doesTheImageExist == true) {
      setState(() {
        image = Image.file(File("${path}/qr.png"));
      });
    } else {
      setState(() {
        image = null;
      });
    }
  }

  Future<void> _captureAndSaveQRCode() async {
    final imageDirectory = await imagePath;

    await _screenshotController.captureAndSave(imageDirectory,
        fileName: 'qr.png');
    await _loadImage();
  }



  @override
  void initState() {
    _loadImage();
    super.initState();
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72928880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档