Flutter一次性密码(OTP)倒计时插件otp_timer的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter一次性密码(OTP)倒计时插件otp_timer的使用

1ot_timer 插件简介

otp_timer 是一个用于创建基于定时器的功能的插件,例如 OTP。它支持通过 ID 来管理多个定时器。

安装插件

要使用此插件,请在 pubspec.yaml 文件中添加 otp_timer 作为依赖项。

dependencies:
  otp_timer: ^x.x.x

使用示例

下面是一个完整的示例代码,展示了如何使用 otp_timer 插件实现 OTP 倒计时功能。

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

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

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

  // This widget is the root of your application.
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: OtpTimerWrapper(
        child: MyHomePage(title: 'Flutter Demo Home Page'),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool isLoading = false;
  String? id;
  bool _isStarted = false;

  void _startTimer() async {
    OtpUtils.timerDuration = const Duration(seconds: 90);
    setState(() {
      isLoading = true;
    });
    await Future.delayed(const Duration(milliseconds: 2000));
    if (!mounted) return;
    setState(() {
      isLoading = false;
      id = 'ABC';
      _isStarted = !_isStarted;
    });
    if (_isStarted) {
      context.startTimer(id!);
    } else {
      context.stopTimer(id!);
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextButton(
              onPressed: isLoading ? null : _startTimer,
              child: isLoading
                  ? const Padding(
                      padding: EdgeInsets.all(4),
                      child: CircularProgressIndicator.adaptive(),
                    )
                  : Text(_isStarted ? 'Stop timer' : 'Start timer'),
            ),
            SizedBox(height: 32),
            OtpTimer(
              id: id,
              builder: (remainTime) =&gt; Text(remainTime.toMinuteAndSecond),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter一次性密码(OTP)倒计时插件otp_timer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter一次性密码(OTP)倒计时插件otp_timer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用otp_timer插件来实现一次性密码(OTP)倒计时的示例代码。

首先,确保你已经在pubspec.yaml文件中添加了otp_timer依赖:

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

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

接下来,你可以在你的Flutter项目中按照以下步骤使用otp_timer插件:

1. 导入插件

在你的Dart文件中导入otp_timer插件:

import 'package:otp_timer/otp_timer.dart';

2. 创建OTP倒计时组件

你可以创建一个自定义的OTP倒计时组件,例如:

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

class OTPTimerWidget extends StatefulWidget {
  @override
  _OTPTimerWidgetState createState() => _OTPTimerWidgetState();
}

class _OTPTimerWidgetState extends State<OTPTimerWidget> {
  OtpTimerController? _controller;

  @override
  void initState() {
    super.initState();
    // 初始化OtpTimerController,设置倒计时秒数(例如60秒)
    _controller = OtpTimerController(
      duration: 60, // 倒计时秒数
      onTick: (remainingTime) {
        // 每秒调用一次,可以更新UI
        setState(() {});
      },
      onFinish: () {
        // 倒计时结束时调用
        setState(() {});
      },
    );
    // 开始倒计时
    _controller!.start();
  }

  @override
  void dispose() {
    // 释放资源
    _controller?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    String? timeText;
    if (_controller != null && _controller!.isActive) {
      int secondsRemaining = _controller!.remainingTime;
      int minutes = secondsRemaining ~/ 60;
      int seconds = secondsRemaining % 60;
      timeText = '$minutes:$seconds.0';
    } else {
      timeText = 'Resend OTP';
    }

    return Center(
      child: ElevatedButton(
        onPressed: _controller!.isActive ? null : () {
          // 重置倒计时
          _controller!.reset();
          _controller!.start();
        },
        child: Text(timeText ?? ''),
      ),
    );
  }
}

3. 在你的应用中使用OTP倒计时组件

现在你可以在你的应用中使用这个OTP倒计时组件,例如在MyApp的主页面中:

import 'package:flutter/material.dart';
import 'otp_timer_widget.dart'; // 假设你将上面的代码保存在otp_timer_widget.dart文件中

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'OTP Timer Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('OTP Timer Demo'),
        ),
        body: Center(
          child: OTPTimerWidget(),
        ),
      ),
    );
  }
}

总结

以上代码展示了如何在Flutter项目中使用otp_timer插件来实现OTP倒计时功能。你可以根据实际需求进一步定制UI和逻辑,例如处理OTP发送请求、错误处理等。希望这对你有所帮助!

回到顶部