# flutter

# 引入插件

根据对应版本接入即可

dio: ^3.0.9
steel_crypt: ^1.5.3
encrypt: ^4.0.0

# 使用方式

//点选拼图
//import 'package:captcha/captcha/click_word_captcha.dart';
static void loadingClickWord(BuildContext context, {barrierDismissible = true}) {
  showDialog<Null>(
    context: context,
    barrierDismissible: barrierDismissible,
    builder: (BuildContext context) {
      return ClickWordCaptcha(
        onSuccess: (v){//成功回调(回调为加密后内容,依据项目而定)

        },
        onFail: (){

        },
      );
    },
  );
}

//滑动拼图
//import 'package:captcha/captcha/block_puzzle_captcha.dart';
static void loadingBlockPuzzle(BuildContext context, {barrierDismissible = true}) {
  showDialog<Null>(
    context: context,
    barrierDismissible: barrierDismissible,
    builder: (BuildContext context) {
      return BlockPuzzleCaptchaPage(
        onSuccess: (v){ //成功回调(回调为加密后内容,依据项目而定)

        },
        onFail: (){

        },
      );
    },
  );
}

# 事件

参数 说明
onSuccess 可自定义回调内容,根据自己服务定制
onFail 失败回调默认为空,可自定义回调内容,根据自己服务定制

# 请求处理

import 'package:captcha/request/HttpManager.dart';

请求接口地址 配置在 HttpManager类中 ,需要更改地址替换baseUrl即可

# 请求注意

请求验证码接口中会有secretKey参数,当secretKey有值, 进行as加密, 加密key为secretKey,不加密情况下pointJson为json系列化为字符串

{
  "pointJson": cryptedStr,
  "captchaType": "clickWord",
  "token": _clickWordCaptchaModel.token
}
// secretKey 不为空 进行as加密
if(!ObjectUtils.isEmpty(_clickWordCaptchaModel.secretKey)){
  var aesEncrypter = AesCrypt(_clickWordCaptchaModel.secretKey, 'ecb', 'pkcs7');
  cryptedStr = aesEncrypter.encrypt(pointStr);
  var dcrypt = aesEncrypter.decrypt(cryptedStr);
}

# 二次校验传出的参数

//如果不加密  将  token  和 坐标序列化 通过  --- 链接成字符串
var captchaVerification = "$captchaToken---$pointStr";
if(!ObjectUtils.isEmpty(secretKey)){
  //如果加密  将  token  和 坐标序列化 通过  --- 链接成字符串 进行加密  加密密钥为 _clickWordCaptchaModel.secretKey
  captchaVerification = EncryptUtil.aesEncode(key: secretKey, content: captchaVerification);
}
checkSuccess(captchaVerification);