Flutter动画图表插件fl_animated_linechart的使用

Flutter动画图表插件 fl_animated_linechart 的使用

fl_animated_linechart 是一个用于Flutter的动画图表库,支持多种功能如日期时间轴、多Y轴、高亮选择、动画效果、图例添加等。本文将介绍如何在Flutter项目中使用该插件,并提供完整的示例代码。

主要特性

  • 支持日期时间轴
  • 多个Y轴,支持不同单位
  • 高亮选择
  • 图表动画
  • 添加图例的可能性
  • 支持水平和垂直标记线
  • 测试超过3000个点的数据仍表现良好

支持的图表类型

  • 折线图
  • 区域图

使用步骤

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

dependencies:
  fl_animated_linechart: ^1.0.0

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

接下来,您可以按照以下示例创建一个包含折线图的应用程序。

示例代码

基础折线图

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    // 创建一些示例数据
    Map<DateTime, double> line1 = {
      DateTime(2023, 1, 1): 50,
      DateTime(2023, 1, 2): 60,
      DateTime(2023, 1, 3): 70,
      DateTime(2023, 1, 4): 80,
      DateTime(2023, 1, 5): 90,
    };

    Map<DateTime, double> line2 = {
      DateTime(2023, 1, 1): 40,
      DateTime(2023, 1, 2): 50,
      DateTime(2023, 1, 3): 60,
      DateTime(2023, 1, 4): 70,
      DateTime(2023, 1, 5): 80,
    };

    LineChart lineChart = LineChart.fromDateTimeMaps([line1, line2], [Colors.green, Colors.blue]);

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('基础折线图')),
        body: Container(
          child: Column(
            children: [
              Expanded(
                child: AnimatedLineChart(lineChart),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

带有标记线和图例的折线图

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    Map<DateTime, double> line1 = {
      DateTime(2023, 1, 1): 50,
      DateTime(2023, 1, 2): 60,
      DateTime(2023, 1, 3): 70,
      DateTime(2023, 1, 4): 80,
      DateTime(2023, 1, 5): 90,
    };

    LineChart lineChart = LineChart.fromDateTimeMaps([line1], [Colors.blue], ['C'], tapTextFontWeight: FontWeight.w400);

    lineChart.lines[0].isMarkerLine = true;

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('带有标记线和图例的折线图')),
        body: Container(
          child: Column(
            children: [
              Expanded(
                child: AnimatedLineChart(
                  lineChart,
                  toolTipColor: Colors.white,
                  gridColor: Colors.black54,
                  textStyle: TextStyle(fontSize: 10, color: Colors.black54),
                  showMarkerLines: true,
                  legends: [
                    Legend(title: 'Critical', color: Colors.red, showLeadingLine: true),
                    Legend(title: 'Warning', color: Colors.yellow, icon: Icon(Icons.report_problem_rounded, size: 17, color: Colors.yellow)),
                  ],
                  legendsRightLandscapeMode: true,
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

带有水平和垂直标记线、图标以及图例的折线图

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    Map<DateTime, double> line1 = {
      DateTime(2023, 1, 1): 50,
      DateTime(2023, 1, 2): 60,
      DateTime(2023, 1, 3): 70,
      DateTime(2023, 1, 4): 80,
      DateTime(2023, 1, 5): 90,
    };

    LineChart lineChart = LineChart.fromDateTimeMaps([line1], [Colors.blue], ['C'], tapTextFontWeight: FontWeight.w400);

    lineChart.lines[0].isMarkerLine = true;

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('带有水平和垂直标记线、图标及图例的折线图')),
        body: Container(
          child: Column(
            children: [
              Expanded(
                child: AnimatedLineChart(
                  lineChart,
                  toolTipColor: Colors.white,
                  gridColor: Colors.black54,
                  textStyle: TextStyle(fontSize: 10, color: Colors.black54),
                  showMarkerLines: true,
                  legends: [
                    Legend(title: 'Critical', color: Colors.red),
                    Legend(title: 'Warning', color: Colors.yellow),
                  ],
                  verticalMarker: [
                    DateTime.parse('2023-01-03 12:00:00'),
                    DateTime.parse('2023-01-04 12:00:00')
                  ],
                  verticalMarkerColor: Colors.yellow,
                  verticalMarkerIcon: [
                    Icon(Icons.cancel_rounded, color: Colors.red),
                    Icon(Icons.check_circle_rounded, color: Colors.green),
                  ],
                  iconBackgroundColor: Colors.white,
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何使用 fl_animated_linechart 插件在 Flutter 中创建动画图表的示例代码。fl_animated_linechart 是一个流行的 Flutter 插件,用于创建流畅的动画折线图。

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

dependencies:
  flutter:
    sdk: flutter
  fl_animated_linechart: ^x.y.z  # 请替换为最新版本号

然后,运行 flutter pub get 以获取依赖项。

接下来,创建一个 Flutter 应用并在其中使用 fl_animated_linechart。以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Animated Line Chart Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: LineChartScreen(),
    );
  }
}

class LineChartScreen extends StatefulWidget {
  @override
  _LineChartScreenState createState() => _LineChartScreenState();
}

class _LineChartScreenState extends State<LineChartScreen> with SingleTickerProviderStateMixin {
  late AnimationController _controller;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      duration: const Duration(seconds: 5),
      vsync: this,
    )..repeat(reverse: true);
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    final lineData = FlLineData(
      title: 'Sample Line Chart',
      linePoints: [
        FlPointData(x: 0, y: 5),
        FlPointData(x: 1, y: 15),
        FlPointData(x: 2, y: 7),
        FlPointData(x: 3, y: 18),
        FlPointData(x: 4, y: 12),
        FlPointData(x: 5, y: 20),
        FlPointData(x: 6, y: 3),
        FlPointData(x: 7, y: 17),
      ],
      belowLinePointColor: Colors.redAccent,
      aboveLinePointColor: Colors.greenAccent,
      animationDuration: _controller,
    );

    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Animated Line Chart'),
      ),
      body: Center(
        child: FlAnimatedLineChart(
          data: lineData,
          width: 300,
          height: 200,
        ),
      ),
    );
  }
}

代码解释:

  1. 依赖项:确保在 pubspec.yaml 中添加了 fl_animated_linechart 依赖项。
  2. 导入包:在 Dart 文件中导入 fl_animated_linechart 包。
  3. 创建主应用:使用 MaterialApp 创建一个基本的 Flutter 应用。
  4. 创建主屏幕LineChartScreen 是一个有状态的组件,它持有动画控制器 _controller
  5. 初始化动画控制器:在 initState 方法中初始化动画控制器,并设置动画时长和循环。
  6. 释放资源:在 dispose 方法中释放动画控制器资源。
  7. 构建 UI:使用 FlAnimatedLineChart 组件显示动画折线图,并传入 FlLineData 数据。

FlLineData 类用于定义折线图的数据,包括标题、数据点、数据点颜色以及动画时长。

运行这个示例代码,你将看到一个动画折线图,数据点会根据动画控制器的节奏在图表上平滑移动。你可以根据需要调整数据点和动画参数,以满足具体需求。

回到顶部