Flutter倒计时按钮功能插件duration_button的使用

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

Flutter Duration Button

Duration Button 是一个类似于 Netflix 的“跳过介绍”按钮的自动点击按钮。它提供了四种类型的按钮:

  • DurationButton:普通的持续时间按钮
  • IconDurationButton:基于图标的持续时间按钮
  • TextDurationButton:基于文本的持续时间按钮
  • OutlinedDurationButton:带边框的持续时间按钮

开始使用

依赖安装

可以通过以下命令添加 duration_button 到你的项目中:

$ flutter pub add duration_button

或者在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  duration_button: ^1.0.0

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

导入包

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

import 'package:duration_button/duration_button.dart';

使用组件

你可以使用以下几种类型的按钮:

DurationButton(/* Props here.. */)
IconDurationButton(/* Props here.. */)
OutlinedDurationButton(/* Props here.. */)
TextDurationButton(/* Props here.. */)

属性

属性 类型 默认值 描述
duration Duration required 按钮的持续时间值。
width double? null 按钮的宽度值。
height double? null 按钮的高度值。
child Widget? null 按钮的子组件。
coverChild bool? false 是否覆盖子组件。
borderRadius BorderRadius null 按钮的圆角值。
onPressed VoidCallback required 按钮被点击时调用的回调函数。如果 onCompletenull,则在完成时调用 onPressed
onComplete VoidCallback? null 按钮完全覆盖时调用的回调函数。
coverColor Color? Colors.black.withOpacity(0.2) 覆盖层的颜色值。
backgroundColor Color? Theme Primary Color 按钮的背景颜色值。
hoverColor Color? null 鼠标悬停时的效果颜色。
splashColor Color? null 点击效果的颜色。
splashFactory InteractiveInkFeatureFactory? null 按钮的点击效果工厂。
border Border? null 按钮的边框值。

其他组件的属性可以在 文档 中找到。

示例

DurationButton

DurationButton(
  duration: const Duration(seconds: 3),
  onPressed: () {},
  backgroundColor: Colors.yellow,
  splashFactory: NoSplash.splashFactory,
  onComplete: () => ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("onCompleteCalled!"))),
  child: const Text("Duration Button"),
),

IconDurationButton

IconDurationButton(
  Icons.favorite,
  size: 30,
  iconColor: Colors.pink,
  onPressed: () {},
  duration: const Duration(seconds: 2),
),

TextDurationButton

TextDurationButton(
  width: 150,
  height: 50,
  duration: const Duration(seconds: 7),
  text: const Text('Text Duration Button'),
  onPressed: () {},
),

OutlinedDurationButton

String _skipIntro = 'Skip Intro';

OutlinedDurationButton(
  child: Text(_skipIntro),
  onPressed: () {},
  onComplete: () => setState(() => _skipIntro = 'Intro Skipped'),
  duration: const Duration(seconds: 3),
),

完整示例

以下是一个完整的示例,展示了如何在 Flutter 应用中使用 duration_button 插件:

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

void main() => runApp(const MyApp());

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

  @override
  State<StatefulWidget> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _skipIntro = 'Skip Intro';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Duration Button Example',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Duration Button Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              DurationButton(
                duration: const Duration(seconds: 3),
                onPressed: () {},
                child: const Text("Duration Button"),
              ),
              TextDurationButton(
                duration: const Duration(seconds: 7),
                text: const Text('Text Duration Button'),
                onPressed: () {},
              ),
              IconDurationButton(
                Icons.favorite,
                iconColor: Colors.pink,
                onPressed: () {},
                duration: const Duration(seconds: 2),
              ),
              OutlinedDurationButton(
                child: Text(_skipIntro),
                onPressed: () {},
                onComplete: () => setState(() => _skipIntro = 'Intro Skipped'),
                duration: const Duration(seconds: 3),
              )
            ],
          ),
        ),
      ),
    );
  }
}

希望这个示例对你有帮助!如果你有任何问题或需要进一步的帮助,请随时提问。


更多关于Flutter倒计时按钮功能插件duration_button的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter倒计时按钮功能插件duration_button的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用duration_button插件来实现倒计时按钮功能的代码案例。假设你已经在pubspec.yaml文件中添加了duration_button依赖,并运行了flutter pub get

1. 添加依赖

首先,确保你的pubspec.yaml文件中包含以下依赖:

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

2. 导入插件

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

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

3. 实现倒计时按钮功能

下面是一个完整的Flutter应用示例,展示了如何使用DurationButton来实现倒计时按钮功能:

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

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  DurationButtonController? _controller;

  @override
  void initState() {
    super.initState();
    _controller = DurationButtonController(
      duration: 60, // 倒计时时间,单位为秒
      onFinish: () {
        // 倒计时结束时触发的回调
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('倒计时结束!')),
        );
      },
    );
  }

  @override
  void dispose() {
    _controller?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('倒计时按钮示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            DurationButton(
              controller: _controller!,
              width: 200,
              height: 50,
              textStyle: TextStyle(fontSize: 20, color: Colors.white),
              backgroundColor: Colors.blue,
              initialText: '开始倒计时',
              activeText: '${_controller!.remainingTime()}秒',
              disabledText: '已结束',
              onPressed: () {
                if (_controller!.isRunning) {
                  _controller!.reset(); // 如果已经在倒计时,则重置
                } else {
                  _controller!.start(); // 否则开始倒计时
                }
              },
            ),
          ],
        ),
      ),
    );
  }
}

4. 运行应用

保存上述代码并运行你的Flutter应用。你应该会看到一个按钮,点击它后会开始60秒的倒计时,并在倒计时结束后显示一条SnackBar消息。

这个示例展示了如何使用duration_button插件来创建一个基本的倒计时按钮,包括初始化倒计时控制器、处理倒计时结束时的回调、以及重置和启动倒计时等功能。你可以根据需要进一步自定义按钮的样式和行为。

回到顶部