Flutter圆形进度条插件circular_seek_bar的使用

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

Flutter圆形进度条插件circular_seek_bar的使用

简介

circular_seek_bar 是一个用于Flutter的圆形进度条/滑块组件,支持自定义动画、虚线和渐变等特性。它可以帮助开发者轻松创建各种风格的圆形进度条或滑块。

安装

要开始使用这个插件,请按照以下步骤操作:

1. Depend on it

在你的项目的 pubspec.yaml 文件中添加依赖:

dependencies:
  circular_seek_bar: ^1.1.0

或者直接通过命令行添加:

flutter pub add circular_seek_bar

2. Install it

运行以下命令安装包:

flutter pub get

3. Import it

然后,在你的Dart代码中导入该库:

import 'package:circular_seek_bar/circular_seek_bar.dart';

基本用法示例

下面是一个完整的示例应用,展示了如何配置并使用 CircularSeekBar 组件。此示例包括了对进度、角度、宽度、是否使用渐变、圆角样式、动画效果、滑块可见性及交互性的实时调整。

示例代码

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter circular_seek_bar example',
      theme: ThemeData(
        primaryColor: Colors.blue,
        brightness: Brightness.dark,
      ),
      home: const CircularSeekBarExamplePage(),
    );
  }
}

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

  @override
  State<CircularSeekBarExamplePage> createState() => _CircularSeekBarExamplePageState();
}

class _CircularSeekBarExamplePageState extends State<CircularSeekBarExamplePage> {
  final ValueNotifier<double> _valueNotifier = ValueNotifier(0);

  double _progress = 90;
  double _startAngle = 45;
  double _sweepAngle = 270;
  double _dashWidth = 0;
  double _dashGap = 0;
  double _barWidth = 8.0;
  bool _useGradient = true;
  bool _rounded = true;
  bool _animation = true;
  bool _thumbVisible = true;
  bool _interactive = true;

