Flutter电子签名插件esign_plugin的使用
Flutter电子签名插件esign_plugin的使用
简介
Digio Esign flutter 插件允许你在Flutter应用中集成电子签名功能。
开始使用
Android
如何集成?
-
在根
build.gradle
文件末尾添加仓库:allprojects { repositories { ... maven { url 'https://jitpack.io' } } }
-
添加依赖项:
implementation 'com.github.digio-tech:gateway:v4.0.14' implementation 'com.github.digio-tech:gateway_esign:v4.0.12'
-
检查你的
app
的build.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' } }
-
ProGuard: 在测试发布版本之前,可能需要处理ProGuard异常。
-dontwarn org.json.** -keep class org.json** { *; }
注意:Kotlin插件应添加到项目级别的
build.gradle
文件中。参考Android指南以了解Android文件夹设置: Android Guide
iOS
如何集成?
-
Digio SDK支持Xcode 14.0及以上版本,Swift 5.7及以上版本。
注意:Kotlin插件应添加到项目级别的
build.gradle
文件中。 -
需要在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
更多关于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);
}
}