Flutter圆形图表绘制插件flutter_circular_chart的使用

Flutter圆形图表绘制插件flutter_circular_chart的使用

简介

flutter_circular_chart 是一个用于在 Flutter 中创建动画圆形图表的库。它受到了 Flutter 官方文档 的启发。


概述

通过提供数据对象,可以轻松创建带有动画效果的饼状图和径向图。

更多源码参考:examples 文件夹.


目录


安装

pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter_circular_chart: ^1.0.0

然后运行 flutter pub get


快速开始

导入包
import 'package:flutter_circular_chart/flutter_circular_chart.dart';
创建全局 Key

使用 GlobalKey 来访问图表并更新其数据:

final GlobalKey<AnimatedCircularChartState> _chartKey = GlobalKey<AnimatedCircularChartState>();
创建图表数据对象
List<CircularStackEntry> data = [
  CircularStackEntry([
    CircularSegmentEntry(500.0, Colors.red[200], rankKey: 'Q1'), // Q1 占比
    CircularSegmentEntry(1000.0, Colors.green[200], rankKey: 'Q2'), // Q2 占比
    CircularSegmentEntry(2000.0, Colors.blue[200], rankKey: 'Q3'), // Q3 占比
    CircularSegmentEntry(1000.0, Colors.yellow[200], rankKey: 'Q4'), // Q4 占比
  ], rankKey: 'Quarterly Profits'),
];
创建动画图表
@override
Widget build(BuildContext context) {
  return AnimatedCircularChart(
    key: _chartKey,
    size: const Size(300.0, 300.0), // 图表大小
    initialChartData: data, // 初始数据
    chartType: CircularChartType.Pie, // 饼状图类型
  );
}
更新数据以触发动画
void _cycleSamples() {
  List<CircularStackEntry> nextData = [
    CircularStackEntry([
      CircularSegmentEntry(1500.0, Colors.red[200], rankKey: 'Q1'), // 更新 Q1 数据
      CircularSegmentEntry(750.0, Colors.green[200], rankKey: 'Q2'), // 更新 Q2 数据
      CircularSegmentEntry(2000.0, Colors.blue[200], rankKey: 'Q3'), // Q3 数据保持不变
      CircularSegmentEntry(1000.0, Colors.yellow[200], rankKey: 'Q4'), // Q4 数据保持不变
    ], rankKey: 'Quarterly Profits'),
  ];
  setState(() {
    _chartKey.currentState.updateData(nextData); // 更新图表数据
  });
}

自定义

洞形标签

可以通过设置 holeLabellabelStyle 来自定义洞形区域的标签。

示例代码:

new AnimatedCircularChart(
  key: _chartKey,
  size: _chartSize,
  initialChartData: [
    CircularStackEntry([
      CircularSegmentEntry(33.33, Colors.blue[400], rankKey: 'completed'),
      CircularSegmentEntry(66.67, Colors.blueGrey[600], rankKey: 'remaining'),
    ], rankKey: 'progress'),
  ],
  chartType: CircularChartType.Radial,
  percentageValues: true,
  holeLabel: '1/3', // 设置洞形标签
  labelStyle: TextStyle(
    color: Colors.blueGrey[600],
    fontWeight: FontWeight.bold,
    fontSize: 24.0,
  ),
)


分段边缘样式

可以通过设置 edgeStyle 来更改分段边缘的样式。

示例代码:

new AnimatedCircularChart(
  key: _chartKey,
  size: _chartSize,
  initialChartData: [
    CircularStackEntry([
      CircularSegmentEntry(33.33, Colors.blue[400], rankKey: 'completed'),
      CircularSegmentEntry(66.67, Colors.blueGrey[600], rankKey: 'remaining'),
    ], rankKey: 'progress'),
  ],
  chartType: CircularChartType.Radial,
  edgeStyle: SegmentEdgeStyle.round, // 圆角边缘
  percentageValues: true,
)

