Flutter带进度边框按钮插件progress_border_button的使用

Flutter 带进度边框按钮插件 progress_border_button 的使用

概述

progress_border_button 是一个用于创建具有进度条边框按钮的 Flutter 包。它支持矩形和圆角矩形的边框样式。

使用方法

该插件非常简单易用,以下是一个完整的示例,展示了如何在 Flutter 应用中使用 progress_border_button

完整示例代码

import 'dart:math';

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

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

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

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  final int _duration = 10; // 进度持续时间(秒)
  late GlobalKey _progressButtonKey;

  [@override](/user/override)
  void initState() {
    _progressButtonKey = GlobalKey();
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ProgressBorderButton(
              key: _progressButtonKey,
              duration: _duration, // 设置进度持续时间
              size: Size(200, 100), // 设置按钮大小
              hasRadius: true, // 是否启用圆角
              borderColor: const Color(0xFFFEDBFD), // 设置边框颜色
              onTimeEnd: () {
                print('on time end'); // 进度结束时的回调
              },
              childBuild: (context, double progress) {
                int remainTime = _duration - (_duration * progress).toInt(); // 计算剩余时间
                return Container(
                  width: 104,
                  height: 48,
                  alignment: AlignmentDirectional.center,
                  child: GestureDetector(
                    onTap: () {
                      print('tap button'); // 点击按钮时的回调
                    },
                    child: Container(
                      width: 94,
                      height: 40,
                      alignment: AlignmentDirectional.center,
                      decoration: BoxDecoration(
                        image: DecorationImage(
                          image: AssetImage('images/btn_action.png'), // 背景图片
                          fit: BoxFit.fill,
                        ),
                        borderRadius: BorderRadius.circular(20), // 圆角半径
                        border: Border.all(color: const Color(0xFFFEDBFD), width: 3), // 边框宽度和颜色
                        color: const Color(0xFFEEBAFF), // 背景色
                      ),
                      child: Text('${max(remainTime, 0)}', // 显示剩余时间
                          style: TextStyle(color: Colors.white, fontSize: 20, fontWeight: FontWeight.w500)),
                    ),
                  ),
                );
              },
            ),
          ],
        ),
      ),

      floatingActionButton: FloatingActionButton(
        onPressed: _start, // 启动进度按钮
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }

  void _start() {
    ProgressBorderButtonState progressBorderButtonState = _progressButtonKey.currentState as ProgressBorderButtonState;
    progressBorderButtonState.start(); // 开始进度
  }
}

更多关于Flutter带进度边框按钮插件progress_border_button的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter带进度边框按钮插件progress_border_button的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,我可以为你提供一个关于如何在Flutter项目中使用progress_border_button插件的代码示例。这个插件允许你创建一个带有进度边框的按钮,这在加载数据或执行长时间操作时非常有用。

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

dependencies:
  flutter:
    sdk: flutter
  progress_border_button: ^最新版本号  # 请替换为当前最新版本号

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

接下来是一个完整的示例代码,展示了如何使用ProgressBorderButton

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

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> {
  bool isLoading = false;

  void handleButtonClick() async {
    setState(() {
      isLoading = true;
    });

    // 模拟一个异步操作,比如网络请求
    await Future.delayed(Duration(seconds: 3));

    setState(() {
      isLoading = false;
    });

    // 操作完成后可以显示一个SnackBar或者做其他事情
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('操作完成!')));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Progress Border Button Demo'),
      ),
      body: Center(
        child: ProgressBorderButton(
          width: 150,
          height: 50,
          borderRadius: 25,
          buttonColor: Colors.blue,
          progressColor: Colors.blueAccent,
          loading: isLoading,
          child: Text(
            isLoading ? '加载中...' : '点击我',
            style: TextStyle(color: Colors.white),
          ),
          onPressed: () {
            if (!isLoading) {
              handleButtonClick();
            }
          },
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们定义了一个MyHomePage,它是一个有状态的Widget,用于管理按钮的加载状态。
  2. handleButtonClick方法模拟了一个异步操作(比如网络请求),并在操作完成后更新状态。
  3. ProgressBorderButton被用来创建一个带进度边框的按钮。通过设置loading属性来控制按钮的加载状态。
  4. 当按钮处于加载状态时,显示“加载中…”文本;否则显示“点击我”文本。
  5. onPressed回调只有在按钮不处于加载状态时才会被触发。

这个示例展示了如何使用progress_border_button插件来创建一个带有进度边框的按钮,并在异步操作完成时更新UI。希望这对你有所帮助!

回到顶部