Flutter圆形进度按钮插件circular_progress_button的使用

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

Flutter圆形进度按钮插件circular_progress_button的使用

圆形进度按钮

circular_progress_button 是一个 Flutter 包,提供了一个可自定义的圆形进度按钮,该按钮会分三个步骤填充(33%,66%,100%)。

Screen_recording_20241227_142915

特性

  • 分三个步骤(33%,66%,100%)填充的圆形进度指示器
  • 可通过 ProgressButtonTheme 自定义外观
  • 具有可配置持续时间的平滑动画
  • 完成回调
  • 高度可定制(颜色、大小、图标等)

开始使用

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

dependencies:
  circular_progress_button: ^0.0.4

然后运行 flutter pub get 来安装包。

使用示例

以下是一个基本的用法示例:

import 'package:flutter/material.dart';
import 'package:circular_progress_button/circular_progress_button.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: 'Circular Progress Button Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

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

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

class _MyHomePageState extends State<MyHomePage> {
  int currentStep = 1;
  int totalSteps = 3;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Circular Progress Button Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const SizedBox(height: 32),
            // 基本用法
            CircularProgressButton(
              onTap: () => print('Tapped!'),
              onComplete: () => print('Completed!'),
            ),
            const SizedBox(height: 32),
            // 自定义按钮
            CircularProgressButton(
              theme: const ProgressButtonTheme(
                progressColor: Colors.redAccent,
                backgroundColor: Colors.redAccent.withOpacity(0.3),
                strokeWidth: 10,
                size: 80,
                iconSize: 50,
                icon: Icons.navigate_next,
              ),
              onTap: () {
                if (currentStep == totalSteps) {
                  print('CircularProgressButton: All $totalSteps steps completed');
                }
                setState(() {
                  if (currentStep < totalSteps) {
                    currentStep++;
                    print('CircularProgressButton: Step $currentStep of $totalSteps completed');
                  }
                });
              },
              onComplete: () => print('Completed!'),
              animationDuration: const Duration(milliseconds: 1000),
              totalSteps: totalSteps,
              currentStep: currentStep,
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter中使用circular_progress_button插件来创建一个圆形进度按钮的示例代码。

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

dependencies:
  flutter:
    sdk: flutter
  circular_progress_button: ^2.0.0  # 请检查最新版本号

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

接下来,你可以在你的Dart文件中使用CircularProgressButton。以下是一个完整的示例:

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

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

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

class CircularProgressButtonDemo extends StatefulWidget {
  @override
  _CircularProgressButtonDemoState createState() => _CircularProgressButtonDemoState();
}

class _CircularProgressButtonDemoState extends State<CircularProgressButtonDemo> {
  bool isLoading = false;

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

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

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

    // 这里可以添加操作完成后的逻辑,比如显示一个Snackbar
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(
      content: Text('操作完成!'),
    ));
  }

  @override
  Widget build(BuildContext context) {
    return CircularProgressButton(
      child: Text('点击我'),
      backgroundColor: Colors.blue,
      color: Colors.white,
      width: 200,
      height: 50,
      borderRadius: 25,
      onPressed: isLoading ? null : handlePress,
      loading: isLoading,
    );
  }
}

在这个示例中:

  1. CircularProgressButtonDemo是一个StatefulWidget,它包含一个布尔状态isLoading,用于跟踪按钮是否处于加载状态。
  2. handlePress方法模拟了一个异步操作,将isLoading设置为true,等待2秒后再将其设置回false
  3. CircularProgressButton被配置为在按钮被点击时(如果不在加载状态)调用handlePress方法,并在加载时显示进度指示器。
  4. 按钮的样式(背景颜色、文字颜色、宽度、高度和圆角)通过参数进行配置。

这个示例展示了如何使用circular_progress_button插件来创建一个具有加载指示功能的圆形进度按钮。你可以根据需要调整按钮的样式和行为。

回到顶部