字节笔记本

2026年2月22日

Flutter Pasteboard 插件:从剪贴板读取图片的完整指南

本文介绍 Flutter 开发中如何使用 Pasteboard 插件从剪贴板读取图片数据,以及相关的代码实现方案。

Pasteboard 插件简介

Pasteboard 是一个 Flutter 插件,提供了对系统剪贴板的访问能力,支持读取和写入多种类型的数据,包括文本、图片等。在跨平台开发中,它简化了剪贴板操作的复杂度。

核心代码片段

从剪贴板读取图片

dart
final imageBytes = await Pasteboard.image;

这行代码是 Pasteboard 插件中最常用的图片读取方式,它返回一个 Uint8List? 类型的字节数组,包含了剪贴板中图片的二进制数据。

完整使用示例

基础用法

dart
import 'package:pasteboard/pasteboard.dart';
import 'dart:typed_data';

Future<void> readImageFromClipboard() async {
  try {
    // 从剪贴板读取图片数据
    final Uint8List? imageBytes = await Pasteboard.image;
    
    if (imageBytes != null) {
      // 成功获取图片数据
      print('图片大小: ${imageBytes.length} bytes');
      // 可以将其转换为 Image widget 显示
      // Image.memory(imageBytes)
    } else {
      // 剪贴板中没有图片
      print('剪贴板中没有图片数据');
    }
  } catch (e) {
    print('读取剪贴板失败: $e');
  }
}

结合 UI 使用

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

class ClipboardImagePage extends StatefulWidget {
  @override
  _ClipboardImagePageState createState() => _ClipboardImagePageState();
}

class _ClipboardImagePageState extends State<ClipboardImagePage> {
  Uint8List? _imageBytes;

  Future<void> _pasteImage() async {
    final bytes = await Pasteboard.image;
    if (bytes != null) {
      setState(() {
        _imageBytes = bytes;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('剪贴板图片')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            if (_imageBytes != null)
              Image.memory(_imageBytes!, height: 200)
            else
              Text('点击按钮粘贴图片'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _pasteImage,
              child: Text('从剪贴板粘贴'),
            ),
          ],
        ),
      ),
    );
  }
}

平台支持

Pasteboard 插件支持以下平台:

  • macOS - 完整支持
  • Windows - 完整支持
  • Linux - 基础支持
  • iOS - 部分支持(需额外配置)
  • Android - 部分支持(需额外配置)

依赖配置

pubspec.yaml 中添加依赖:

yaml
dependencies:
  pasteboard: ^0.2.0

注意事项

  1. 权限处理 - 在移动端使用时需要处理相关权限
  2. 内存管理 - 大尺寸图片可能导致内存问题,建议进行压缩处理
  3. 格式支持 - 不同平台支持的图片格式可能有所差异
  4. 错误处理 - 始终检查返回值是否为 null,并做好异常处理

相关资源

分享: