class
_SignaturePad extends StatefulWidget {
_SignaturePad({Key? key}) : super(key: key);
@override
_SignaturePadState createState() => _SignaturePadState();
}
class
_SignaturePadState extends State<_SignaturePad> {
final GlobalKey<SfSignaturePadState> signatureGlobalKey = GlobalKey();
@override
void
initState() {
super.initState();
}
void
_clearCanvas() {
signatureGlobalKey.currentState!.clear();
}
void
_saveImage() async {
final data = await signatureGlobalKey.currentState!.toImage(pixelRatio: 3.0);
final bytes = await data.toByteData(format: ui.ImageByteFormat.png);
Directory? directory;
if
(Platform.isAndroid) {
directory = await getExternalStorageDirectory();
}
else
if
(Platform.isIOS) {
directory = await getApplicationDocumentsDirectory();
}
if
(directory != null) {
File file = File(
'${directory.path}/signature.png'
);
await file.writeAsBytes(bytes!.buffer.asUint8List());
await GallerySaver.saveImage(file.path);
await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) => SignatureImage(bytes: bytes!.buffer.asUint8List()),
),
);
}
else
{
print(
'Failed to access external storage directory.'
);
}
}
@override
Widget build(BuildContext context) {
return
Scaffold(
appBar: AppBar(
title:
const
Text(
"Gfg Signature Pad"
),
centerTitle:
true
,
),
body: Column(
children: [
Padding(
padding: EdgeInsets.all(10),
child: Container(
child: SfSignaturePad(
key: signatureGlobalKey,
backgroundColor: Colors.white,
strokeColor: Colors.black,
minimumStrokeWidth: 1.5,
maximumStrokeWidth: 5.0),
decoration:
BoxDecoration(border: Border.all(color: Colors.grey)))),
SizedBox(height: 10),
Row(children: <Widget>[
ElevatedButton(
child: Text(
'Save Image'
),
onPressed: _saveImage,
),
ElevatedButton(
child: Text(
'Clear'
),
onPressed: _clearCanvas,
)
], mainAxisAlignment: MainAxisAlignment.spaceEvenly)
],
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center));
}
}