Flutter图表绘制插件phoenix_charts的使用

Flutter图表绘制插件phoenix_charts的使用

特性

phoenix 将作为企业级基础组件:Charts, 提供项目支持。

开始使用

要开始使用 phoenix_charts,首先需要在 pubspec.yaml 文件中添加依赖项。以下是一个示例:

dependencies:
  flutter:
    sdk: flutter
  phoenix_charts: ^1.0.0 # 请根据实际情况选择合适的版本号

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

使用指南

以下是使用 phoenix_charts 的示例代码:

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:phoenix_charts/phoenix_charts.dart';

import 'doughnut_chart.dart';
import 'line/broken_line.dart';
import 'line/chart_entry.dart';
import 'line/db_data_node_model.dart';
import 'progress_bar_chart.dart';
import 'progress_chart.dart';
import 'radar_chat.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  var brokenData = <DBDataNodeModel>[];

  [@override](/user/override)
  void initState() {
    super.initState();
    rootBundle.loadString('assets/brokenline_data.json').then((data) {
      brokenData = <DBDataNodeModel>[]..addAll(
          ((JsonDecoder().convert(data) as List?) ?? [])
              .map((o) => DBDataNodeModel.fromJson(o)));
      setState(() {});
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: RepaintBoundary(
          child: SingleChildScrollView(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              '你已经按下了按钮次数:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
            RadarChartExample(),
            DoughnutChartExample(),
            ProgressBarChartExample(),
            ProgressChartExample(),
            if (brokenData.isNotEmpty) BrokenLineExample(brokenData),
            FunnelChartExample()
          ],
        ),
      )),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: '增加',
        child: const Icon(Icons.add),
      ),
    );
  }
}

雷达图示例

class RadarChartExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return RadarChart(
      data: [
        RadarChartData(
          labels: ['A', 'B', 'C', 'D'],
          datasets: [
            RadarChartDataset(
              label: 'Dataset 1',
              data: [10, 20, 30, 40],
              color: Colors.blue,
            ),
          ],
        ),
      ],
    );
  }
}

圆环图示例

class DoughnutChartExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return DoughnutChart(
      data: [
        DoughnutChartData(
          sections: [
            DoughnutChartSection(
              value: 30,
              label: 'Section A',
              color: Colors.red,
            ),
            DoughnutChartSection(
              value: 70,
              label: 'Section B',
              color: Colors.green,
            ),
          ],
        ),
      ],
    );
  }
}

进度条图示例

class ProgressBarChartExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return ProgressBarChart(
      data: [
        ProgressBarChartData(
          progress: 0.7,
          label: 'Progress Bar',
          color: Colors.orange,
        ),
      ],
    );
  }
}

折线图示例

class BrokenLineExample extends StatelessWidget {
  final List<DBDataNodeModel> data;

  BrokenLineExample(this.data);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return BrokenLineChart(
      data: data.map((item) => ChartEntry(x: item.x, y: item.y)).toList(),
    );
  }
}

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

1 回复

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


phoenix_charts 是一个用于在 Flutter 中绘制图表的插件,提供了丰富的图表类型和高度可定制的选项。以下是如何使用 phoenix_charts 插件的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 phoenix_charts 依赖:

dependencies:
  flutter:
    sdk: flutter
  phoenix_charts: ^last_version # 请使用最新版本

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

2. 导入库

在需要使用 phoenix_charts 的 Dart 文件中导入库:

import 'package:phoenix_charts/phoenix_charts.dart';

3. 创建基本图表

phoenix_charts 支持多种图表类型,例如折线图、柱状图、饼图等。以下是一个简单的折线图示例:

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

class LineChartExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Phoenix Charts Example'),
      ),
      body: Center(
        child: Container(
          height: 300,
          padding: EdgeInsets.all(16),
          child: PhoenixLineChart(
            data: [
              PhoenixLineChartData(
                xAxis: [1, 2, 3, 4, 5],
                yAxis: [10, 20, 15, 25, 30],
                lineColor: Colors.blue,
                lineWidth: 2,
                pointColor: Colors.red,
                pointRadius: 4,
              ),
            ],
            xAxisLabel: 'X Axis',
            yAxisLabel: 'Y Axis',
            chartTitle: 'Sample Line Chart',
          ),
        ),
      ),
    );
  }
}

4. 自定义图表

phoenix_charts 提供了丰富的自定义选项,例如颜色、线宽、点大小、标题等。你可以根据需求调整这些参数。

例如,你可以通过 lineColorlineWidth 自定义线条的颜色和宽度,通过 pointColorpointRadius 自定义点的颜色和大小。

5. 其他图表类型

phoenix_charts 还支持其他类型的图表,例如柱状图、饼图等。你可以使用 PhoenixBarChartPhoenixPieChart 等组件来创建相应的图表。

例如,创建一个柱状图:

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

class BarChartExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Phoenix Bar Chart Example'),
      ),
      body: Center(
        child: Container(
          height: 300,
          padding: EdgeInsets.all(16),
          child: PhoenixBarChart(
            data: [
              PhoenixBarChartData(
                xAxis: ['A', 'B', 'C', 'D', 'E'],
                yAxis: [10, 20, 15, 25, 30],
                barColor: Colors.green,
              ),
            ],
            xAxisLabel: 'Category',
            yAxisLabel: 'Value',
            chartTitle: 'Sample Bar Chart',
          ),
        ),
      ),
    );
  }
}

6. 交互与动画

phoenix_charts 还支持交互和动画效果。你可以通过设置 interactiveanimate 属性来启用这些功能。

例如,启用交互和动画:

PhoenixLineChart(
  data: [
    PhoenixLineChartData(
      xAxis: [1, 2, 3, 4, 5],
      yAxis: [10, 20, 15, 25, 30],
      lineColor: Colors.blue,
      lineWidth: 2,
      pointColor: Colors.red,
      pointRadius: 4,
    ),
  ],
  xAxisLabel: 'X Axis',
  yAxisLabel: 'Y Axis',
  chartTitle: 'Sample Line Chart',
  interactive: true,
  animate: true,
);
回到顶部