Flutter 我想将签名发送到我的sql数据库
谁能帮助我如何在我的phpmyadmin中插入签名?我想在我的phpmyadmin中保存签名 //为我们的Flitter应用程序导入Flutter 我想将签名发送到我的sql数据库,flutter,Flutter,谁能帮助我如何在我的phpmyadmin中插入签名?我想在我的phpmyadmin中保存签名 //为我们的Flitter应用程序导入 import 'dart:convert'; import 'dart:math'; import 'dart:typed_data'; import 'dart:ui' as ui; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'p
import 'dart:convert';
import 'dart:math';
import 'dart:typed_data';
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_signature_pad/flutter_signature_pad.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await SystemChrome.setPreferredOrientations(
[DeviceOrientation.landscapeRight]);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
//this are the strings declaration
class _WatermarkPaint extends CustomPainter {
final String price;
final String watermark;
_WatermarkPaint(this.price, this.watermark);
@override
void paint(ui.Canvas canvas, ui.Size size) {
canvas.drawCircle(Offset(size.width / 2, size.height / 2), 5.8,
Paint()..color = Colors.green);
}
@override
bool shouldRepaint(_WatermarkPaint oldDelegate) {
return oldDelegate != this;
}
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is _WatermarkPaint &&
runtimeType == other.runtimeType &&
price == other.price &&
watermark == other.watermark;
@override
int get hashCode => price.hashCode ^ watermark.hashCode;
}
class _MyHomePageState extends State<MyHomePage> {
ByteData _img = ByteData(0);
var color = Colors.red;
var strokeWidth = 3.0;
final _sign = GlobalKey<SignatureState>();
@override
//this line of code is for the signature pad
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: <Widget>[
Expanded(
child: Container(
child: Padding(
padding: const EdgeInsets.all(5.0),
child: Signature(
color: Colors.black,
key: _sign,
onSign: () {
final sign = _sign.currentState;
debugPrint('${sign.points.length} points in the signature');
},
backgroundPainter: _WatermarkPaint("2.0", "2.0"),
strokeWidth: strokeWidth,
),
),
color: Colors.black12,
),
),
_img.buffer.lengthInBytes == 0
? Container()
: LimitedBox(
maxHeight: 200.0,
child: Image.memory(_img.buffer.asUint8List())),
导入'dart:convert';
导入“dart:math”;
导入“dart:键入的_数据”;
将“dart:ui”导入为ui;
进口“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
进口“包装:颤振\签名\垫/颤振\签名\垫.省道”;
void main()异步{
WidgetsFlutterBinding.ensureInitialized();
等待系统chrome.setPreferredOrientations(
[DeviceOrientation.landscapeRight]);
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key}):超级(Key:Key);
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
//这是字符串声明
class\u WatermarkPaint扩展了CustomPainter{
最终字符串价格;
最终字符串水印;
_WatermarkPaint(this.price,this.watermark);
@凌驾
虚空绘制(ui.Canvas画布,ui.Size){
画布.画圈(偏移量(尺寸.宽度/2,尺寸.高度/2),5.8,
油漆()…颜色=颜色。绿色);
}
@凌驾
布尔应该重新绘制(\u水印绘制旧委托){
返回oldDelegate!=此;
}
@凌驾
布尔运算符==(对象其他)=>
相同的(这个,其他)||
另一种是水纹漆&&
runtimeType==other.runtimeType&&
价格=其他价格&&
水印==其他.水印;
@凌驾
int get hashCode=>price.hashCode^watermark.hashCode;
}
类_MyHomePageState扩展状态{
ByteData _img=ByteData(0);
var color=Colors.red;
var strokeWidth=3.0;
最后一个符号=GlobalKey();
@凌驾
//这行代码用于签名板
小部件构建(构建上下文){
返回脚手架(
正文:专栏(
儿童:[
扩大(
子:容器(
孩子:填充(
填充:常数边集全部(5.0),
孩子:签名(
颜色:颜色,黑色,
键:_符号,
签名:(){
最终符号=_sign.currentState;
debugPrint(“${sign.points.length}签名中的点”);
},
背景画家:_WatermarkPaint(“2.0”、“2.0”),
strokeWidth:strokeWidth,
),
),
颜色:颜色。黑色,
),
),
_img.buffer.lengthInBytes==0
?容器()
:LimitedBox(
最大高度:200.0,
子项:Image.memory(_img.buffer.asUint8List()),
//此代码由保存和清除按钮组成
纵队(
儿童:[
划船(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
材料按钮(
颜色:颜色。绿色,
onPressed:()异步{
最终符号=_sign.currentState;
最终图像=等待符号.getData();
var data=wait image.toByteData(
格式:ui.ImageByteFormat.png);
sign.clear();
最终编码=
base64.encode(data.buffer.asUint8List());
设置状态(){
_img=数据;
});
调试打印(“按下”+编码);
},
子项:文本(“保存”),
大小盒子(
宽度:100,
),
材料按钮(
颜色:颜色。灰色,
已按下:(){
最终符号=_sign.currentState;
sign.clear();
设置状态(){
_img=字节数据(0);
});
调试打印(“已清除”);
},
子项:文本(“清除”),
],
),
],
)
],
),
);
}
}