Flutter手写签名插件signature_kit的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter手写签名插件signature_kit的使用

本文档描述了如何在Flutter项目中使用signature_kit插件。此插件允许用户绘制平滑的手写签名,并且可以轻松导出图像数据。

开始使用

首先,在项目的pubspec.yaml文件中添加signature_kit依赖项:

dependencies:
  signature_kit: ^1.0.1

然后运行flutter pub get以安装依赖项。

使用方法

以下是一个简单的示例,演示如何使用signature_kit插件来创建一个带有签名功能的页面。

示例代码

import 'dart:ui';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:signature_kit/signature_kit.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Signature_kit Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 初始化签名控制器
  SignatureController controller = SignatureController(
    backgroundColor: Colors.black,   // 设置背景颜色为黑色
    color: Colors.white,             // 设置线条颜色为白色
    strokeWidth: 3,                  // 设置线条宽度为3
  );

  // 存储导出的PNG数据
  Uint8List? pngData;

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Signature_kit Example'),
        centerTitle: true,
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          const SizedBox(height: 20),
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              // 导出按钮
              ElevatedButton(
                onPressed: () async {
                  // 将签名导出为PNG格式
                  pngData = await controller.toImage(
                    pixelRatio: MediaQuery.of(context).devicePixelRatio,
                    format: ImageByteFormat.png,
                  );
                  // 更新UI
                  setState(() {});
                },
                child: const Text('导出'),
              ),
              const SizedBox(width: 20),
              // 清除按钮
              ElevatedButton(
                onPressed: () {
                  // 清除签名
                  controller.clear();
                  pngData = null;
                  // 更新UI
                  setState(() {});
                },
                child: const Text('清除'),
              ),
            ],
          ),
          const SizedBox(height: 20),
          // 显示签名区域
          SizedBox(
            height: 260,
            child: Signature(controller: controller),
          ),
          const SizedBox(height: 30),
          // 如果有导出的数据,则显示图像
          pngData != null ? Image.memory(pngData!) : const SizedBox(),
        ],
      ),
    );
  }
}

说明

  • 初始化签名控制器

    SignatureController controller = SignatureController(
      backgroundColor: Colors.black,
      color: Colors.white,
      strokeWidth: 3,
    );
    

    这里设置了签名的背景颜色为黑色,线条颜色为白色,线条宽度为3。

  • 导出签名

    pngData = await controller.toImage(
      pixelRatio: MediaQuery.of(context).devicePixelRatio,
      format: ImageByteFormat.png,
    );
    

    使用toImage方法将签名导出为PNG格式,并将其保存到pngData变量中。

  • 清除签名

    controller.clear();
    pngData = null;
    

更多关于Flutter手写签名插件signature_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter手写签名插件signature_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用signature_kit插件来实现手写签名的示例代码。

首先,确保你的Flutter项目已经创建并配置好。如果还没有,可以通过以下命令创建一个新的Flutter项目:

flutter create my_signature_app
cd my_signature_app

然后,在你的pubspec.yaml文件中添加signature_kit依赖:

dependencies:
  flutter:
    sdk: flutter
  signature_kit: ^latest_version  # 请将latest_version替换为实际的最新版本号

运行flutter pub get来安装依赖。

接下来,在你的主页面(通常是lib/main.dart)中,你可以使用SignatureKit组件来实现手写签名功能。以下是一个完整的示例代码:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Signature Kit Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SignaturePage(),
    );
  }
}

class SignaturePage extends StatefulWidget {
  @override
  _SignaturePageState createState() => _SignaturePageState();
}

class _SignaturePageState extends State<SignaturePage> {
  final GlobalKey<SignatureKitState> _signatureKey = GlobalKey<SignatureKitState>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Handwritten Signature'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Expanded(
              child: SignatureKit(
                key: _signatureKey,
                backgroundColor: Colors.white,
                penColor: Colors.black,
                strokeWidth: 5.0,
              ),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // 获取签名图片
                final Uint8List imageBytes = _signatureKey.currentState?.getData() ?? Uint8List();
                // 这里你可以将imageBytes保存到服务器或者本地存储
                // 例如,使用image.memory(imageBytes)将其显示为Image
                showDialog(
                  context: context,
                  builder: (context) {
                    return AlertDialog(
                      title: Text('Signature Preview'),
                      content: Image.memory(imageBytes),
                      actions: <Widget>[
                        TextButton(
                          onPressed: () {
                            Navigator.of(context).pop();
                          },
                          child: Text('Close'),
                        ),
                      ],
                    );
                  },
                );
              },
              child: Text('Get Signature'),
            ),
          ],
        ),
      ),
    );
  }
}

这个示例代码展示了如何在Flutter应用中使用signature_kit插件来实现手写签名功能。SignatureKit组件用于绘制签名,而GlobalKey用于获取签名图片数据。当用户点击“Get Signature”按钮时,会弹出一个对话框显示签名预览。

请确保在实际应用中处理签名的保存和加载逻辑,例如将签名图片上传到服务器或保存到本地存储。这可以通过使用Flutter的文件系统API或网络请求库来实现。

回到顶部