Flutter验证码插件captcha_plugin_flutter的使用

Flutter验证码插件captcha_plugin_flutter的使用

全新人机验证方式,高效拦截机器行为,业务安全第一道防线。搭载风险感知引擎,智能切换验证难度,安全性高,极致用户体验。读屏软件深度适配,视障群体也可轻松使用,符合工信部无障碍适配要求。

平台支持(兼容性)

Android iOS
适用版本区间:4.4以上 适用版本区间:9以上

环境准备

CocoaPods安装教程

资源引入/集成

pubspec.yaml 中添加:

dependencies:
    captcha_plugin_flutter: ^1.1.5

调用示例

import 'package:flutter/material.dart';
import 'package:captcha_plugin_flutter/captcha_plugin_flutter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final CaptchaPluginFlutter captchaPlugin = new CaptchaPluginFlutter();

  @override
  void initState() {
    super.initState();
  }

  /**
   * 初始化验证码
   */
  void init() {
    CaptchaPluginConfig styleConfig = CaptchaPluginConfig(
        radius: 10,
        capBarTextColor: "#25D4D0",
        capBarTextSize: 18,
        capBarTextWeight: "bold",
        borderColor: "#25D4D0",
        borderRadius: 10,
        backgroundMoving: "#DC143C",
        executeBorderRadius: 10,
        executeBackground: "#DC143C",
        capBarTextAlign: "center",
        capPaddingTop: 10,
        capPaddingRight: 10,
        capPaddingBottom: 10,
        capPaddingLeft: 10,
        paddingTop: 15,
        paddingBottom: 15
    );

    captchaPlugin.init({
      "captcha_id": "易盾业务id",
      "is_debug": true,
      "dimAmount": 0.8,
      "is_touch_outside_disappear": true,
      "timeout": 8000,
      "is_hide_close_button": false,
      "use_default_fallback": true,
      "failed_max_retry_count": 4,
      "language_type": "ja",
      "is_close_button_bottom": true,
      "styleConfig": styleConfig.toJson(),
    });
  }

  /**
   * 弹出验证码
   */
  void showCaptcha() {
    captchaPlugin.showCaptcha(
        onLoaded: () {
          print("================onLoaded==============");
        },
        onSuccess: (dynamic data) {
          print(data);
        },
        onClose: (dynamic data) {
          print(data);
        },
        onError: (dynamic data) {
          print(data);
        }
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
            child: new Column(
              children: [
                TextButton(
                    onPressed: () => {
                      init()
                    },
                    child: Text("初始化")),
                TextButton(
                    onPressed: () => {
                      showCaptcha()
                    },
                    child: Text("显示验证码")),
              ],
            )),
      ),
    );
  }
}

SDK 方法说明

1. 初始化

代码说明:

CaptchaPluginFlutter captchaPlugin = new CaptchaPluginFlutter();
captchaPlugin.init(options)

options 支持的可配置项说明

key value 类型 是否必填 默认值 描述
captcha_id String 易盾获取到的业务 id
is_debug bool false 是否启动 debug 模式
dimAmount double 0.5 验证码框遮罩层透明度
is_touch_outside_disappear bool true 点击弹窗外部是否可以关闭验证码
timeout int 10000 超时时间/ms
is_hide_close_button bool false 是否隐藏关闭按钮
use_default_fallback bool true 是否采用默认降级
failed_max_retry_count int 3 失败后尝试最大次数
language_type String zh-CN 多语言语言类型
loading_text String 智能检测中 自定义加载文案
control_bar_start_url String 自定义滑块开始背景
control_bar_moving_url String 自定义滑块滑动背景
control_bar_error_url String 自定义滑块错误背景
theme String light 主题/dark、light两种
is_show_loading bool true 是否显示loading
is_close_button_bottom bool false 关闭按钮是否在下方,此属性只对安卓生效
refreshInterval int 300 滑动拼图、智能无感知、短信、语音验证失败后,停留时间。如果需要延长错误提示时间(为了让用户感知到)可自定义配置,单位为 ms
is_mourning_day bool false 是否黑白模式
size String 适老化字体图标大小,支持 small、medium、large、x-large
isIpv6 bool false 网络是否ipv6
is_show_inner_close bool false 是否显示验证码内部关闭按钮
can_upload bool true 是否支持数据上报
styleConfig class false 验证码UI自定义配置

