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

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

您可以使用该插件通过将sizer包添加到您的应用中。该应用正在开发中,依赖项将在未来进行修订。

依赖包

dependencies:
  flutter_circle_grade: ^x.x.x
  sizer: ^x.x.x

使用

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

// 创建一个CircleDegree实例
CircleDegree(
  max: 100,   // 进度条的最大值
  min: 0,     // 进度条的最小值
  value: 50,  // 当前进度值
  colors: [Colors.blueGrey, Colors.blueAccent, Colors.blue], // 设置进度条的颜色渐变
  image: "assets/icon/default.png", // 设置背景图片
)

视图

完整示例

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter_circle_grade/flutter_circle_grade.dart'; // 导入flutter_circle_grade插件

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

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

  // 这个小部件是您的应用的根组件
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const ExampleView(), // 设置首页为ExampleView
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: CircleDegree(
          /*
          当创建一个CircleDegree实例时,
          必须提供所有三个参数:max、min和value。
          这些参数共同定义了范围及其在该范围内的当前位置。
          max和min参数分别建立了上限和下限,
          而value参数表示此范围内的当前值。
          缺少这些参数中的任何一个都可能导致意外行为,
          因为类依赖于max、min和value之间的关系来正常工作。
          */
          max: 100,  // 进度条的最大值
          min: 0,    // 进度条的最小值
          value: 50, // 当前进度值
          colors: [Colors.blueGrey, Colors.blueAccent, Colors.blue], // 设置进度条的颜色渐变
          image: "assets/icon/default.png", // 设置背景图片
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何使用 flutter_circle_grade 插件在 Flutter 中创建圆形进度条的示例代码。flutter_circle_grade 并不是一个广为人知的官方或主流插件,因此假设它的使用方式与常见的进度条插件类似。由于无法直接验证该插件的具体实现和API,以下代码将基于一个假想的API结构来展示其使用方法。

首先,确保在 pubspec.yaml 文件中添加 flutter_circle_grade 依赖(假设它存在):

dependencies:
  flutter:
    sdk: flutter
  flutter_circle_grade: ^x.y.z  # 替换为实际版本号

然后运行 flutter pub get 来获取依赖。

接下来,在你的 Dart 文件中,你可以这样使用 flutter_circle_grade

import 'package:flutter/material.dart';
import 'package:flutter_circle_grade/flutter_circle_grade.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> with SingleTickerProviderStateMixin {
  double _progress = 0.0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Circle Grade Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            SizedBox(
              width: 200,
              height: 200,
              child: CircleGrade(
                value: _progress, // 设置进度值
                maxValue: 1.0,    // 设置最大值,通常用于归一化进度
                strokeWidth: 10.0, // 设置进度条的宽度
                color: Colors.blue, // 设置进度条的颜色
                backgroundColor: Colors.grey.withOpacity(0.3), // 设置背景颜色
              ),
            ),
            SizedBox(height: 20),
            Slider(
              value: _progress,
              onChanged: (newValue) {
                setState(() {
                  _progress = newValue;
                });
              },
              min: 0.0,
              max: 1.0,
            ),
          ],
        ),
      ),
    );
  }
}

// 假设 CircleGrade 是插件提供的组件
// 这里的 API 是基于常见进度条组件的假设,实际使用时请参考插件的文档
class CircleGrade extends StatelessWidget {
  final double value;
  final double maxValue;
  final double strokeWidth;
  final Color color;
  final Color backgroundColor;

  const CircleGrade({
    Key key,
    @required this.value,
    @required this.maxValue,
    this.strokeWidth = 5.0,
    this.color = Colors.blue,
    this.backgroundColor = Colors.transparent,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    // 这里应该包含绘制圆形进度条的逻辑,但由于这是一个示例,
    // 我们仅返回一个容器来表示该组件的位置和大小。
    return Container(
      decoration: BoxDecoration(
        shape: BoxShape.circle,
        border: Border.all(
          color: backgroundColor,
          width: strokeWidth,
        ),
        color: Colors.transparent, // 实际绘制应该在 CustomPainter 中完成
      ),
      child: CustomPaint(
        size: Size.square(double.infinity), // 假设我们想要填满容器
        painter: _CircleGradePainter(
          value: value,
          maxValue: maxValue,
          strokeWidth: strokeWidth,
          color: color,
        ),
      ),
    );
  }
}

class _CircleGradePainter extends CustomPainter {
  final double value;
  final double maxValue;
  final double strokeWidth;
  final Color color;

  _CircleGradePainter({
    @required this.value,
    @required this.maxValue,
    @required this.strokeWidth,
    @required this.color,
  });

  @override
  void paint(Canvas canvas, Size size) {
    final Paint paint = Paint()
      ..color = color
      ..strokeWidth = strokeWidth
      ..style = PaintingStyle.stroke
      ..strokeCap = StrokeCap.round;

    final double radius = size.shortestSide / 2 - strokeWidth / 2;
    final double sweepAngle = (value / maxValue) * 2 * 3.141592653589793;

    canvas.drawArc(
      Rect.fromCircle(center: Offset(size.width / 2, size.height / 2), radius: radius),
      -3.141592653589793 / 2, // 起始角度(12点钟方向)
      sweepAngle,
      false,
      paint,
    );
  }

  @override
  bool shouldRepaint(_CircleGradePainter oldDelegate) {
    return value != oldDelegate.value ||
           maxValue != oldDelegate.maxValue ||
           strokeWidth != oldDelegate.strokeWidth ||
           color != oldDelegate.color;
  }
}

注意

  1. 由于 flutter_circle_grade 插件的具体实现和API未知,上面的代码是基于假设的API结构编写的。
  2. 如果 flutter_circle_grade 插件实际存在且API不同,请参考其官方文档进行调整。
  3. 上面的 _CircleGradePainter 类是一个假设的自定义绘制类,用于在 CustomPaint 中绘制圆形进度条。实际使用时,如果插件提供了类似的组件,则不需要自己实现绘制逻辑。
回到顶部