Flutter验证码插件aj_captcha_flutter的使用

Flutter验证码插件aj_captcha_flutter的使用

aj_captcha_flutter 是一个用于实现滑动验证码与文字点击验证码的Flutter组件。后端采用的是Anji+验证码

使用步骤

1. 初始化插件

在项目启动时设置接口地址:

// 项目启动时设置接口地址
AJCaptchaInit.init("http://127.0.0.1:80/");

2. 调用实例

调用滑动验证组件:

void loadingBlockPuzzle(BuildContext buildContext,
    {barrierDismissible = true}) {
  showDialog<void>(
    context: buildContext,
    barrierDismissible: barrierDismissible,
    builder: (BuildContext buildContext) {
      return BlockPuzzleCaptchaPage(
        onSuccess: (v) {
          // 成功回调(回调为加密后内容,依据项目而定)
          debugPrint(v.toString());
        },
        onFail: () {},
      );
    },
  );
}

类说明

  • BlockPuzzleCaptchaPage:滑动验证组件。
  • ClickWordCaptcha:文字点击验证组件。

完整示例代码

以下是完整的示例代码,展示了如何在Flutter应用中使用aj_captcha_flutter插件。

import 'dart:async';

import 'package:aj_captcha_flutter/aj_captcha_flutter.dart';
import 'package:aj_captcha_flutter/captcha/aj_captcha_init.dart';
import 'package:aj_captcha_flutter/captcha/view/block_puzzle_captcha.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  // 设置接口地址
  AJCaptchaInit.init("http://127.0.0.1:80/");
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final _ajCaptchaFlutterPlugin = AjCaptchaFlutter();

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 平台消息异步处理,初始化平台状态
  Future<void> initPlatformState() async {
    String platformVersion;
    // 处理可能发生的PlatformException异常
    try {
      platformVersion = await _ajCaptchaFlutterPlugin.getPlatformVersion() ?? 'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    // 如果widget被移除,不再更新UI
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  // 调用滑动验证组件
  void loadingBlockPuzzle(BuildContext buildContext,
      {barrierDismissible = true}) {
    showDialog<void>(
      context: buildContext,
      barrierDismissible: barrierDismissible,
      builder: (BuildContext buildContext) {
        return BlockPuzzleCaptchaPage(
          onSuccess: (v) {
            // 成功回调(回调为加密后内容,依据项目而定)
            debugPrint(v.toString());
          },
          onFail: () {},
        );
      },
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('验证码插件示例'),
        ),
        body: Builder(
          builder: (context) {
            return Center(
              child: Column(
                children: [
                  Text('运行环境: $_platformVersion\n'),
                  TextButton(
                    onPressed: () {
                      loadingBlockPuzzle(context);
                    },
                    child: Text("点击开始验证"),
                  )
                ],
              ),
            );
          },
        ),
      ),
    );
  }
}

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

1 回复

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


aj_captcha_flutter 是一个用于集成验证码功能的 Flutter 插件,通常用于防止恶意操作,如机器人注册、登录等。它支持多种验证码类型,如滑块验证码、点选验证码等。

以下是如何在 Flutter 项目中使用 aj_captcha_flutter 插件的详细步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 aj_captcha_flutter 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  aj_captcha_flutter: ^版本号

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

2. 初始化插件

在需要使用验证码的地方,导入插件并进行初始化:

import 'package:aj_captcha_flutter/aj_captcha_flutter.dart';

3. 配置验证码

通常,你需要从服务器获取验证码的配置信息,如 captchaIdapiUrl。然后可以使用 AjCaptchaFlutter 类来启动验证码。

void showCaptcha() async {
  try {
    final result = await AjCaptchaFlutter.showCaptcha(
      captchaId: 'your_captcha_id', // 从服务器获取的captchaId
      apiUrl: 'https://your-api-url.com', // 从服务器获取的apiUrl
      language: 'zh', // 语言设置,支持 'zh' 和 'en'
      onSuccess: (result) {
        // 验证成功后的回调
        print('验证成功: $result');
      },
      onError: (error) {
        // 验证失败后的回调
        print('验证失败: $error');
      },
    );
    print('验证结果: $result');
  } catch (e) {
    print('验证码异常: $e');
  }
}

4. 触发验证码

你可以在用户点击某个按钮时触发验证码的显示:

ElevatedButton(
  onPressed: showCaptcha,
  child: Text('显示验证码'),
)

5. 处理验证结果

onSuccess 回调中,你可以获取到验证成功后的结果,通常是一个 token,你可以将这个 token 发送到服务器进行二次验证。

onSuccess: (result) {
  // 发送token到服务器进行二次验证
  sendTokenToServer(result);
}

6. 服务器端验证

在服务器端,你需要使用 tokencaptchaId 来调用验证码服务提供商的 API 进行二次验证,以确保验证码的有效性。

7. 处理异常

onError 回调中,你可以处理验证失败或用户取消验证的情况。

onError: (error) {
  if (error == 'user_cancel') {
    print('用户取消了验证');
  } else {
    print('验证失败: $error');
  }
}

8. 自定义样式

aj_captcha_flutter 插件通常允许你自定义验证码的样式,如颜色、字体等。你可以根据需要进行配置。

9. 其他注意事项

  • 确保你的服务器配置正确,能够正确处理验证码的请求和响应。
  • 在生产环境中,建议使用 HTTPS 来保证通信安全。

示例代码

以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('验证码示例'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: showCaptcha,
            child: Text('显示验证码'),
          ),
        ),
      ),
    );
  }

  void showCaptcha() async {
    try {
      final result = await AjCaptchaFlutter.showCaptcha(
        captchaId: 'your_captcha_id',
        apiUrl: 'https://your-api-url.com',
        language: 'zh',
        onSuccess: (result) {
          print('验证成功: $result');
          // 发送token到服务器进行二次验证
          sendTokenToServer(result);
        },
        onError: (error) {
          if (error == 'user_cancel') {
            print('用户取消了验证');
          } else {
            print('验证失败: $error');
          }
        },
      );
      print('验证结果: $result');
    } catch (e) {
      print('验证码异常: $e');
    }
  }

  void sendTokenToServer(String token) {
    // 发送token到服务器的逻辑
    print('发送token到服务器: $token');
  }
}
回到顶部