序章

charts_flutter ライブラリは、「Dartでネイティブに作成されたマテリアルデザインデータ視覚化ライブラリ」です。 Flutterアプリケーションでこのライブラリを使用して、データを棒グラフ、折れ線グラフ、散布図グラフ、円グラフなどとして表示できます。

この記事では、2008年から2015年までのWorld of Warcraftの加入者数のデータを使用し、charts_flutterを使用して棒グラフとして表示します。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • Flutterをダウンロードしてインストールするには。
  • Android StudioまたはVisual StudioCodeをダウンロードしてインストールするには。
  • コードエディタ用のプラグインをインストールすることをお勧めします。 AndroidStudio用にインストールされたFlutterおよびDartプラグイン。 VisualStudioCode用にインストールされたFlutter拡張機能。

このチュートリアルは、Flutter v1.22.2、Android SDK v31.0.2、およびAndroidStudiov4.1で検証されました。

ステップ1—プロジェクトの設定

Flutter用に環境を設定したら、次のコマンドを実行して新しいアプリケーションを作成できます。

  1. flutter create charts_flutter_example

新しいプロジェクトディレクトリに移動します。

  1. cd charts_flutter_example

flutter createを使用すると、ボタンがクリックされた回数を表示するデモアプリケーションが作成されます。

ステップ2—charts_flutterプラグインを追加する

次に、pubspec.yaml内にcharts_flutterプラグインを追加する必要があります。

pubspec.yaml
dependencies:
  flutter:
    sdk: flutter

  charts_flutter: ^0.10.0

これで、iOSまたはAndroidシミュレーター、または選択したデバイスでこれを実行できます。

ステップ3—アプリケーションの足場

次に、コードエディタでmain.dartを開きます。

このファイルのすべてを、home.dartにあるHomePageを指すMaterialAppに置き換えます。

lib / main.dart
import 'package:flutter/material.dart';
import 'package:charts_flutter_example/home.dart';

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

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: HomePage(),
    );
  }
}

次に、新しいhome.dartファイルを作成し、次のコード行を追加します。

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

class HomePage extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.red,
        title: Text("World of Warcraft Subscribers"),
      ),
      body: Center(
        child: Text("charts_flutter_example"),
      ),
    );
  }
}

基本アプリケーションを確立したので、先に進んで棒グラフデータのモデルを作成できます。

ステップ4—サブスクライバーモデルの構築

私たちの棒グラフは、特定の年のWorldofWarcraftのサブスクライバーの数を示すことに焦点を当てます。

次に、新しいsubscriber_series.dartファイルを作成し、次のコード行を追加します。

lib /subscriber_series.dart
import 'package:flutter/foundation.dart';
import 'package:charts_flutter/flutter.dart' as charts;

class SubscriberSeries {
  final String year;
  final int subscribers;
  final charts.Color barColor;

  SubscriberSeries(
    {
       this.year,
       this.subscribers,
       this.barColor
    }
  );
}

これにより、yearおよびsubscribersのデータを表すことができます。

ステップ5—データの作成

このチュートリアルのために、データはHomePage内にList<SubscriberSeries>として作成されます。

home.dartに再度アクセスし、次のコード行を追加します。

lib / home.dart
import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;
import 'package:charts_flutter_example/subscriber_series.dart';

class HomePage extends StatelessWidget {
  final List<SubscriberSeries> data = [
    SubscriberSeries(
      year: "2008",
      subscribers: 10000000,
      barColor: charts.ColorUtil.fromDartColor(Colors.blue),
    ),
    SubscriberSeries(
      year: "2009",
      subscribers: 11000000,
      barColor: charts.ColorUtil.fromDartColor(Colors.blue),
    ),
    SubscriberSeries(
      year: "2010",
      subscribers: 12000000,
      barColor: charts.ColorUtil.fromDartColor(Colors.blue),
    ),
    SubscriberSeries(
      year: "2011",
      subscribers: 10000000,
      barColor: charts.ColorUtil.fromDartColor(Colors.blue),
    ),
    SubscriberSeries(
      year: "2012",
      subscribers: 8500000,
      barColor: charts.ColorUtil.fromDartColor(Colors.blue),
    ),
    SubscriberSeries(
      year: "2013",
      subscribers: 7700000,
      barColor: charts.ColorUtil.fromDartColor(Colors.blue),
    ),
    SubscriberSeries(
      year: "2014",
      subscribers: 7600000,
      barColor: charts.ColorUtil.fromDartColor(Colors.blue),
    ),
    SubscriberSeries(
      year: "2015",
      subscribers: 5500000,
      barColor: charts.ColorUtil.fromDartColor(Colors.red),
    ),
  ];

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.red,
        title: Text("World of Warcraft Subscribers"),
      ),
      body: Center(
        child: Text("charts_flutter_example"),
      ),
    );
  }
}

