Flutter图表绘制插件charts_common_sa的使用

Flutter图表绘制插件charts_common_sa的使用

Common Charting Library

pub package

charts_common_sa 是一个用于在 Flutter 应用中绘制图表的库。通过该库,你可以轻松地创建各种类型的图表,如折线图、柱状图等。

开发

此项目是在 Google 内部开发并发布的,目前不接受外部贡献。

示例代码

以下是一个简单的示例,展示如何使用 charts_common_sa 插件在 Flutter 中绘制折线图。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Charts Example'),
        ),
        body: Center(
          child: SimpleLineChart.withSampleData(),
        ),
      ),
    );
  }
}

/// 创建一个简单的折线图
class SimpleLineChart extends StatelessWidget {
  final List<charts.Series> seriesList;
  final bool animate;

  SimpleLineChart(this.seriesList, {this.animate});

  /// 在这里创建你的数据
  factory SimpleLineChart.withSampleData() {
    return new SimpleLineChart(
      _createSampleData(),
      // 设置为 true 以启用动画效果
      animate: false,
    );
  }

  @override
  Widget build(BuildContext context) {
    return new charts.LineChart(
      seriesList,
      // 配置图表的其他属性
      animate: animate,
    );
  }

  /// 创建折线图的数据源
  static List<charts.Series<LinearSales, int>> _createSampleData() {
    final data = [
      LinearSales(0, 10),
      LinearSales(1, 5),
      LinearSales(2, 15),
      LinearSales(3, 20),
      LinearSales(4, 10),
      LinearSales(5, 20),
      LinearSales(6, 15),
      LinearSales(7, 10),
    ];

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

/// 定义数据模型
class LinearSales {
  final int year;
  final int sales;

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

代码解释

  • 导入必要的包

    import 'package:flutter/material.dart';
    import 'package:charts_flutter/flutter.dart' as charts;
    
  • 定义主应用

    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: Text('Charts Example'),
            ),
            body: Center(
              child: SimpleLineChart.withSampleData(),
            ),
          ),
        );
      }
    }
    
  • 定义折线图组件

    class SimpleLineChart extends StatelessWidget {
      final List<charts.Series> seriesList;
      final bool animate;
    
      SimpleLineChart(this.seriesList, {this.animate});
    
      factory SimpleLineChart.withSampleData() {
        return new SimpleLineChart(
          _createSampleData(),
          animate: false,
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return new charts.LineChart(
          seriesList,
          animate: animate,
        );
      }
    
      static List<charts.Series<LinearSales, int>> _createSampleData() {
        final data = [
          LinearSales(0, 10),
          LinearSales(1, 5),
          LinearSales(2, 15),
          LinearSales(3, 20),
          LinearSales(4, 10),
          LinearSales(5, 20),
          LinearSales(6, 15),
          LinearSales(7, 10),
        ];
    
        return [
          new charts.Series<LinearSales, int>(
            id: 'Sales',
            colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
            domainFn: (LinearSales sales, _) => sales.year,
            measureFn: (LinearSales sales, _) => sales.sales,
            data: data,
          )
        ];
      }
    }
    
  • 定义数据模型

    class LinearSales {
      final int year;
      final int sales;
    
      LinearSales(this.year, this.sales);
    }
    

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

1 回复

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


charts_common_sa 是一个用于在 Flutter 中绘制图表的库。它提供了丰富的图表类型和自定义选项,可以帮助开发者轻松地创建各种数据可视化图表。以下是使用 charts_common_sa 的基本步骤和示例。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  charts_common_sa: ^latest_version

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

2. 导入库

在需要使用图表的地方导入库:

import 'package:charts_common_sa/charts.dart';

3. 创建数据模型

为了绘制图表,首先需要定义数据模型。通常,您需要创建一个包含数据和标签的类。

class SalesData {
  final String year;
  final int sales;

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

4. 准备数据

接下来,准备要显示的数据。例如:

final data = [
  SalesData('2017', 35),
  SalesData('2018', 75),
  SalesData('2019', 25),
  SalesData('2020', 100),
];

5. 创建图表

使用 charts_common_sa 创建图表。以下是一个简单的柱状图示例:

BarChart(
  _createSampleData(),
  animate: true,
  domainAxis: OrdinalAxisSpec(
    renderSpec: SmallTickRendererSpec(
      labelRotation: 45, // Rotate labels for better readability
    ),
  ),
  primaryMeasureAxis: NumericAxisSpec(
    renderSpec: GridlineRendererSpec(
      labelStyle: TextStyleSpec(
        color: ColorUtil.fromDartColor(Colors.black),
      ),
    ),
  ),
);

6. 创建数据系列

为了将数据传递给图表,需要创建一个 Series 对象:

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

7. 完整示例

以下是一个完整的 Flutter 应用示例,展示如何使用 charts_common_sa 绘制柱状图:

import 'package:flutter/material.dart';
import 'package:charts_common_sa/charts.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Charts Example'),
        ),
        body: Center(
          child: Container(
            height: 300,
            child: BarChart(
              _createSampleData(),
              animate: true,
              domainAxis: OrdinalAxisSpec(
                renderSpec: SmallTickRendererSpec(
                  labelRotation: 45,
                ),
              ),
              primaryMeasureAxis: NumericAxisSpec(
                renderSpec: GridlineRendererSpec(
                  labelStyle: TextStyleSpec(
                    color: ColorUtil.fromDartColor(Colors.black),
                  ),
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }

  List<Series<SalesData, String>> _createSampleData() {
    final data = [
      SalesData('2017', 35),
      SalesData('2018', 75),
      SalesData('2019', 25),
      SalesData('2020', 100),
    ];

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

class SalesData {
  final String year;
  final int sales;

  SalesData(this.year, this.sales);
}
回到顶部