Flutter圆形图表展示插件awesome_circular_chart的使用

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

Flutter圆形图表展示插件awesome_circular_chart的使用

Overview

awesome_circular_chart 是一个用于创建动画圆形图表的 Flutter 插件,灵感来源于 Zero to One with Flutter。通过提供数据对象,可以轻松创建动画饼图和径向图。

animated_random_radial_chart

animated pie chart animated radial chart

Contents

Installation

pubspec.yaml 文件中添加 awesome_circular_chart 依赖:

dependencies:
  awesome_circular_chart: ^最新版本号

然后运行 flutter pub get 来安装插件。

Getting Started

导入包

首先,导入 awesome_circular_chart 包:

import 'package:awesome_circular_chart/awesome_circular_chart.dart';

创建 GlobalKey

为了能够访问和更新图表的数据,需要创建一个 GlobalKey

final GlobalKey<AnimatedCircularChartState> _chartKey = GlobalKey<AnimatedCircularChartState>();

创建图表数据

创建图表数据条目对象:

List<CircularStackEntry> data = [
  CircularStackEntry(
    [
      CircularSegmentEntry(500.0, Colors.red[200], rankKey: 'Q1'),
      CircularSegmentEntry(1000.0, Colors.green[200], rankKey: 'Q2'),
      CircularSegmentEntry(2000.0, Colors.blue[200], rankKey: 'Q3'),
      CircularSegmentEntry(1000.0, Colors.yellow[200], rankKey: 'Q4'),
    ],
    rankKey: 'Quarterly Profits',
  ),
];

创建 AnimatedCircularChart

build 方法中创建 AnimatedCircularChart,并传递 _chartKey 和初始数据:

@override
Widget build(BuildContext context) {
  return AnimatedCircularChart(
    key: _chartKey,
    size: const Size(300.0, 300.0),
    initialChartData: data,
    chartType: CircularChartType.Pie,
  );
}

更新数据

调用 updateData 方法来动画更新图表:

void _cycleSamples() {
  List<CircularStackEntry> nextData = [
    CircularStackEntry(
      [
        CircularSegmentEntry(1500.0, Colors.red[200], rankKey: 'Q1'),
        CircularSegmentEntry(750.0, Colors.green[200], rankKey: 'Q2'),
        CircularSegmentEntry(2000.0, Colors.blue[200], rankKey: 'Q3'),
        CircularSegmentEntry(1000.0, Colors.yellow[200], rankKey: 'Q4'),
      ],
      rankKey: 'Quarterly Profits',
    ),
  ];
  setState(() {
    _chartKey.currentState?.updateData(nextData);
  });
}

Customization

Hole Label

可以通过设置 holeLabellabelStyle 来自定义图表中间的标签:

AnimatedCircularChart(
  key: _chartKey,
  size: const Size(300.0, 300.0),
  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,
  ),
)

hole label example screenshot

Segment Edge Style

可以通过设置 edgeStyle 来自定义段落边缘样式:

Property Default
edgeStyle SegmentEdgeStyle.flat
SegmentEdgeStyle Description
flat (default) 段落开始和结束时为平边。
round 段落开始和结束时为半圆。
AnimatedCircularChart(
  key: _chartKey,
  size: const Size(300.0, 300.0),
  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,
)

round segment edge example screenshot

Details

Chart Data Entries

图表期望一个包含 CircularStackEntry 对象的列表。每个 CircularStackEntry 对应图表中的一个完整圆。对于径向图,它是其中一个环;对于饼图,它是整个饼。

径向图中有多个 CircularStackEntry 会显示为同心圆。

每个 CircularStackEntry 由多个 CircularSegmentEntry 组成,包含数据点的值。在径向图中,一个段落对应当前环的一个弧段;在饼图中,它是一个单独的扇区。


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

1 回复

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


当然,下面是一个关于如何在Flutter中使用awesome_circular_chart插件来展示圆形图表的示例代码。这个插件允许你创建多种类型的圆形图表,包括饼图、环形图等。

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

dependencies:
  flutter:
    sdk: flutter
  awesome_circular_chart: ^0.5.0  # 请确保版本号是最新的

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

接下来,创建一个Flutter应用并在其中使用AwesomeCircularChart。以下是一个完整的示例代码:

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

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

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

class CircularChartDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Awesome Circular Chart Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            SizedBox(
              height: 300,
              child: AwesomeCircularChart(
                size: Size(300, 300),
                data: getCircularChartData(),
                animationDuration: Duration(seconds: 1),
                initialAnimation: true,
                percentageValues: true,
                center: Center(
                  child: Text(
                    '75%',
                    style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold),
                  ),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }

  List<CircularChartData> getCircularChartData() {
    return [
      CircularChartData(
        percent: 75,
        color: Colors.blue,
        label: 'Category A',
      ),
      CircularChartData(
        percent: 25,
        color: Colors.grey.shade300,
        label: 'Category B',
      ),
    ];
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个AwesomeCircularChart组件。这个组件被配置为显示一个包含两个部分的圆形图表,其中“Category A”占75%,“Category B”占25%。

解释

  • AwesomeCircularChart:

    • size: 指定图表的大小。
    • data: 提供图表的数据,每个数据项表示图表中的一个部分。
    • animationDuration: 动画持续时间。
    • initialAnimation: 是否在初始加载时显示动画。
    • percentageValues: 是否在图表上显示百分比值。
    • center: 图表中心显示的Widget,可以是文本或其他Widget。
  • CircularChartData:

    • percent: 该部分所占的百分比。
    • color: 该部分的颜色。
    • label: 该部分的标签,通常用于图例。

你可以根据需要调整这些参数来创建不同的圆形图表。这个插件还提供了更多的自定义选项,比如自定义标签样式、添加阴影等,你可以参考官方文档进行更深入的探索。

回到顶部