データを取得したので、必要なのは棒グラフを作成することだけです。

ステップ6—棒グラフを作成する

次に、新しいsubscriber_chart.dartファイルを作成し、次のコード行を追加します。

lib /subscriber_chart.dart
import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;
import 'package:charts_flutter_example/subscriber_series.dart';

class SubscriberChart extends StatelessWidget {
  final List<SubscriberSeries> data;

  SubscriberChart({ this.data});
}

このコードは、SubscriberSeriespropとして取り込むSubscriberChartという名前の新しいStatelessWidgetを作成します。

次に、このdataを使用して、次のようにcharts.Seriesを構築できます。

lib /subscriber_chart.dart
import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;
import 'package:charts_flutter_example/subscriber_series.dart';

class SubscriberChart extends StatelessWidget {
  final List<SubscriberSeries> data;

  SubscriberChart({ this.data});

  
  Widget build(BuildContext context) {
    List<charts.Series<SubscriberSeries, String>> series = [
      charts.Series(
        id: "Subscribers",
        data: data,
        domainFn: (SubscriberSeries series, _) => series.year,
        measureFn: (SubscriberSeries series, _) => series.subscribers,
        colorFn: (SubscriberSeries series, _) => series.barColor
      )
    ];
  }
}

domainFnmeasureFnは、そのyearsubscribersデータを比較するために使用されます。

また、colorFnを使用して、barColorを渡す可能性があります。

home.dartbarColorをどのように使用したかを思い出してください。

SubscriberSeries(
  year: "2008",
  subscribers: 10000000,
  barColor: charts.ColorUtil.fromDartColor(Colors.blue),
),

実稼働アプリケーションでは、barColorをオプションにし、デフォルトでColors.blue(または選択した色)にすることができます。 このチュートリアルでは、1つのバーが赤に、他のバーが青に色付けされます。

build関数を更新して、チャートを返しましょう。

lib /subscriber_chart.dart
import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;
import 'package:charts_flutter_example/subscriber_series.dart';

class SubscriberChart extends StatelessWidget {
  final List<SubscriberSeries> data;

  SubscriberChart({ this.data});

  
  Widget build(BuildContext context) {
    List<charts.Series<SubscriberSeries, String>> series = [
      charts.Series(
        id: "Subscribers",
        data: data,
        domainFn: (SubscriberSeries series, _) => series.year,
        measureFn: (SubscriberSeries series, _) => series.subscribers,
        colorFn: (SubscriberSeries series, _) => series.barColor
      )
    ];

    return Container(
      height: 400,
      padding: EdgeInsets.all(20),
      child: Card(
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: Column(
            children: <Widget>[
              Text(
                "World of Warcraft Subscribers by Year",
                style: Theme.of(context).textTheme.body2,
              ),
              Expanded(
                child: charts.BarChart(series, animate: true),
              )
            ],
          ),
        ),
      ),
    );
  }
}

このコードは、Cardで囲むことにより、charts.BarChartにマークアップを追加します。

注意すべき重要な点は、seriesrequiredパラメーターとしてcharts.BarChartに渡すことです。

charts.BarChart(series, animate: true)

この時点で、データとグラフを使用する準備が整いました。

ステップ7—チャートの表示

最後に、コードエディタでhome.dartに再度アクセスし、buildSubscriberChartを使用するように変更します。

lib / home.dart
import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;
import 'package:charts_flutter_example/subscriber_series.dart';
import 'package:charts_flutter_example/subscriber_chart.dart';

class HomePage extends StatelessWidget {
  // ...

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.red,
        title: Text("World of Warcraft Subscribers"),
      ),
      body: Center(
        child: SubscriberChart(
          data: data,
        )
      ),
    );
  }
}

変更を保存し、シミュレーターでアプリケーションを実行します。

Screenshot of Bar Chart running in an iOS simulator.

これで、アプリケーションはcharts_flutterを使用してデータを棒グラフとして表示します。

結論

この記事では、2008年から2015年までのWorld of Warcraftの加入者数のデータを使用し、charts_flutterを使用して棒グラフとして表示しました。

Flutterについて詳しく知りたい場合は、Flutterトピックページで演習とプログラミングプロジェクトを確認してください。