language_type 多语言对应表

多语言值 说明
zh-CN 中文
zh-TW 台湾繁体
zh-HK 香港繁体
en-GB 英式英文
en-US 美式英文
ja 日语
ko 韩文
th 泰语
vi 越南语
fr 法语
ru 俄语
ar 阿拉伯语
de 德语
it 意大利语
he 希伯来语
hi 印地语
id 印尼语
my 缅甸语
lo 老挝语
ms 马来语
pl 波兰语
pt 葡萄牙语
es 西班牙语
tr 土耳其语
nl 荷兰语
es-la 拉美西语
pt-br 巴西葡语
sv 瑞典语
no 挪威语
da 丹麦语
cs 捷克语
hu 匈牙利语
sk 斯洛伐克语
ro 罗马尼亚语
el 希腊语
sr 塞尔维亚语
bs 波斯尼亚语
mk 马其顿语
bg 保加利亚语
fi 芬兰语
et 爱沙尼亚语
lv 拉脱维亚语
lt 立陶宛语
sl 斯洛文尼亚语
hr 克罗地亚语
uk 乌克兰语
vi 越南语
fa 波斯语
ca 加泰罗尼亚语
gl 加利西亚语
eu 巴斯克语
ka 格鲁吉亚语
az 阿塞拜疆语
uz 乌兹别克语
km 高棉语
si 僧伽罗语
ur 乌尔都语
bo 藏语
be 白俄罗斯语
kk 哈萨克语(西里尔文)
bn 孟加拉语
fil 菲律宾语
jv 爪哇语
ne 尼泊尔语
sw 斯瓦西里语
mi 毛利语
am 阿姆哈拉语
te 泰卢固语
mr 马拉地语
ta 泰米尔语
gu 古吉拉特语
kn 卡纳达语
ml 马莱亚拉姆语
or 欧里亚语
pa 旁遮普语
as 阿萨姆语
mai 迈蒂利语
mn 蒙古语(西里尔文)
ug 维吾尔语

styleConfig 验证码UI自定义配置对应表

UI配置项 类型 描述
radius int 验证码圆角
capBarTextAlign String 弹框头部标题文字对齐方式,可选值为 left center right
capBarBorderColor String 弹框头部下边框颜色,想要去掉的话可取 transparent 或者与背景色同色 #fff
capBarTextColor String 弹框头部标题文字颜色
capBarTextSize int 弹框头部标题文字字体大小
capBarTextWeight String 弹框头部标题文字字体体重,可设置粗细,参考:capBarTextWeight: normal、bold、lighter、bolder、100、200、300、400、500、600、700、800、900更多详情参考:https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight
capBarTitleHeight int 弹框头部标题所在容器高度
capBodyPadding int 验证码弹框 body 部分的内边距,相当于总体设置 capPaddingTop,capPaddingRight,capPaddingBottom,capPaddingLeft
capPaddingTop int 验证码弹框 body 部分的【上】内边距,覆盖 capPadding 对于上内边距的设置,单位px
capPaddingRight int 验证码弹框 body 部分的【右】内边距,覆盖 capPadding 对于右内边距的设置,单位px
capPaddingBottom int 验证码弹框 body 部分的【底】内边距,覆盖 capPadding 对于底内边距的设置,单位px
capPaddingLeft int 验证码弹框 body 部分的【左】内边距,覆盖 capPadding 对于左内边距的设置,单位px
paddingTop int 弹框【上】内边距,实践时候可与 capPaddingTop 配合,单位px
paddingBottom int 弹框【下】内边距,实践时候可与 capPaddingBottom 配合,单位px
capBorderRadius int 验证码弹框body圆角
borderColor String 滑块的边框颜色
background String 滑块的背景颜色
borderColorMoving String 滑块的滑动时边框颜色,滑动类型验证码下有效
backgroundMoving String 滑块的滑动时背景颜色,滑动类型验证码下有效
borderColorSuccess String 滑块的成功时边框颜色,此颜色同步了文字成功时文字颜色、滑块背景颜色
backgroundSuccess String 滑块的成功时背景颜色
backgroundError String 滑块的失败时背景颜色
borderColorError String 失败时边框颜色
slideBackground String 滑块的滑块背景颜色
textSize int 滑块的内容文本大小
textColor String 滑块内容文本颜色(滑块滑动前的颜色,失败、成功前的颜色)
height int 滑块的高度
borderRadius int 滑滑块的圆角
gap String 滑块与验证码视图之间的距离,单位px
executeBorderRadius int 组件圆角大小
executeBackground String 组件背景色
executeTop String 组件外层容器距离组件顶部距离,单位px
executeRight String 组件外层容器距离组件右侧距离,单位px

