Flutter图表绘制插件chart_it的使用

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

Flutter图表绘制插件chart_it的使用

chart_it 是一个完全用 Dart 编写的、高度可定制且无缝动画的图表集合。它支持多种类型的图表,包括柱状图、多柱状图、饼图和环形图等。

安装

在你的项目中的 pubspec.yaml 文件中添加 chart_it 包:

dependencies:
  chart_it: ^0.2.1

或者,你也可以在 Flutter 项目中运行以下命令:

$ flutter pub add chart_it

文档

完整的文档可以在这里查看:完整文档

支持的图表

chart_it 中的所有图表分为两类:

  1. 笛卡尔图表

    • 柱状图
    • 多柱状图
  2. 径向图表

    • 饼图
    • 环形图

根据你需要绘制的图表类型选择相应的图表组件,并提供必要的数据。

快速示例

1. 柱状图

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Bar Chart Example')),
        body: Center(
          child: BarChart(
            maxYValue: 50,
            data: BarSeries(
              barData: <BarGroup>[
                SimpleBar(
                  xValue: 10,
                  label: (value) => 'Group 1',
                  yValue: const BarData(yValue: 25),
                ),
                SimpleBar(
                  xValue: 6,
                  label: (value) => 'Group 1',
                  yValue: const BarData(yValue: 12),
                ),
                SimpleBar(
                  xValue: 19,
                  label: (value) => 'Group 1',
                  yValue: const BarData(yValue: 38),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

更多高级用法,请参考文档:柱状图指南

2. 环形图

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Donut Chart Example')),
        body: Center(
          child: PieChart(
            data: PieSeries(
              donutRadius: 50.0,
              donutSpaceColor: Colors.white,
              donutLabel: () => 'Market Shares',
              slices: <SliceData>[
                SliceData(
                  style: const SliceDataStyle(radius: 105.0, color: Colors.red),
                  label: (percent, value) => 'Tesla',
                  value: 34,
                ),
                SliceData(
                  style: const SliceDataStyle(radius: 90.0, color: Colors.blueGrey),
                  label: (percent, value) => 'Space X',
                  value: 18,
                ),
                SliceData(
                  style: const SliceDataStyle(radius: 90.0, color: Colors.green),
                  label: (percent, value) => 'Google',
                  value: 42,
                ),
                SliceData(
                  style: const SliceDataStyle(radius: 90.0, color: Colors.cyanAccent),
                  label: (percent, value) => 'Microsoft',
                  value: 57,
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

更多高级用法,请参考文档:饼图和环形图指南

动画

默认情况下,图表组件会在首次加载时以及每次更新数据时进行动画效果。你可以通过设置 animateOnLoadanimateOnUpdate 属性来覆盖这种行为。

child: BarChart(
  animateOnLoad: false,
  animateOnUpdate: true,
  animationDuration: const Duration(milliseconds: 750),
  data: BarSeries(
    // ...
  ),
)

如果你希望控制自己的动画,可以通过提供自定义的 AnimationController 来实现:

child: BarChart(
  animation: AnimationController(
    duration: Duration(milliseconds: 500),
    vsync: this,
  ),
  data: BarSeries(
    // ...
  ),
)

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用chart_it插件来绘制图表的示例代码。chart_it是一个用于Flutter的图表库,尽管这不是一个官方或广泛使用的库名(常见的Flutter图表库包括flutter_chartsfl_chart等),但我会假设chart_it提供了类似的接口来绘制图表。如果chart_it实际上不存在,这个示例可以作为一个模板,适用于大多数Flutter图表库。

首先,确保你的pubspec.yaml文件中已经添加了chart_it(或实际使用的图表库)的依赖项:

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

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

接下来,在你的Flutter项目中创建一个简单的图表。以下是一个示例,展示如何使用chart_it(假设它提供了类似的API)来绘制一个基本的柱状图(Bar Chart):

import 'package:flutter/material.dart';
import 'package:chart_it/chart_it.dart'; // 假设这是图表库的导入路径

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

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

class ChartScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chart Example'),
      ),
      body: Center(
        child: ChartItWidget(
          data: createChartData(),
          type: ChartType.bar, // 假设ChartType是一个枚举,表示图表类型
        ),
      ),
    );
  }

  // 创建图表数据的方法
  List<ChartData> createChartData() {
    return [
      ChartData(label: 'A', value: 10),
      ChartData(label: 'B', value: 20),
      ChartData(label: 'C', value: 15),
      ChartData(label: 'D', value: 25),
    ];
  }
}

// 假设ChartData是一个用于存储图表数据点的类
class ChartData {
  final String label;
  final double value;

  ChartData({required this.label, required this.value});
}

// 假设ChartItWidget是图表库提供的用于显示图表的Widget
class ChartItWidget extends StatelessWidget {
  final List<ChartData> data;
  final ChartType type;

  ChartItWidget({required this.data, required this.type});

  @override
  Widget build(BuildContext context) {
    // 这里我们假设ChartIt库提供了一个buildChart方法,用于根据数据和类型生成图表
    // 实际上,你需要根据实际的chart_it库的API来调整这部分代码
    return Container(
      child: CustomPaint(
        size: Size(double.infinity, 300), // 设置图表的大小
        painter: ChartPainter(data: data, type: type),
      ),
    );
  }
}

// 假设ChartPainter是一个CustomPainter,用于绘制图表
class ChartPainter extends CustomPainter {
  final List<ChartData> data;
  final ChartType type;

  ChartPainter({required this.data, required this.type});

  @override
  void paint(Canvas canvas, Size size) {
    final Paint paint = Paint()
      ..color = Colors.blue
      ..style = PaintingStyle.fill;

    double barWidth = size.width / data.length;
    double maxHeight = data.map((e) => e.value).reduce((a, b) => math.max(a, b));

    for (int i = 0; i < data.length; i++) {
      final ChartData point = data[i];
      double barHeight = (point.value / maxHeight) * size.height;
      Rect rect = Rect.fromLTWH(i * barWidth, size.height - barHeight, barWidth, barHeight);
      canvas.drawRect(rect, paint);
    }
  }

  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) {
    return false;
  }
}

// 假设ChartType是一个枚举,用于表示图表的类型
enum ChartType {
  bar,
  line,
  pie, // 等等
}

注意:上面的代码是基于假设的chart_it库API编写的。实际上,你可能需要根据实际的图表库API来调整代码。大多数Flutter图表库会提供一个更高级的API来创建和自定义图表,而不是直接使用CustomPaint。例如,fl_chart库提供了丰富的图表组件,你可以直接在其基础上进行配置和自定义。

如果你使用的是另一个具体的图表库(如fl_chart),请参考该库的文档和示例代码来获取更准确的实现方式。

回到顶部