Flutter验证码插件captcha_flutter的使用

Flutter验证码插件captcha_flutter的使用

图形验证码

原理:通过OverlayEntry添加WebView,加载图形验证码,通过JS进行交互回调。

现有功能

  • 支持Android和iOS两个平台,如果WebView支持多平台,那么此插件也可以支持;
  • 功能与腾讯官方实现相同:支持多语言、是否显示帮助图标、设置背景颜色、验证码框的缩放值、支持深色模式;
  • 是否显示遮罩。

待办事项

  • 实现点击空白区域关闭图形验证码;
  • 替换OverlayEntry以优化加载方式;
  • 实现自定义加载中和背景遮罩效果。

示例代码

以下是完整的使用示例代码:

import 'package:captcha_flutter/captcha_flutter.dart'; // 导入captcha_flutter插件
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp()); // 启动应用
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo', // 应用标题
      theme: ThemeData(
        primarySwatch: Colors.blue, // 主题颜色
      ),
      home: const MyHomePage(title: '腾讯图形验证码demo'), // 主页
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState(); // 初始化状态
}

class _MyHomePageState extends State<MyHomePage> {
  String ticketStr = ""; // 用于存储返回的ticket和randStr
  String captchaID = "从腾讯图形验证码获取的ID"; // 填写从腾讯获取的验证码ID

  void _incrementCounter() {
    // 显示验证码弹窗
    Captcha.showCaptchaWebView(
      context, // 上下文
      (ticket, randStr) { // 成功回调
        setState(() {
          if (ticket.isEmpty) {
            ticketStr = "用户手动关闭"; // 如果ticket为空,表示用户关闭了弹窗
          } else {
            ticketStr = "ticket:$ticket,randStr:$randStr"; // 存储ticket和randStr
          }
        });
      },
      error: (errorStr) { // 错误回调
        setState(() {
          ticketStr = "出现失败"; // 处理错误
        });
      },
    );
  }

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化验证码,传入captchaID并禁用深色模式
    Captcha.initCaptcha(captchaID, enableDarkMode: "false");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title), // 设置标题
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              '显示获取成功的ticket和randStr', // 提示信息
            ),
            Text(
              ticketStr, // 显示返回的结果
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter, // 点击按钮触发验证码
        child: const Text("验证码"), // 按钮文本
      ),
    );
  }
}

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

1 回复

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


captcha_flutter 是一个用于 Flutter 应用的验证码插件。它可以帮助你轻松地在应用中集成验证码功能。以下是如何使用 captcha_flutter 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  captcha_flutter: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入包

在你的 Dart 文件中导入 captcha_flutter 包:

import 'package:captcha_flutter/captcha_flutter.dart';

3. 使用 CaptchaWidget

CaptchaWidgetcaptcha_flutter 提供的主要组件。你可以将它添加到你的 UI 中。

class CaptchaPage extends StatefulWidget {
  @override
  _CaptchaPageState createState() => _CaptchaPageState();
}

class _CaptchaPageState extends State<CaptchaPage> {
  String _captchaText = '';

  void _onCaptchaVerified(bool isVerified) {
    setState(() {
      _captchaText = isVerified ? '验证成功' : '验证失败';
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Captcha Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            CaptchaWidget(
              onVerified: _onCaptchaVerified,
            ),
            SizedBox(height: 20),
            Text(_captchaText),
          ],
        ),
      ),
    );
  }
}

4. 自定义 CaptchaWidget

你可以通过传递不同的参数来自定义 CaptchaWidget 的外观和行为。例如:

CaptchaWidget(
  onVerified: _onCaptchaVerified,
  captchaLength: 6, // 验证码长度
  captchaCase: CaptchaCase.mixed, // 验证码大小写(uppercase, lowercase, mixed)
  captchaType: CaptchaType.alphanumeric, // 验证码类型(numeric, alphabetic, alphanumeric)
  backgroundColor: Colors.white,
  textColor: Colors.black,
  errorText: '验证码错误,请重试',
  successText: '验证成功',
)

5. 处理验证结果

CaptchaWidget 提供了一个 onVerified 回调函数,当用户完成验证码输入时会调用这个函数。你可以在回调函数中处理验证结果。

void _onCaptchaVerified(bool isVerified) {
  setState(() {
    _captchaText = isVerified ? '验证成功' : '验证失败';
  });
}
回到顶部