Flutter数字签名插件digital_signature_flutter的使用

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

Flutter数字签名插件digital_signature_flutter的使用

digital_signature_flutter 是一个用于通过绘制手势捕获签名的库。你可以使用手指、笔或鼠标在平板电脑、触摸屏等设备上绘制自己的签名。该插件还允许你将签名保存为图像。

使用方法

创建一个新的Flutter项目

  1. 打开一个Flutter项目,编辑 pubspec.yaml 文件,添加以下依赖:

    dependencies:
      digital_signature_flutter: ^0.0.3
    
  2. 运行 flutter pub get 来获取依赖。

创建数字签名类

  1. lib 目录下创建一个新的Dart文件,例如 digital_signature.dart

  2. 在这个文件中定义一个 DigitalSignature 类,并初始化一个 SignatureController。这个控制器包含签名点、笔宽和笔颜色,允许你与签名小部件交互。

    import 'package:digital_signature_flutter/digital_signature_flutter.dart';
    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    
    class DigitalSignature extends StatefulWidget {
      const DigitalSignature({Key? key}) : super(key: key);
    
      @override
      State<DigitalSignature> createState() => _DigitalSignatureState();
    }
    
    class _DigitalSignatureState extends State<DigitalSignature> {
      SignatureController? controller;
      Uint8List? signature;
    
      @override
      void initState() {
        controller = SignatureController(penStrokeWidth: 2, penColor: Colors.black);
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: const Text('Digital Signature'),
          ),
          body: SingleChildScrollView(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                const SizedBox(height: 15),
                const Text('Please put the signature here', style: TextStyle(fontSize: 20, color: Colors.black)),
                const SizedBox(height: 15),
                Card(
                  child: Center(
                    child: Signature(
                      height: 200,
                      width: 350,
                      controller: controller!,
                      backgroundColor: Colors.white,
                    ),
                  ),
                ),
                buttonWidgets(context)!,
                const SizedBox(height: 30),
                signature != null
                    ? Column(
                        children: [
                          Center(child: Image.memory(signature!)),
                          const SizedBox(height: 10),
                          MaterialButton(
                            color: Colors.green,
                            onPressed: () {},
                            child: const Text("Submit", style: TextStyle(fontSize: 12)),
                          )
                        ],
                      )
                    : Container(),
                const SizedBox(height: 30),
              ],
            ),
          ),
        );
      }
    
      Widget? buttonWidgets(BuildContext context) {
        return Row(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: [
            TextButton(
              onPressed: () async {
                if (controller!.isNotEmpty) {
                  final sign = await exportSignature();
                  setState(() {
                    signature = sign;
                  });
                } else {
                  // 显示提示信息,例如 "Please put your signature"
                }
              },
              child: const Text("Preview", style: TextStyle(fontSize: 20, color: Colors.green)),
            ),
            TextButton(
              onPressed: () {
                controller?.clear();
                setState(() {
                  signature = null;
                });
              },
              child: const Text("Cancel", style: TextStyle(fontSize: 20, color: Colors.red)),
            ),
          ],
        );
      }
    
      Future<Uint8List?> exportSignature() async {
        final exportController = SignatureController(
          penStrokeWidth: 2,
          exportBackgroundColor: Colors.white,
          penColor: Colors.black,
          points: controller!.points,
        );
    
        final signature = exportController.toPngBytes();
    
        // 清理内存
        exportController.dispose();
    
        return signature;
      }
    
      @override
      void dispose() {
        controller!.dispose();
        super.dispose();
      }
    }
    

主应用入口

main.dart 文件中,创建并运行 MyApp,并在其中使用 DigitalSignature 组件。

import 'package:flutter/material.dart';
import 'digital_signature.dart'; // 引入上面创建的数字签名类

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

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Flutter Digital Signature',
      home: DigitalSignature(),
    );
  }
}

运行项目

  1. 确保你已经安装了所有依赖项。
  2. 运行 flutter run 命令启动你的应用。

现在,你应该能够在一个Flutter应用中使用 digital_signature_flutter 插件来捕获和预览数字签名。


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

1 回复

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


当然,以下是如何在Flutter项目中使用digital_signature_flutter插件进行数字签名的示例代码。这个插件允许用户在Flutter应用中绘制签名,并获取其Base64编码的PNG图像。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加digital_signature_flutter依赖:

dependencies:
  flutter:
    sdk: flutter
  digital_signature_flutter: ^x.y.z  # 替换为最新版本号

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

2. 导入插件

在你的Dart文件中导入插件:

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

3. 创建签名页面

下面是一个完整的示例,展示如何使用digital_signature_flutter插件来创建一个签名页面,并获取签名图像:

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

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

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

class _SignaturePageState extends State<SignaturePage> {
  final DigitalSignatureController _controller = DigitalSignatureController();
  String _signatureBase64 = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Digital Signature Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: <Widget>[
            Expanded(
              child: DigitalSignature(
                controller: _controller,
                backgroundColor: Colors.white,
                penColor: Colors.black,
                penStrokeWidth: 5.0,
                onClear: () {
                  setState(() {
                    _signatureBase64 = '';
                  });
                },
              ),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                final Uint8List imageBytes = await _controller.getImage();
                if (imageBytes != null) {
                  setState(() {
                    _signatureBase64 = base64Encode(imageBytes);
                  });
                  // 你可以在这里将_signatureBase64发送到服务器或保存到本地
                }
              },
              child: Text('Get Signature'),
            ),
            if (_signatureBase64.isNotEmpty)
              SizedBox(height: 20),
            if (_signatureBase64.isNotEmpty)
              Text('Signature Base64:\n$_signatureBase64'),
          ],
        ),
      ),
    );
  }
}

4. 运行应用

将上述代码添加到你的Flutter项目中,然后运行应用。你将看到一个页面,用户可以在其中绘制签名。点击“Get Signature”按钮后,签名将被转换为Base64编码的PNG图像,并显示在屏幕上。

注意事项

  • 确保你已经正确安装了digital_signature_flutter插件及其依赖。
  • 在生产环境中,你可能需要处理更多的错误情况和边界情况。
  • 如果你需要将签名图像上传到服务器,你可能需要使用HTTP客户端(如diohttp包)来发送POST请求。

这个示例代码提供了一个基本的框架,展示了如何在Flutter应用中使用digital_signature_flutter插件来获取用户的数字签名。你可以根据自己的需求进一步定制和扩展这个示例。

回到顶部