Flutter图表绘制插件flutter_charts的使用

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

Flutter图表绘制插件 flutter_charts 的使用

简介

flutter_charts 是一个用于在Flutter应用中绘制图表的插件。它支持多种类型的图表,如折线图和垂直柱状图,并提供了丰富的自定义选项。

安装

要将 flutter_charts 作为库包安装到您的应用程序中,请按照以下步骤操作:

  1. pubspec.yaml 文件中添加依赖项:

    dependencies:
      flutter_charts: ^0.5.0
    
  2. 运行 flutter pub get 命令以下载并安装该库。

  3. 导入库并在您的代码中使用它:

    import 'package:flutter_charts/flutter_charts.dart';
    

示例代码

以下是一个完整的示例,展示了如何在Flutter应用程序中使用 flutter_charts 来绘制折线图和垂直柱状图。

主文件 main.dart

import 'package:flutter/material.dart';
import 'package:flutter_charts/flutter_charts.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 Charts Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Charts Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Widget chartToRun = createRandomDataLineChart();

  void _chartStateChanger() {
    setState(() {
      chartToRun = createRandomDataLineChart();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          children: <Widget>[
            ElevatedButton(
              onPressed: _chartStateChanger,
              child: const Text('New Random Data'),
            ),
            Expanded(
              child: Row(
                crossAxisAlignment: CrossAxisAlignment.stretch,
                children: [
                  const Text('>>>'),
                  Expanded(child: chartToRun),
                  const Text('<<<'),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }

  Widget createRandomDataLineChart() {
    ChartData chartData = RandomChartData.generated(chartOptions: const ChartOptions());

    LineChartTopContainer lineChartContainer = LineChartTopContainer(
      chartData: chartData,
    );

    return LineChart(
      painter: LineChartPainter(
        lineChartContainer: lineChartContainer,
      ),
    );
  }
}

创建随机数据折线图

Widget createRandomDataLineChart() {
  ChartData chartData = RandomChartData.generated(chartOptions: const ChartOptions());

  LineChartTopContainer lineChartContainer = LineChartTopContainer(
    chartData: chartData,
  );

  return LineChart(
    painter: LineChartPainter(
      lineChartContainer: lineChartContainer,
    ),
  );
}

创建随机数据垂直柱状图

Widget createRandomDataVerticalBarChart() {
  ChartData chartData = RandomChartData.generated(chartOptions: const ChartOptions());

  VerticalBarChartTopContainer verticalBarChartContainer = VerticalBarChartTopContainer(
    chartData: chartData,
  );

  return VerticalBarChart(
    painter: VerticalBarChartPainter(
      verticalBarChartContainer: verticalBarChartContainer,
    ),
  );
}

创建带有标签布局策略的季节动物图表(折线图)

Widget createAnimalsBySeasonWithLabelLayoutStrategyLineChart() {
  LabelLayoutStrategy? xContainerLabelLayoutStrategy;
  ChartData chartData;
  ChartOptions chartOptions = const ChartOptions();

  xContainerLabelLayoutStrategy = DefaultIterativeLabelLayoutStrategy(
    options: chartOptions,
  );

  chartData = ChartData(
    dataRows: const [
      [10.0, 20.0, 5.0, 30.0, 5.0, 20.0],
      [30.0, 60.0, 16.0, 100.0, 12.0, 120.0],
      [25.0, 40.0, 20.0, 80.0, 12.0, 90.0],
      [12.0, 30.0, 18.0, 40.0, 10.0, 30.0],
    ],
    xUserLabels: const ['Wolf', 'Deer', 'Owl', 'Mouse', 'Hawk', 'Vole'],
    dataRowsLegends: const [
      'Spring',
      'Summer',
      'Fall',
      'Winter',
    ],
    chartOptions: chartOptions,
  );

  LineChartTopContainer lineChartContainer = LineChartTopContainer(
    chartData: chartData,
    xContainerLabelLayoutStrategy: xContainerLabelLayoutStrategy,
  );

  return LineChart(
    painter: LineChartPainter(
      lineChartContainer: lineChartContainer,
    ),
  );
}

创建带有负值的图表(折线图)

Widget createSomeNegativeValuesLineChart() {
  ChartData chartData;
  ChartOptions chartOptions = const ChartOptions();

  chartData = ChartData(
    dataRows: const [
      [2000.0, 1800.0, 2200.0, 2300.0, 1700.0, 1800.0],
      [1100.0, 1000.0, 1200.0, 800.0, 700.0, 800.0],
      [0.0, 100.0, -200.0, 150.0, -100.0, -150.0],
      [-800.0, -400.0, -300.0, -400.0, -200.0, -250.0],
    ],
    xUserLabels: const ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
    dataRowsLegends: const [
      'Big Corp',
      'Medium Corp',
      'Print Shop',
      'Bar',
    ],
    chartOptions: chartOptions,
  );

  LineChartTopContainer lineChartContainer = LineChartTopContainer(
    chartData: chartData,
  );

  return LineChart(
    painter: LineChartPainter(
      lineChartContainer: lineChartContainer,
    ),
  );
}

结论

通过上述示例,您可以快速上手使用 flutter_charts 插件来创建各种类型的图表。根据您的需求,您可以进一步自定义图表的数据、样式和布局策略。希望这些示例对您有所帮助!


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

1 回复

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


当然,以下是一个使用 flutter_charts(假设你指的是 fl_chart,因为 flutter_charts 并不是一个广泛认知的官方或流行的 Flutter 图表库,而 fl_chart 是一个流行的 Flutter 图表库)绘制简单柱状图的示例代码。

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

dependencies:
  flutter:
    sdk: flutter
  fl_chart: ^0.40.0  # 请检查最新版本号

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

接下来,在你的 Dart 文件中,你可以使用以下代码来绘制一个简单的柱状图:

import 'package:flutter/material.dart';
import 'package:fl_chart/fl_chart.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: BarChartScreen(),
    );
  }
}

class BarChartScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Bar Chart Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: BarChart(
          BarChartData(
            alignment: BarChartAlignment.spaceAround,
            maxY: 20,
            titlesData: FlTitlesData(
              leftTitles: SideTitles(showTitles: true),
              bottomTitles: SideTitles(
                showTitles: true,
                getTitles: (double value) {
                  switch (value.toInt()) {
                    case 0:
                      return 'A';
                    case 1:
                      return 'B';
                    case 2:
                      return 'C';
                    case 3:
                      return 'D';
                    default:
                      return '';
                  }
                },
              ),
            ),
            borderData: FlBorderData(
              show: false,
            ),
            barTouchData: BarTouchData(enabled: true),
            barGroups: [
              BarChartGroupData(
                x: 0,
                barRods: [
                  BarChartRodData(
                    y: 12,
                    colors: [Colors.blue],
                  ),
                ],
                showingTooltipIndicators: [0],
              ),
              BarChartGroupData(
                x: 1,
                barRods: [
                  BarChartRodData(
                    y: 5,
                    colors: [Colors.red],
                  ),
                ],
              ),
              BarChartGroupData(
                x: 2,
                barRods: [
                  BarChartRodData(
                    y: 18,
                    colors: [Colors.green],
                  ),
                ],
              ),
              BarChartGroupData(
                x: 3,
                barRods: [
                  BarChartRodData(
                    y: 7,
                    colors: [Colors.orange],
                  ),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}

这个示例代码展示了如何使用 fl_chart 库来绘制一个简单的柱状图。以下是一些关键点:

  • BarChart 是用于绘制柱状图的组件。
  • BarChartData 是包含柱状图所有数据的类。
  • titlesData 用于定义柱状图的左侧和底部标题。
  • barGroups 包含了柱状图的各个组数据,每个组可以包含多个柱状条。
  • BarChartRodData 定义了单个柱状条的数据,包括其高度和颜色。

你可以根据需要调整这些参数来自定义你的柱状图。如果你想要绘制其他类型的图表,如折线图、饼图等,fl_chart 库也提供了相应的组件和数据类。

回到顶部