Flutter电子签名插件esign_plugin的使用

Flutter电子签名插件esign_plugin的使用

简介

Digio Esign flutter 插件允许你在Flutter应用中集成电子签名功能。

开始使用

Android

如何集成?

  1. 在根build.gradle文件末尾添加仓库:

    allprojects {
      repositories {
         ...
         maven { url 'https://jitpack.io' }
      }
    }
    
  2. 添加依赖项:

    implementation 'com.github.digio-tech:gateway:v4.0.14'
    implementation 'com.github.digio-tech:gateway_esign:v4.0.12'
    
  3. 检查你的appbuild.gradle文件(android/app/build.gradle),确认有类似以下的声明(根据你选择的构建配置而定):

    android {
        compileSdkVersion 34
    
        defaultConfig {
            minSdkVersion 21
        }
    
        buildFeatures {
            viewBinding true
            dataBinding true
        }
        
        dependencies {
             implementation 'com.github.digio-tech:gateway:v4.0.14' 
             implementation 'com.github.digio-tech:gateway_esign:v4.0.12'
             implementation 'com.github.digio-tech:protean-esign:v3.2'
             
             implementation 'androidx.appcompat:appcompat:1.6.1'
             implementation 'com.google.android.material:material:1.9.0'
             implementation "androidx.navigation:navigation-fragment-ktx:2.5.3"
             implementation "androidx.navigation:navigation-ui-ktx:2.5.3"
              // Added in version 4.0.6
             implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
              
              Following dependency is also not required if org.jetbrains.kotlin.android plugin version is 1.8.*
              implementation 'androidx.core:core-ktx:1.10.0'
              
              implementation 'com.android.volley:volley:1.2.1'
              implementation 'com.scottyab:rootbeer-lib:0.1.0'
        }
    }
    
  4. ProGuard: 在测试发布版本之前,可能需要处理ProGuard异常。

    -dontwarn org.json.**
    -keep class org.json** { *; }
    

    注意:Kotlin插件应添加到项目级别的build.gradle文件中。

    参考Android指南以了解Android文件夹设置: Android Guide

iOS

如何集成?

  1. Digio SDK支持Xcode 14.0及以上版本,Swift 5.7及以上版本。

    注意:Kotlin插件应添加到项目级别的build.gradle文件中。

  2. 需要在iOS应用的Info.plist文件中添加LSApplicationQueriesSchemes

    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>phonepe</string>
        <string>gpay</string>
        <string>paytmmp</string>
        <string>bhim</string>
        <string>upi</string>
        <string>ppe</string>
    </array>
    

开始使用Digio Esign

var digioConfig = DigioConfig();
digioConfig.theme.primaryColor = "#32a83a";
digioConfig.logo = "https://your_logo_url";
digioConfig.environment = Environment.SANDBOX;

final _esignPlugin = EsignPlugin(digioConfig);
_esignPlugin.setGatewayEventListener((GatewayEvent? gatewayEvent) {
    print("gateway : " + gatewayEvent.toString());
});
esignResult = await _esignPlugin.start("DID221221113330206ZX9AF6RYMF6OLE", "naman.jain@digio.in", "GWT***", null);
print('esignResult : ' + esignResult.toString());

完整示例代码

以下是完整的示例代码,展示了如何在Flutter应用中集成并使用esign_plugin插件。

main.dart

import 'dart:async';

