Flutter手写签名插件signature的使用
Flutter手写签名插件signature的使用
简介
signature
是一个Flutter插件,它提供了性能优化的手写签名画布,并允许设置自定义样式、边界和初始状态。这是一个原生的Flutter实现,因此支持所有平台。
为什么选择这个插件?
在创建此插件时,没有其他解决方案能够同时满足以下需求:
- 在各种设备上提供所需的性能
- 设置画布边界的能力
- 使用之前保存的状态进行初始化的能力
升级到5.0.0+
- 此版本不再将
Signature
包装在Expanded
小部件中(如果您不指定尺寸) - 这样可以解决
Incorrect use of ParentDataWidget
错误,更多详情请参阅 issue #49 - 如果您传递了尺寸给小部件,则无需更改任何内容。
- 如果您在
Row
、Column
或Flex
小部件内使用小部件且未指定尺寸,则需要自己将Signature
包装在Expanded
中。 - 如果您未在上述提到的小部件中使用小部件且未指定尺寸,则无需更改任何内容,错误应从日志中消失。
使用方法
要使用此插件,请在您的 pubspec.yaml
文件中添加 signature
作为依赖项。
示例代码
下面是一个完整的示例demo,展示了如何使用 signature
插件来创建一个手写签名功能。
import 'package:flutter/material.dart';
import 'package:signature/signature.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Signature Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
darkTheme: ThemeData.dark().copyWith(
primaryColor: Colors.blue,
),
home: const Home(),
);
}
}
class Home extends StatefulWidget {
const Home({super.key});
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
final SignatureController _controller = SignatureController(
penStrokeWidth: 5,
penColor: Colors.red,
exportBackgroundColor: Colors.blue,
);
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Signature Demo'),
),
body: Column(
children: <Widget>[
Expanded(
child: Signature(
controller: _controller,
width: 300,
height: 300,
backgroundColor: Colors.lightBlueAccent,
),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
ElevatedButton(
onPressed: () {
_controller.clear();
},
child: const Text('Clear'),
),
ElevatedButton(
onPressed: () async {
if (_controller.isNotEmpty) {
final data = await _controller.toPngBytes();
if (data != null) {
// Do something with the image bytes, e.g., save or send
print('Signature exported as PNG');
}
} else {
print('No signature provided.');
}
},
child: const Text('Export'),
),
],
),
],
),
);
}
}
主要功能说明
- 导入包:
import 'package:signature/signature.dart';
- 初始化控制器:
final SignatureController _controller = SignatureController(...);
- 创建签名画布:
Signature(controller: _controller, ...);
- 清除画布:
_controller.clear();
- 导出PNG图像:
await _controller.toPngBytes();
- 检查是否有签名:
_controller.isNotEmpty;
- 导出点数据:
var exportedPoints = _controller.points;
- 销毁控制器:
@override void dispose() { _controller.dispose(); super.dispose(); }
通过以上步骤,您可以轻松地在Flutter应用中集成手写签名功能。希望这个示例能帮助您快速上手并实现所需的功能。
贡献和支持
- 欢迎贡献!如果您想贡献代码,请创建一个PR。
- 如果您发现bug或有新功能的需求,请提交issue。
更多详情请参考 GitHub项目主页。
更多关于Flutter手写签名插件signature的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter手写签名插件signature的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,signature
插件常用于实现手写签名功能。下面是一个使用 flutter_signature_pad
插件的示例代码,它是一个非常流行的用于实现手写签名的Flutter插件。
首先,你需要在 pubspec.yaml
文件中添加依赖:
dependencies:
flutter:
sdk: flutter
flutter_signature_pad: ^3.0.0 # 请检查最新版本号
然后运行 flutter pub get
来获取依赖。
接下来,在你的 Flutter 项目中,你可以按照以下步骤实现手写签名功能:
- 创建一个签名页面:
import 'package:flutter/material.dart';
import 'package:flutter_signature_pad/flutter_signature_pad.dart';
import 'dart:typed_data';
import 'dart:ui' as ui;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SignaturePage(),
);
}
}
class SignaturePage extends StatefulWidget {
@override
_SignaturePageState createState() => _SignaturePageState();
}
class _SignaturePageState extends State<SignaturePage> {
final GlobalKey<SignatureControllerState> _controller =
GlobalKey<SignatureControllerState>();
Uint8List? _signature;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Signature Pad'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Expanded(
child: SignaturePad(
controller: _controller,
backgroundColor: Colors.white,
penColor: Colors.black,
strokeWidth: 5.0,
),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _clear,
child: Text('Clear'),
),
SizedBox(height: 10),
ElevatedButton(
onPressed: _save,
child: Text('Save'),
),
if (_signature != null)
SizedBox(
height: 20,
child: Image.memory(_signature!),
),
],
),
),
);
}
void _clear() {
_controller.currentState?.clear();
}
void _save() {
_controller.currentState?.save().then((data) {
setState(() {
_signature = data;
});
});
}
}
- 解释代码:
- 依赖引入:在
pubspec.yaml
中添加flutter_signature_pad
依赖。 - 主应用:
MyApp
是主应用类,它定义了应用的主页SignaturePage
。 - 签名页面:
SignaturePage
是一个有状态组件,它包含一个SignaturePad
小部件用于绘制签名。 - 控制器:使用
GlobalKey<SignatureControllerState>
来控制SignaturePad
。 - 保存签名:点击“Save”按钮时,调用
_save
方法,该方法会调用save()
方法来获取签名的Uint8List
数据。 - 清除签名:点击“Clear”按钮时,调用
_clear
方法来清除签名。 - 显示签名:如果
_signature
不为空,则使用Image.memory
显示保存的签名。
这个示例展示了如何在 Flutter 应用中实现一个简单的手写签名功能,包括绘制、清除和保存签名。你可以根据需要进一步自定义和扩展这个功能。