2. 显示验证码

代码说明:

captchaPlugin.showCaptcha(
    onLoaded: () {
       
    },
    onSuccess: (dynamic data) {
       
    },
    onClose: (dynamic data) {
        
    },
    onError: (dynamic data) {
        
    }
);

回调说明:

回调数据为 Map 类型

类型 描述
onLoaded 验证码弹窗准备完成
onSuccess回调 message: 结果描述信息
validate: 检验码,用于验证码二次校验
result: 验证结果 BOOL:YES/NO
onClose回调 message: manual 手动关闭
message: auto 自动关闭
message: tip loading 弹窗关闭
onError回调 message: 错误信息
code: 错误码

3. 销毁验证码弹窗

代码说明:

captchaPlugin.destroy()

更多关于Flutter验证码插件captcha_plugin_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter验证码插件captcha_plugin_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用captcha_plugin_flutter插件的一个详细代码案例。这个插件通常用于在Flutter应用中集成验证码功能,以增强安全性。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加captcha_plugin_flutter的依赖:

dependencies:
  flutter:
    sdk: flutter
  captcha_plugin_flutter: ^最新版本号  # 请替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

2. 导入插件

在你的Dart文件中(比如main.dart),导入插件:

import 'package:flutter/material.dart';
import 'package:captcha_plugin_flutter/captcha_plugin_flutter.dart';

3. 使用验证码插件

下面是一个简单的示例,展示了如何在Flutter应用中集成和使用验证码插件。

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Captcha Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CaptchaScreen(),
    );
  }
}

class CaptchaScreen extends StatefulWidget {
  @override
  _CaptchaScreenState createState() => _CaptchaScreenState();
}

class _CaptchaScreenState extends State<CaptchaScreen> {
  String? captchaResult;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Captcha Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            SizedBox(height: 20),
            Text('Scan the QR code or enter the captcha below:'),
            SizedBox(height: 20),
            // 显示验证码图片
            CaptchaImage(
              onCaptchaResult: (result) {
                setState(() {
                  captchaResult = result;
                });
              },
              onError: (error) {
                print('Captcha error: $error');
              },
            ),
            SizedBox(height: 20),
            if (captchaResult != null)
              Text('Captcha Result: $captchaResult'),
            else
              TextField(
                decoration: InputDecoration(
                  labelText: 'Enter Captcha',
                ),
                keyboardType: TextInputType.text,
                onChanged: (value) {
                  // 可以在这里添加验证码验证逻辑
                },
              ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // 提交验证码按钮的点击事件处理
                if (captchaResult != null) {
                  // 验证captchaResult
                  print('Captcha verified: $captchaResult');
                } else {
                  // 提示用户输入验证码
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('Please enter the captcha')),
                  );
                }
              },
              child: Text('Verify Captcha'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 验证码图片显示和处理

CaptchaImage组件是captcha_plugin_flutter插件提供的一个用于显示验证码图片的Widget。你需要实现onCaptchaResultonError回调来处理验证码结果和错误。

注意事项

  1. 权限:确保你的应用具有必要的权限(如相机权限),以扫描QR码获取验证码。
  2. 错误处理:在实际应用中,你可能需要更复杂的错误处理逻辑。
  3. 安全性:不要将验证码直接暴露在客户端代码中,确保验证码的生成和验证逻辑在服务器端完成。

这个示例提供了一个基本的框架,你可以根据具体需求进行扩展和修改。希望这个代码案例能帮助你顺利地在Flutter项目中集成和使用captcha_plugin_flutter插件。

回到顶部