Flutter进度展示插件progress_circle的使用

Flutter进度展示插件progress_circle的使用

该插件提供了一个美观且易于使用的组件,可以渲染一个带有进度弧线的圆。你可以在应用中使用它来向用户展示一些进度或活动。

特性

该组件非常简单且可定制,你可以通过组合不同的状态来获得所需的配置。以下是一些基本的状态:

示例

使用方法

要使用基本状态,只需传递所需的参数:

ProgressCircle(
    completed: 4.0,
    total: 8.0,
),

也可以通过百分比值创建相同的状态:

ProgressCircle(
    completedPercent: 50.0,
),

如果同时设置了两组参数,completedPercent 将被选中,而其他参数将被忽略:

ProgressCircle(
    completed: 2.0, // 忽略
    total: 8.0, // 忽略
    completedPercent: 50.0, // 选择
),

为了方便使用,插件还提供了一些命名构造函数,只请求当前情况所需参数:

ProgressCircle.fromValues(
    total: 4.0,
    completed: 8.0,
),
ProgressCircle.fromPercent(
    completedPercent: 50.0,
),

可以通过 size 字段更改组件的大小:

ProgressCircle(
    completedPercent: 50,
    size: Size.fromRadius(75),
),

还有 style 属性可以进行自定义:

ProgressCircle(
    completedPercent: 50,
    style: ProgressCircleStyle(
        progressArcColor: Colors.orange,
        headIcon: Icons.star,
        tailIcon: Icons.apple,
        centerMessage: '你真棒!',
        centerMessageStyle: TextStyle(
            color: Colors.orange,
            fontSize: 14,
        ),
    ),
),

style 中还有其他属性可以用于自定义,你可以根据需要设置相应的配置。

完整示例代码

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

void main() {
  runApp(const MainApp());
}

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

  static const _bgColor = Color.fromRGBO(253, 247, 254, 1);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        backgroundColor: _bgColor,
        body: SafeArea(
          child: Center(
            child: Wrap(
              spacing: 100.0,
              runSpacing: 50.0,
              children: [
                const ProgressCircle(total: 100, completed: 35), // 按数值
                const ProgressCircle(total: 100, completed: 70), // 按数值
                const ProgressCircle(completedPercent: 85), // 按百分比

                /// fromPercent
                const ProgressCircle.fromPercent(
                  completedPercent: 35,
                  style: ProgressCircleStyle(
                    headIcon: Icons.apple,
                    arcWidth: 20,
                  ),
                ),
                const ProgressCircle.fromPercent(
                  completedPercent: 70,
                  style: ProgressCircleStyle(
                    tailIcon: Icons.star,
                    arcWidth: 30,
                  ),
                ),
                const ProgressCircle.fromPercent(
                  completedPercent: 85,
                  style: ProgressCircleStyle(
                    headIcon: Icons.apple,
                    tailIcon: Icons.star,
                    arcWidth: 50,
                  ),
                ),

                /// fromValues
                const ProgressCircle.fromValues(
                  total: 100,
                  completed: 35,
                  style: ProgressCircleStyle(
                    progressArcColor: Colors.orange,
                    headIcon: Icons.apple,
                  ),
                ),
                const ProgressCircle.fromValues(
                  total: 100,
                  completed: 70,
                  style: ProgressCircleStyle(
                    progressArcColor: Colors.green,
                    tailIcon: Icons.star,
                  ),
                ),

                const ProgressCircle.fromValues(
                  total: 100,
                  completed: 85,
                  style: ProgressCircleStyle(
                    progressArcColor: Colors.purple,
                    headIcon: Icons.apple,
                    tailIcon: Icons.star,
                  ),
                ),

                /// 其他样式
                ProgressCircle.fromValues(
                  total: 100,
                  completed: 35,
                  style: ProgressCircleStyle(
                    progressArcColor: Colors.orange,
                    arcColor: Colors.orange.shade100,
                    headIcon: Icons.apple,
                  ),
                ),
                ProgressCircle.fromValues(
                  total: 100,
                  completed: 70,
                  style: ProgressCircleStyle(
                    progressArcColor: Colors.green,
                    arcColor: Colors.green.shade100,
                    tailIcon: Icons.star,
                  ),
                ),

                ProgressCircle.fromValues(
                  total: 100,
                  completed: 85,
                  style: ProgressCircleStyle(
                    progressArcColor: Colors.purple,
                    arcColor: Colors.purple.shade100,
                    headIcon: Icons.apple,
                    tailIcon: Icons.star,
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter进度展示插件progress_circle的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


progress_circle 是一个用于 Flutter 的插件,可以帮助你轻松地创建圆形进度条。它可以用于展示加载进度、完成度等。以下是 progress_circle 插件的基本使用方法。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  progress_circle: ^1.0.0  # 请使用最新版本

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

2. 基本使用

progress_circle 插件提供了一个 ProgressCircle 小部件,你可以通过设置不同的属性来自定义圆形进度条的外观。

以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Progress Circle Example'),
        ),
        body: Center(
          child: ProgressCircle(
            percent: 75, // 进度百分比
            radius: 50,  // 圆的半径
            lineWidth: 10, // 进度条的宽度
            backgroundColor: Colors.grey[300], // 背景颜色
            progressColor: Colors.blue, // 进度条颜色
            child: Text(
              '75%', // 中间显示的文本
              style: TextStyle(fontSize: 20, color: Colors.blue),
            ),
          ),
        ),
      ),
    );
  }
}

3. 属性说明

ProgressCircle 小部件提供了多个属性来自定义圆形进度条的外观:

  • percent: 进度百分比,范围是 0 到 100。
  • radius: 圆的半径。
  • lineWidth: 进度条的宽度。
  • backgroundColor: 进度条的背景颜色。
  • progressColor: 进度条的颜色。
  • child: 可以在圆中心显示的任意小部件,通常用于显示进度百分比或其他信息。
  • startAngle: 进度条的起始角度,默认是 -90 度(即从顶部开始)。
  • circularStrokeCap: 进度条的端点形状,可以是 CircularStrokeCap.buttCircularStrokeCap.round

4. 动态更新进度

你可以通过使用 StatefulWidget 来动态更新进度条的值。以下是一个动态更新进度的示例:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ProgressCircleExample(),
    );
  }
}

class ProgressCircleExample extends StatefulWidget {
  [@override](/user/override)
  _ProgressCircleExampleState createState() => _ProgressCircleExampleState();
}

class _ProgressCircleExampleState extends State<ProgressCircleExample> {
  double _progress = 0.0;

  void _updateProgress() {
    setState(() {
      _progress += 10.0;
      if (_progress > 100.0) {
        _progress = 0.0;
      }
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Progress Circle Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ProgressCircle(
              percent: _progress,
              radius: 50,
              lineWidth: 10,
              backgroundColor: Colors.grey[300],
              progressColor: Colors.blue,
              child: Text(
                '${_progress.toStringAsFixed(0)}%',
                style: TextStyle(fontSize: 20, color: Colors.blue),
              ),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _updateProgress,
              child: Text('Update Progress'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部