Flutter图表展示插件bar_graph的使用

Flutter图表展示插件bar_graph的使用

在Flutter中,展示数据的图表是一个常见的需求。bar_graph 是一个简单易用的插件,可以帮助开发者快速创建自定义样式的柱状图。本文将详细介绍如何使用 bar_graph 插件来展示数据。


功能概述

bar_graph 插件的主要功能包括:

  • 支持自定义UI样式。
  • 可以展示简单的数据。
  • 提供高度可配置的选项。

使用步骤

1. 设置图表的高度

默认情况下,图表的高度占屏幕高度的60%。用户可以通过设置参数来自定义高度。

// 默认高度
MediaQuery.of(context).size.height * 0.6

// 自定义高度
graphHeight: 300.0 // 用户输入的高度

2. 准备图表数据

bar_graph 需要以下四个主要数据:

  • List<GraphModel>:用于绘制柱状图的数据。
  • double:图表中最大的值。
  • Color:背景颜色。
  • Color:文本颜色。

定义 GraphModel

GraphModel 包含三个字段:

  • dateData:日期或标签数据(字符串)。
  • valueData:数值数据(双精度浮点数)。
  • colorData:数据的颜色(Color)。

示例代码:

class GraphModel {
  final String dateData; // 日期或标签
  final double valueData; // 数值
  final Color colorData;  // 数据颜色

  GraphModel({required this.dateData, required this.valueData, required this.colorData});
}

// 初始化数据列表
List<GraphModel> graphModelList = [];
graphModelList.add(
  GraphModel(
    dateData: "07-02", // 标签
    valueData: 9,      // 数值
    colorData: Colors.cyan, // 颜色
  ),
);

3. 获取最大值

为了正确绘制图表,需要计算出数据中的最大值。

double largestData = 0;

for (var item in graphModelList) {
  var itemValue = item.valueData;
  if (itemValue > largestData) {
    largestData = itemValue; // 更新最大值
  }
}

4. 使用 BarGraph 组件

通过 BarGraph 组件将数据展示为柱状图。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Bar Graph Example')),
        body: BarGraphExample(),
      ),
    );
  }
}

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

class _BarGraphExampleState extends State<BarGraphExample> {
  late List<GraphModel> graphModelList;
  late double largestData;

  [@override](/user/override)
  void initState() {
    super.initState();

    // 初始化数据
    graphModelList = [
      GraphModel(dateData: "07-02", valueData: 9, colorData: Colors.cyan),
      GraphModel(dateData: "07-03", valueData: 15, colorData: Colors.green),
      GraphModel(dateData: "07-04", valueData: 12, colorData: Colors.orange),
      GraphModel(dateData: "07-05", valueData: 8, colorData: Colors.red),
    ];

    // 计算最大值
    largestData = 0;
    for (var item in graphModelList) {
      if (item.valueData > largestData) {
        largestData = item.valueData;
      }
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Center(
      child: BarGraph(
        graphData: graphModelList, // 数据源
        largestValue: largestData, // 最大值
        backgroundColor: Colors.black, // 背景颜色
        textColor: Colors.white,       // 文本颜色
        graphHeight: 300.0,           // 图表高度
      ),
    );
  }
}
1 回复

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


在 Flutter 中,bar_graph 并不是一个官方的或者广泛使用的图表库。你可能指的是 charts_flutter(由 Google 开发)或者其他类似的图表库,比如 fl_chart。以下是如何使用 charts_flutterfl_chart 来展示条形图的示例。

1. 使用 charts_flutter 展示条形图

添加依赖

首先,在 pubspec.yaml 文件中添加 charts_flutter 依赖:

dependencies:
  flutter:
    sdk: flutter
  charts_flutter: ^0.12.0

创建条形图

import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;

class BarChartPage extends StatelessWidget {
  final List<charts.Series> seriesList;
  final bool animate;

  BarChartPage(this.seriesList, {this.animate = false});

  factory BarChartPage.withSampleData() {
    return BarChartPage(
      _createSampleData(),
      animate: true,
    );
  }

  static List<charts.Series<OrdinalSales, String>> _createSampleData() {
    final data = [
      OrdinalSales('2017', 5),
      OrdinalSales('2018', 25),
      OrdinalSales('2019', 100),
      OrdinalSales('2020', 75),
    ];

    return [
      charts.Series<OrdinalSales, String>(
        id: 'Sales',
        colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
        domainFn: (OrdinalSales sales, _) => sales.year,
        measureFn: (OrdinalSales sales, _) => sales.sales,
        data: data,
      )
    ];
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Bar Chart'),
      ),
      body: Center(
        child: Container(
          height: 300,
          padding: EdgeInsets.all(20),
          child: charts.BarChart(
            seriesList,
            animate: animate,
          ),
        ),
      ),
    );
  }
}

class OrdinalSales {
  final String year;
  final int sales;

  OrdinalSales(this.year, this.sales);
}

使用 BarChartPage

void main() {
  runApp(MaterialApp(
    home: BarChartPage.withSampleData(),
  ));
}

2. 使用 fl_chart 展示条形图

添加依赖

首先,在 pubspec.yaml 文件中添加 fl_chart 依赖:

dependencies:
  flutter:
    sdk: flutter
  fl_chart: ^0.55.1

创建条形图

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

class BarChartPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Bar Chart'),
      ),
      body: Center(
        child: Container(
          height: 300,
          padding: EdgeInsets.all(20),
          child: BarChart(
            BarChartData(
              alignment: BarChartAlignment.spaceAround,
              maxY: 100,
              barTouchData: BarTouchData(enabled: false),
              titlesData: FlTitlesData(
                show: true,
                bottomTitles: SideTitles(
                  showTitles: true,
                  getTextStyles: (context, value) => const TextStyle(
                    color: Colors.black,
                    fontSize: 12,
                  ),
                  getTitles: (double value) {
                    switch (value.toInt()) {
                      case 0:
                        return '2017';
                      case 1:
                        return '2018';
                      case 2:
                        return '2019';
                      case 3:
                        return '2020';
                      default:
                        return '';
                    }
                  },
                ),
                leftTitles: SideTitles(
                  showTitles: true,
                  getTextStyles: (context, value) => const TextStyle(
                    color: Colors.black,
                    fontSize: 12,
                  ),
                  getTitles: (double value) {
                    return value.toInt().toString();
                  },
                ),
              ),
              borderData: FlBorderData(show: false),
              barGroups: [
                BarChartGroupData(
                  x: 0,
                  barRods: [
                    BarChartRodData(y: 5, colors: [Colors.blue]),
                  ],
                ),
                BarChartGroupData(
                  x: 1,
                  barRods: [
                    BarChartRodData(y: 25, colors: [Colors.blue]),
                  ],
                ),
                BarChartGroupData(
                  x: 2,
                  barRods: [
                    BarChartRodData(y: 100, colors: [Colors.blue]),
                  ],
                ),
                BarChartGroupData(
                  x: 3,
                  barRods: [
                    BarChartRodData(y: 75, colors: [Colors.blue]),
                  ],
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

使用 BarChartPage

void main() {
  runApp(MaterialApp(
    home: BarChartPage(),
  ));
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!