Flutter图表展示插件deriv_chart的使用

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

Flutter图表展示插件deriv_chart的使用

deriv_chart 是一个专门为Flutter应用程序设计的金融图表库,支持多种图表类型(如蜡烛图、折线图等)、各种技术指标(如RSI、MACD、布林带等)和交互式绘图工具。本文将介绍如何在Flutter应用中使用该插件,并提供一个完整的示例代码。

要求

  • Dart SDK: >=3.0.0 <4.0.0
  • Flutter: >=3.10.1

安装

在项目的 pubspec.yaml 文件中添加以下内容:

dependencies:
  deriv_chart: ^0.3.7

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

使用

首先需要导入库:

import 'package:deriv_chart/deriv_chart.dart';

基本图表

最简单的用法是添加一个蜡烛图:

final candle1 = Candle(
  epoch: DateTime.now(),
  high: 400,
  low: 50,
  open: 200,
  close: 100,
);

final candle2 = Candle(
  epoch: DateTime.now().add(Duration(days: 1)),
  high: 500,
  low: 100,
  open: 100,
  close: 500,
);

final candles = [candle1, candle2];

Chart(
  mainSeries: CandleSeries(candles),
  pipSize: 3, // Y轴显示值的小数位数
  granularity: 60 * 1000, // 烛台周期,以毫秒为单位
);

要显示折线图,可以传递 LineSeries

Chart(
  mainSeries: LineSeries(candles),
  pipSize: 3,
);

样式设置

可以通过 style 参数自定义蜡烛图或折线图的外观:

Chart(
  mainSeries: CandleSeries(
    candles, 
    style: CandleStyle(
        positiveColor: Colors.green, 
        negativeColor: Colors.red
    ),
  ),
  pipSize: 3,
  granularity: 60 * 1000,
);

注释

可以通过 annotations 参数添加水平或垂直障碍线:

Chart(
  mainSeries: LineSeries(candles),
  pipSize: 3,
  annotations: <ChartAnnotation>[
    HorizontalBarrier(98161.950),
    VerticalBarrier(candles.last.epoch, title: 'V Barrier'),
  ],
);

注释的样式也可以自定义:

HorizontalBarrier(
      ...
      style: HorizontalBarrierStyle(
        color: const Color(0xFF00A79E),
        isDashed: false,
      ),
      visibility: HorizontalBarrierVisibility.forceToStayOnRange,
)

技术指标

通过 overlayConfigsbottomConfigs 添加技术指标:

Chart(
  mainSeries: CandleSeries(candles),
  overlayConfigs: [
    BollingerBandsIndicatorConfig(
      period: 20,
      standardDeviation: 2,
      movingAverageType: MovingAverageType.exponential,
      upperLineStyle: LineStyle(color: Colors.purple),
      middleLineStyle: LineStyle(color: Colors.black),
      lowerLineStyle: LineStyle(color: Colors.blue),
    ),
  ],
  bottomConfigs: [
    SMIIndicatorConfig(
      period: 14,
      signalPeriod: 9,
      lineStyle: LineStyle(color: Colors.blue, thickness: 2),
      signalLineStyle: LineStyle(color: Colors.red),
    ),
    RSIIndicatorConfig(
      period: 14,
      lineStyle: LineStyle(
        color: Colors.green,
        thickness: 1,
      ),
      oscillatorLinesConfig: OscillatorLinesConfig(
        overboughtValue: 70,
        oversoldValue: 30,
        overboughtStyle: LineStyle(color: Colors.red),
        oversoldStyle: LineStyle(color: Colors.green),
      ),
      showZones: true,
    ),
  ],
  pipSize: 3,
  granularity: 60 * 1000,
);

示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中集成 deriv_chart 插件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Deriv Chart Example')),
        body: FullscreenChart(),
      ),
    );
  }
}

class FullscreenChart extends StatefulWidget {
  [@override](/user/override)
  _FullscreenChartState createState() => _FullscreenChartState();
}

class _FullscreenChartState extends State<FullscreenChart> {
  final List<Candle> candles = [
    Candle(
      epoch: DateTime.now().millisecondsSinceEpoch,
      high: 150,
      low: 100,
      open: 120,
      close: 130,
    ),
    Candle(
      epoch: DateTime.now().add(Duration(days: 1)).millisecondsSinceEpoch,
      high: 160,
      low: 110,
      open: 125,
      close: 140,
    ),
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return DerivChart(
      mainSeries: CandleSeries(candles),
      pipSize: 3,
      granularity: 60 * 1000,
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter中使用deriv_chart插件来展示图表的代码示例。请注意,deriv_chart插件的具体实现和API可能会根据版本有所不同,因此以下代码是基于假设的API接口编写的。如果deriv_chart插件有特定的文档或示例,请参考其官方文档以获得最准确的用法。

首先,确保在你的pubspec.yaml文件中添加deriv_chart依赖项(假设它已经在pub.dev上发布):

dependencies:
  flutter:
    sdk: flutter
  deriv_chart: ^x.y.z  # 替换为实际的版本号

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

接下来,在你的Flutter应用中创建一个展示图表的页面。以下是一个简单的示例,展示了如何使用deriv_chart插件来绘制一个简单的折线图:

import 'package:flutter/material.dart';
import 'package:deriv_chart/deriv_chart.dart';  // 假设插件的导入路径是这样的

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

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

class ChartScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 准备数据
    final data = [
      ChartDataPoint(x: 1, y: 10),
      ChartDataPoint(x: 2, y: 15),
      ChartDataPoint(x: 3, y: 8),
      ChartDataPoint(x: 4, y: 20),
      ChartDataPoint(x: 5, y: 12),
    ];

    return Scaffold(
      appBar: AppBar(
        title: Text('Deriv Chart Example'),
      ),
      body: Center(
        child: DerivChart(
          data: data,
          type: ChartType.line,  // 假设ChartType是一个枚举,包含line, bar等类型
          config: ChartConfig(
            title: 'Sample Line Chart',
            xAxisLabel: 'X Axis',
            yAxisLabel: 'Y Axis',
            gridLines: true,  // 是否显示网格线
            animationDuration: Duration(milliseconds: 1000),  // 动画持续时间
          ),
        ),
      ),
    );
  }
}

// 假设ChartDataPoint是一个数据模型类
class ChartDataPoint {
  final double x;
  final double y;

  ChartDataPoint({required this.x, required this.y});
}

// 假设ChartConfig是一个配置类
class ChartConfig {
  final String title;
  final String xAxisLabel;
  final String yAxisLabel;
  final bool gridLines;
  final Duration animationDuration;

  ChartConfig({
    required this.title,
    required this.xAxisLabel,
    required this.yAxisLabel,
    this.gridLines = true,
    this.animationDuration = const Duration(milliseconds: 500),
  });
}

// 假设ChartType是一个枚举类
enum ChartType {
  line,
  bar,
  // 可以添加更多类型
}

// 注意:这里的 DerivChart, ChartDataPoint, ChartConfig, ChartType 都是假设的类名和枚举。
// 你需要根据deriv_chart插件的实际API来定义这些类和枚举。

在这个示例中,我们创建了一个简单的折线图,并设置了图表的标题、坐标轴标签、网格线和动画持续时间。请注意,DerivChart, ChartDataPoint, ChartConfig, 和 ChartType 在这里都是假设的类名和枚举,你需要根据deriv_chart插件的实际API文档来定义这些类和枚举。

如果deriv_chart插件没有提供这些类或枚举,你可能需要查看其文档来了解如何正确地定义和使用它们。同时,确保你已经按照插件的文档正确地初始化和配置了插件。

回到顶部