Flutter实时图表绘制插件real_time_chart的使用

Flutter实时图表绘制插件real_time_chart的使用

Real-time Chart 是一个用于显示带有灵活自定义选项的实时图表的Flutter包。

实时图表示例

特性

  • 在图表上显示实时数据
  • 支持负值
  • 根据最大值自动调整高度
  • 可自定义颜色、轴标签和网格线

入门指南

要使用这个包,请在 pubspec.yaml 文件中添加 real_time_chart 作为依赖项。

dependencies:
  real_time_chart: ^0.0.1

使用方法

要显示实时图表,可以使用 RealTimeChart 小部件。以下是代码中的使用示例:

import 'package:real_time_chart/real_time_chart.dart';
import 'dart:math';

class RealTimeChartExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return RealTimeChart(
      stream: positiveDataStream(), // 数据流
      graphColor: Colors.red,       // 图表颜色
    );
  }
}

Stream<double> positiveDataStream() {
  return Stream.periodic(const Duration(milliseconds: 500), (_) {
    return Random().nextInt(300).toDouble(); // 每500毫秒生成一个随机数
  }).asBroadcastStream();
}

额外信息

该包提供了一种简单的解决方案,以图形格式显示实时数据。它支持正负值,并根据最大值自动调整图表的高度。

如果在使用包时遇到任何问题或错误,可以在issue tracker中提交问题。我们致力于快速且有帮助地回应任何问题或疑虑。

如果您希望为该包的发展做出贡献,我们欢迎拉取请求和其他任何形式的贡献。您的帮助和支持非常感谢!

完整示例Demo

以下是一个完整的示例程序,展示了如何在Flutter应用中使用 RealTimeGraph 小部件。

import 'dart:math';
import 'package:flutter/material.dart';
import 'package:real_time_chart/real_time_chart.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: '实时图表演示',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: '实时图表演示'),
    );
  }
}

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final stream = positiveDataStream();

    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: SizedBox(
        width: double.maxFinite,
        child: SingleChildScrollView(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              // 显示正数数据的实时图表
              SizedBox(
                width: MediaQuery.of(context).size.width,
                height: MediaQuery.of(context).size.width * 0.8,
                child: Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: RealTimeGraph(
                    stream: stream, // 数据流
                  ),
                ),
              ),

              // 显示点状正数数据的实时图表
              const SizedBox(height: 32),
              SizedBox(
                width: MediaQuery.of(context).size.width,
                height: MediaQuery.of(context).size.width * 0.8,
                child: Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: RealTimeGraph(
                    stream: stream,
                    displayMode: ChartDisplay.points, // 点状显示模式
                  ),
                ),
              ),

              // 显示包含负值的实时图表
              const SizedBox(height: 32),
              const Padding(
                padding: EdgeInsets.all(16.0),
                child: Text(
                  '支持负值:',
                ),
              ),
              SizedBox(
                width: MediaQuery.of(context).size.width,
                height: MediaQuery.of(context).size.width * 0.8,
                child: Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: RealTimeGraph(
                    stream: stream.map((value) => value - 150), // 调整值使其包含负数
                    supportNegativeValuesDisplay: true, // 支持负值显示
                    xAxisColor: Colors.black12, // X轴颜色
                  ),
                ),
              ),

              // 显示点状包含负值的实时图表
              SizedBox(
                width: MediaQuery.of(context).size.width,
                height: MediaQuery.of(context).size.width * 0.8,
                child: Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: RealTimeGraph(
                    stream: stream.map((value) => value - 150),
                    supportNegativeValuesDisplay: true,
                    displayMode: ChartDisplay.points, // 点状显示模式
                    xAxisColor: Colors.black12,
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Stream<double> positiveDataStream() {
    return Stream.periodic(const Duration(milliseconds: 500), (_) {
      return Random().nextInt(300).toDouble(); // 每500毫秒生成一个随机数
    }).asBroadcastStream();
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter中使用real_time_chart插件来绘制实时图表的示例代码。

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

dependencies:
  flutter:
    sdk: flutter
  real_time_chart: ^最新版本号  # 请替换为实际的最新版本号

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

接下来,你可以在你的Flutter应用中创建一个实时图表。以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Real Time Chart Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: RealTimeChartPage(),
    );
  }
}

class RealTimeChartPage extends StatefulWidget {
  @override
  _RealTimeChartPageState createState() => _RealTimeChartPageState();
}

class _RealTimeChartPageState extends State<RealTimeChartPage> {
  RealTimeChartController _chartController;
  List<RealTimeChartData> _dataList = [];

  @override
  void initState() {
    super.initState();
    _chartController = RealTimeChartController(
      axisX: AxisXData(
        max: 100,
        step: 1,
      ),
      axisY: AxisYData(
        max: 100,
        step: 10,
      ),
      grid: GridData(
        isShow: true,
      ),
      animationDuration: Duration(milliseconds: 300),
    );

    // 模拟实时数据
    Timer.periodic(Duration(milliseconds: 1000), (timer) {
      int newValue = _dataList.length + 1;
      _dataList.add(RealTimeChartData(x: newValue, y: newValue.toDouble()));
      if (_dataList.length > 100) {
        _dataList.removeAt(0);
      }
      _chartController.updateData(_dataList);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Real Time Chart Example'),
      ),
      body: Center(
        child: RealTimeChart(
          controller: _chartController,
        ),
      ),
    );
  }

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

代码说明:

  1. 依赖添加:在pubspec.yaml文件中添加real_time_chart依赖。
  2. 创建应用:创建一个简单的Flutter应用,包含一个主页面RealTimeChartPage
  3. 初始化图表控制器:在RealTimeChartPageinitState方法中,初始化RealTimeChartController,并设置X轴和Y轴的最大值、步长以及网格的显示。
  4. 模拟实时数据:使用Timer.periodic方法每秒生成一个新的数据点,并将其添加到_dataList列表中。如果数据点超过100个,则移除最早的数据点,以保持图表数据的实时更新。
  5. 更新图表数据:使用_chartController.updateData(_dataList)方法更新图表数据。
  6. 构建图表:在build方法中,使用RealTimeChart小部件显示图表。
  7. 释放资源:在dispose方法中释放_chartController资源。

这样,你就可以在Flutter应用中实现一个简单的实时图表绘制功能。如果需要更多高级功能,请参考real_time_chart插件的官方文档。

回到顶部