Flutter图表绘制插件charts_flutter_new的使用

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

Flutter图表绘制插件charts_flutter_new的使用

charts_flutter_new 是一个用 Dart 编写的 Material Design 数据可视化库。它可以让你在 Flutter 应用程序中轻松创建各种图表。

支持的图表

支持的图表类型可以在 在线画廊 中查看。

使用该库

charts_flutter_new 的示例代码可以在 GitHub 仓库的 /example/ 文件夹中找到。

示例代码

以下是一个简单的示例,展示了如何在 Flutter 应用程序中使用 charts_flutter_new 插件来创建一个基本的柱状图。

// Copyright 2018 the Charts project authors. Please see the AUTHORS file
// for details.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import 'package:flutter/material.dart';
import 'app_config.dart';
import 'home.dart';

/// 主应用组件。
class GalleryApp extends StatefulWidget {
  GalleryApp({Key? key}) : super(key: key);

  @override
  GalleryAppState createState() => new GalleryAppState();
}

/// 主应用状态。
///
/// 控制性能覆盖,并实例化一个 [Home] 组件。
class GalleryAppState extends State<GalleryApp> {
  // 初始化应用设置。
  bool _showPerformanceOverlay = defaultConfig.showPerformanceOverlay;

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
        title: defaultConfig.appName,
        theme: defaultConfig.theme,
        showPerformanceOverlay: _showPerformanceOverlay,
        home: new Home(
          showPerformanceOverlay: _showPerformanceOverlay,
          onShowPerformanceOverlayChanged: (bool value) {
            setState(() {
              _showPerformanceOverlay = value;
            });
          },
        ));
  }
}

void main() {
  runApp(new GalleryApp());
}

具体图表绘制示例

接下来展示一个具体的柱状图绘制示例:

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

class SimpleBarChart extends StatelessWidget {
  final List<charts.Series<OrdinalSales, String>> seriesList;
  final bool animate;

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

  /// Creates a [BarChart] with sample data and no transition.
  factory SimpleBarChart.withSampleData() {
    return new SimpleBarChart(
      _createSampleData(),
      // Disable animations for image tests.
      animate: false,
    );
  }

  @override
  Widget build(BuildContext context) {
    return new charts.BarChart(
      seriesList,
      animate: animate,
    );
  }

  /// Create one series with sample hard coded data.
  static List<charts.Series<OrdinalSales, String>> _createSampleData() {
    final desktopSalesData = [
      new OrdinalSales('2014', 5),
      new OrdinalSales('2015', 25),
      new OrdinalSales('2016', 100),
      new OrdinalSales('2017', 75),
    ];

    final tableSalesData = [
      new OrdinalSales('2014', 25),
      new OrdinalSales('2015', 50),
      new OrdinalSales('2016', 75),
      new OrdinalSales('2017', 100),
    ];

    final mobileSalesData = [
      new OrdinalSales('2014', 10),
      new OrdinalSales('2015', 15),
      new OrdinalSales('2016', 50),
      new OrdinalSales('2017', 20),
    ];

    return [
      new charts.Series<OrdinalSales, String>(
        id: 'Desktop',
        domainFn: (OrdinalSales sales, _) => sales.year,
        measureFn: (OrdinalSales sales, _) => sales.sales,
        data: desktopSalesData,
      ),
      new charts.Series<OrdinalSales, String>(
        id: 'Tablet',
        domainFn: (OrdinalSales sales, _) => sales.year,
        measureFn: (OrdinalSales sales, _) => sales.sales,
        data: tableSalesData,
      ),
      new charts.Series<OrdinalSales, String>(
        id: 'Mobile',
        domainFn: (OrdinalSales sales, _) => sales.year,
        measureFn: (OrdinalSales sales, _) => sales.sales,
        data: mobileSalesData,
      )
    ];
  }
}

/// Sample ordinal data type.
class OrdinalSales {
  final String year;
  final int sales;

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

在这个示例中,我们定义了一个 SimpleBarChart 类,它接受一系列数据并生成一个柱状图。我们通过 _createSampleData 方法创建了三个系列的数据,每个系列代表不同设备类型的销售数据。BarChart 将这些数据渲染为柱状图。

运行示例

将上述代码添加到你的 Flutter 应用程序中,并确保你已经将 charts_flutter_new 添加到你的 pubspec.yaml 文件中:

dependencies:
  flutter:
    sdk: flutter
  charts_flutter_new: ^0.12.0

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

1 回复

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


当然,以下是如何在Flutter应用中使用charts_flutter_new(假设你指的是Google的charts_flutter包,因为charts_flutter_new并不是官方包名,但用法类似)来绘制简单图表的代码案例。

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

dependencies:
  flutter:
    sdk: flutter
  charts_flutter: ^0.12.0  # 请检查最新版本号

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

接下来是一个简单的例子,演示如何使用charts_flutter包绘制一个柱状图(Bar Chart)。

main.dart

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(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Charts Demo'),
    );
  }
}

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    List<charts.Series<MyData, String>> seriesList = _createSampleData();

    var chart = charts.BarChart(
      seriesList,
      animate: true,
      barGroupingType: charts.BarGroupingType.grouped,
    );

    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Container(
          child: chart,
          width: 800,
          height: 400,
        ),
      ),
    );
  }

  List<charts.Series<MyData, String>> _createSampleData() {
    final data = [
      MyData('2023-10-01', 5),
      MyData('2023-10-02', 15),
      MyData('2023-10-03', 25),
      MyData('2023-10-04', 35),
      MyData('2023-10-05', 45),
    ];

    return [
      charts.Series<MyData, String>(
        id: 'Sales',
        domainFn: (MyData sales, _) => sales.dateTime,
        measureFn: (MyData sales, _) => sales.sales,
        data: data,
      ),
    ];
  }
}

class MyData {
  final String dateTime;
  final int sales;

  MyData(this.dateTime, this.sales);
}

解释

  1. 依赖管理:在pubspec.yaml中添加charts_flutter依赖。
  2. 数据模型:创建一个MyData类来表示每个数据点,包含日期(作为字符串)和销售数量(作为整数)。
  3. 数据生成:在_createSampleData方法中,创建一个包含示例数据的列表。
  4. 图表配置:使用charts.Series配置数据系列,包括数据的ID、域函数(用于提取X轴值)、度量函数(用于提取Y轴值)和数据列表。
  5. 图表构建:使用charts.BarChart构建柱状图,并指定动画和分组类型。
  6. 布局:将图表放置在Scaffoldbody中,并使用Container指定图表的宽度和高度。

运行这个代码,你应该会看到一个简单的柱状图,展示了连续几天的销售数据。

请注意,charts_flutter包可能会更新,因此确保查阅最新的文档和示例以适应任何API更改。

回到顶部