更多关于Flutter圆形图表绘制插件flutter_circular_chart的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter圆形图表绘制插件flutter_circular_chart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_circular_chart 是一个用于在 Flutter 应用中绘制圆形图表的插件。它提供了一种简单的方式来创建漂亮的圆形图表,如饼图、环形图等。以下是如何使用 flutter_circular_chart 插件的基本步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_circular_chart: ^0.1.0  # 请检查最新版本

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

2. 导入包

在你的 Dart 文件中导入 flutter_circular_chart 包:

import 'package:flutter_circular_chart/flutter_circular_chart.dart';

3. 创建圆形图表

使用 AnimatedCircularChart 组件来创建圆形图表。以下是一个简单的示例:

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

class CircularChartExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Circular Chart Example'),
      ),
      body: Center(
        child: AnimatedCircularChart(
          size: Size(200, 200),
          initialChartData: <CircularStackEntry>[
            CircularStackEntry(
              <CircularSegmentEntry>[
                CircularSegmentEntry(35.0, Colors.blue, rankKey: 'Q1'),
                CircularSegmentEntry(25.0, Colors.red, rankKey: 'Q2'),
                CircularSegmentEntry(20.0, Colors.green, rankKey: 'Q3'),
                CircularSegmentEntry(20.0, Colors.yellow, rankKey: 'Q4'),
              ],
              rankKey: 'Quarterly',
            ),
          ],
          chartType: CircularChartType.Pie,
        ),
      ),
    );
  }
}

void main() => runApp(MaterialApp(
  home: CircularChartExample(),
));

4. 解释代码

  • AnimatedCircularChart: 这是一个动画圆形图表组件,可以根据提供的数据动态显示图表。
  • size: 定义图表的大小。
  • initialChartData: 初始化图表的数据,它是一个 CircularStackEntry 列表。
  • CircularStackEntry: 表示一组数据,包含多个 CircularSegmentEntry
  • CircularSegmentEntry: 表示一个数据段,包含值、颜色和键。
  • chartType: 定义图表的类型,可以是 Pie(饼图)或 Radial(环形图)。

5. 运行应用

运行你的 Flutter 应用,你将看到一个圆形图表,其中包含不同颜色的数据段。

6. 动态更新图表

你可以通过更新 AnimatedCircularChartchartData 属性来动态更新图表。例如:

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

class _CircularChartExampleState extends State<CircularChartExample> {
  final GlobalKey<AnimatedCircularChartState> _chartKey = GlobalKey<AnimatedCircularChartState>();

  void _updateChart() {
    _chartKey.currentState.updateData([
      CircularStackEntry(
        <CircularSegmentEntry>[
          CircularSegmentEntry(50.0, Colors.blue, rankKey: 'Q1'),
          CircularSegmentEntry(30.0, Colors.red, rankKey: 'Q2'),
          CircularSegmentEntry(20.0, Colors.green, rankKey: 'Q3'),
        ],
        rankKey: 'Quarterly',
      ),
    ]);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Circular Chart Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            AnimatedCircularChart(
              key: _chartKey,
              size: Size(200, 200),
              initialChartData: <CircularStackEntry>[
                CircularStackEntry(
                  <CircularSegmentEntry>[
                    CircularSegmentEntry(35.0, Colors.blue, rankKey: 'Q1'),
                    CircularSegmentEntry(25.0, Colors.red, rankKey: 'Q2'),
                    CircularSegmentEntry(20.0, Colors.green, rankKey: 'Q3'),
                    CircularSegmentEntry(20.0, Colors.yellow, rankKey: 'Q4'),
                  ],
                  rankKey: 'Quarterly',
                ),
              ],
              chartType: CircularChartType.Pie,
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _updateChart,
              child: Text('Update Chart'),
            ),
          ],
        ),
      ),
    );
  }
}

void main() => runApp(MaterialApp(
  home: CircularChartExample(),
));
回到顶部