import 'package:esign_plugin/digio_config.dart';
import 'package:esign_plugin/environment.dart';
import 'package:esign_plugin/esign_plugin.dart';
import 'package:esign_plugin/gateway_event.dart';
import 'package:esign_plugin/service_mode.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _response = '';

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化签名功能
  }

  void gatewayFunnelEventCallback(GatewayEvent? map){
    print("gateway funnel event" + map.toString());
  }

  // 平台消息是异步的,因此我们在这里初始化。
  Future<void> initSign() async {
    var esignResult;
    // 平台消息可能会失败,因此我们使用try/catch来处理PlatformException。
    // 我们还处理消息可能返回null的情况。
    try {
      var digioConfig = DigioConfig();
      digioConfig.theme.primaryColor = "#32a83a";
      digioConfig.logo = "https://www.gstatic.com/mobilesdk/160503_mobilesdk/logo/2x/firebase_28dp.png";
      digioConfig.environment = Environment.SANDBOX;
      digioConfig.serviceMode = ServiceMode.OTP;

      final _esignPlugin = EsignPlugin(digioConfig);
      _esignPlugin.setGatewayEventListener(gatewayFunnelEventCallback);
      esignResult = await _esignPlugin.start(
              "DID250117174131348NG49D51QXNV963", "akash.kumar@digio.in", "GWT2501171741317017Z4HNYSTEJ9U5S", null);
      print('esignResult : ' + esignResult.toString());
    } on PlatformException {
      esignResult = 'Failed to get platform version.';
    }

    // 如果在异步平台消息处理过程中,小部件被从树中移除,则丢弃回复,而不是调用setState来更新不存在的外观。
    if (!mounted) return;

    setState(() {
      _response = esignResult.toString();
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () {
                  initSign();
                },
                child: Text('Press Me'),
              ),
              SizedBox(height: 20),
              Text('response : $_response\n'),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


在Flutter中,esign_plugin 是一个用于实现电子签名的插件。它允许用户在一个画布上绘制签名,并将签名保存为图片。以下是使用 esign_plugin 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  esign_plugin: ^版本号

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 esign_plugin

import 'package:esign_plugin/esign_plugin.dart';

3. 创建签名画布

使用 EsignWidget 来创建一个签名画布:

class SignaturePage extends StatefulWidget {
  [@override](/user/override)
  _SignaturePageState createState() => _SignaturePageState();
}

class _SignaturePageState extends State<SignaturePage> {
  GlobalKey<EsignWidgetState> _signKey = GlobalKey();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('电子签名'),
      ),
      body: Column(
        children: [
          Expanded(
            child: EsignWidget(
              key: _signKey,
              strokeWidth: 3.0,
              strokeColor: Colors.black,
              backgroundColor: Colors.white,
            ),
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              ElevatedButton(
                onPressed: () {
                  _signKey.currentState!.clear();
                },
                child: Text('清除'),
              ),
              ElevatedButton(
                onPressed: () async {
                  final imageBytes = await _signKey.currentState!.getSignature();
                  if (imageBytes != null) {
                    // 处理签名图片
                    // 例如:保存到文件、显示在页面上等
                  }
                },
                child: Text('保存'),
              ),
            ],
          ),
        ],
      ),
    );
  }
}

4. 获取签名图片

通过 getSignature() 方法可以获取用户绘制的签名图片。这个方法返回一个 Uint8List,你可以将其保存为图片文件或直接显示在页面上。

final imageBytes = await _signKey.currentState!.getSignature();
if (imageBytes != null) {
  // 处理签名图片
  // 例如:保存到文件、显示在页面上等
}

5. 清除签名

通过 clear() 方法可以清除签名画布上的内容。

_signKey.currentState!.clear();

6. 其他配置

EsignWidget 还支持其他一些配置,例如设置画笔的宽度、颜色等:

EsignWidget(
  key: _signKey,
  strokeWidth: 3.0, // 画笔宽度
  strokeColor: Colors.black, // 画笔颜色
  backgroundColor: Colors.white, // 背景颜色
);

7. 保存签名图片

你可以将获取到的 imageBytes 保存为图片文件,例如使用 image_picker 插件保存到相册:

import 'package:image_picker/image_picker.dart';
import 'dart:io';

void saveSignature(Uint8List imageBytes) async {
  final tempDir = await getTemporaryDirectory();
  final file = File('${tempDir.path}/signature.png');
  await file.writeAsBytes(imageBytes);

  // 保存到相册
  await ImagePicker().saveImage(file.path);
}

8. 完整示例

以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:esign_plugin/esign_plugin.dart';
import 'package:image_picker/image_picker.dart';
import 'dart:io';
import 'package:path_provider/path_provider.dart';

class SignaturePage extends StatefulWidget {
  [@override](/user/override)
  _SignaturePageState createState() => _SignaturePageState();
}

class _SignaturePageState extends State<SignaturePage> {
  GlobalKey<EsignWidgetState> _signKey = GlobalKey();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('电子签名'),
      ),
      body: Column(
        children: [
          Expanded(
            child: EsignWidget(
              key: _signKey,
              strokeWidth: 3.0,
              strokeColor: Colors.black,
              backgroundColor: Colors.white,
            ),
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              ElevatedButton(
                onPressed: () {
                  _signKey.currentState!.clear();
                },
                child: Text('清除'),
              ),
              ElevatedButton(
                onPressed: () async {
                  final imageBytes = await _signKey.currentState!.getSignature();
                  if (imageBytes != null) {
                    saveSignature(imageBytes);
                  }
                },
                child: Text('保存'),
              ),
            ],
          ),
        ],
      ),
    );
  }

  void saveSignature(Uint8List imageBytes) async {
    final tempDir = await getTemporaryDirectory();
    final file = File('${tempDir.path}/signature.png');
    await file.writeAsBytes(imageBytes);

    // 保存到相册
    await ImagePicker().saveImage(file.path);
  }
}
回到顶部