  @override
  void dispose() {
    _valueNotifier.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Flutter circular_seek_bar example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: <Widget>[
            CircularSeekBar(
              width: double.infinity,
              progress: _progress,
              height: 250,
              barWidth: _barWidth,
              startAngle: _startAngle,
              sweepAngle: _sweepAngle,
              strokeCap: _rounded ? StrokeCap.round : StrokeCap.butt,
              progressGradientColors: _useGradient
                  ? [
                      Colors.red,
                      Colors.orange,
                      Colors.yellow,
                      Colors.green,
                      Colors.blue,
                      Colors.indigo,
                      Colors.purple
                    ]
                  : [],
              dashWidth: _dashWidth,
              dashGap: _dashGap,
              animation: _animation,
              curves: Curves.linear,
              innerThumbRadius: _thumbVisible ? 5 : 0,
              innerThumbStrokeWidth: _thumbVisible ? 3 : 0,
              outerThumbRadius: _thumbVisible ? 5 : 0,
              outerThumbStrokeWidth: _thumbVisible ? 10 : 0,
              valueNotifier: _valueNotifier,
              interactive: _interactive,
              child: Center(
                child: ValueListenableBuilder(
                    valueListenable: _valueNotifier,
                    builder: (_, double value, __) => Column(
                          mainAxisSize: MainAxisSize.min,
                          children: [
                            Text('${value.round()}',
                                style: TextStyle(color: Colors.white)),
                            Text('progress',
                                style: TextStyle(color: Colors.grey)),
                          ],
                        )),
              ),
            ),
            const SizedBox(height: 20,),
            Expanded(
              child: SingleChildScrollView(
                child: Column(
                  children: [
                    // 滑动条和其他控件来动态改变属性...
                    // (这部分内容与上面提供的示例相同)
                  ],
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

属性说明

以下是 CircularSeekBar 的一些主要属性及其默认值:

Property Type Default Description
width double required 圆形进度条的宽度。
height double required 圆形进度条的高度。
progress double 0 当前进度值。
minProgress double 0 最小进度值。
maxProgress double 100 最大进度值。
startAngle double 0 开始绘制的角度。
sweepAngle double 360 绘制的角度范围。
barWidth double 10 进度条的厚度。
trackColor Color Colors.white54 背景轨道颜色。
trackGradientColors List<Color> [] 背景轨道渐变颜色列表。
如果设置了 trackGradientColors,则不会应用 trackColor
progressColor Color Colors.blue 前景进度颜色。
progressGradientColors List<Color> [] 前景进度渐变颜色列表。
如果设置了 progressGradientColors,则不会应用 progressColor
strokeCap StrokeCap StrokeCap.round 弧线两端的样式。
animation bool true 是否启用动画。
animDurationMillis int 1000 动画持续时间(毫秒)。
curves Curve Curves.linear 动画曲线类型。
innerThumbRadius double 0 内部滑块半径。
innerThumbStrokeWidth double 0 内部滑块边框宽度。
innerThumbColor Color Colors.white 内部滑块颜色。
outerThumbRadius double 0 外部滑块半径。
outerThumbStrokeWidth double 0 外部滑块边框宽度。
outerThumbColor Color Colors.white 外部滑块颜色。
dashWidth double 0 虚线宽度。
dashGap double 0 虚线间隔。
valueNotifier ValueNotifier<double>? null 当进度发生变化时通知监听器的对象。
onEnd VoidCallback? null 动画结束时调用的回调函数。
interactive bool true 是否允许用户点击来改变进度。
child Widget? null 放置在进度条上的子组件。

结论

通过上述介绍,你应该已经了解了如何在Flutter项目中集成和使用 circular_seek_bar 插件。你可以根据实际需求调整各个参数以实现不同的视觉效果。如果你有任何问题或者需要进一步的帮助,请参考官方文档或访问GitHub仓库获取更多信息。


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

1 回复

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


当然,以下是如何在Flutter项目中使用circular_seek_bar插件的详细代码示例。circular_seek_bar是一个用于创建圆形进度条的Flutter插件。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  circular_seek_bar: ^x.y.z  # 请替换为最新版本号

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

2. 导入插件

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

import 'package:circular_seek_bar/circular_seek_bar.dart';

3. 使用CircularSeekBar

下面是一个简单的例子,展示如何在你的Flutter应用中使用CircularSeekBar

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

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

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

class CircularSeekBarScreen extends StatefulWidget {
  @override
  _CircularSeekBarScreenState createState() => _CircularSeekBarScreenState();
}

class _CircularSeekBarScreenState extends State<CircularSeekBarScreen> {
  double _progress = 0.0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('CircularSeekBar Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            CircularSeekBar(
              radius: 150.0,
              strokeWidth: 10.0,
              progress: _progress,
              startAngle: -90.0,
              clockwise: true,
              backgroundColor: Colors.grey[300]!,
              progressColor: Colors.blue,
              onChangeListener: (progress) {
                setState(() {
                  _progress = progress;
                });
              },
            ),
            SizedBox(height: 20.0),
            Text(
              'Progress: ${(_progress * 100).toInt()}%',
              style: TextStyle(fontSize: 24.0),
            ),
          ],
        ),
      ),
    );
  }
}

代码解释

  1. 依赖和导入

    • pubspec.yaml文件中添加circular_seek_bar依赖。
    • 在Dart文件中导入circular_seek_bar包。
  2. 主应用

    • 创建一个MyApp类,它是你的Flutter应用的入口。
    • MyApp中,使用MaterialApp并设置主题和主页为CircularSeekBarScreen
  3. CircularSeekBarScreen

    • 创建一个有状态的CircularSeekBarScreen小部件。
    • 在状态中定义一个_progress变量来存储当前的进度。
    • 使用CircularSeekBar小部件,并配置其属性如半径、线宽、进度、起始角度、是否顺时针、背景颜色和进度颜色。
    • 使用onChangeListener回调来更新进度值。
  4. 显示进度

    • CircularSeekBar下方显示一个Text小部件来显示当前的进度值。

这个示例展示了如何创建一个简单的圆形进度条,并实时更新其进度值。你可以根据需要进一步自定义CircularSeekBar的属性,以满足你的特定需求。

回到顶部