Flutter 双纵轴柱图和折线图结合

SfCartesianChart class - charts library - Dart APIhttps://pub.dev/documentation/syncfusion_flutter_charts/latest/charts/SfCartesianChart-class.html?utm_source=pubdev&utm_medium=listing&utm_campaign=flutter-charts-pubdev

pubspec.yaml引用

syncfusion_flutter_charts: ^19.3.56

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_charts/charts.dart';

/**
 * author: flymbp
 * created on: 12/30/21 10:53 AM
 * description:
 */

class TestPage extends StatefulWidget {
  @override
  _TestPageState createState() => _TestPageState();
}

class _TestPageState extends State<TestPage> {
  List<ChartData> uidnumData;
  List<ChartData> ordernumData;
  List<ChartData> paymoneyData;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    uidnumData = [
      ChartData('2021-01', 10),
      ChartData('2021-02', 20),
      ChartData('2021-03', 30),
      ChartData('2021-04', 25)
    ];
    ordernumData = [
      ChartData('2021-01', 15),
      ChartData('2021-02', 40),
      ChartData('2021-03', 35),
      ChartData('2021-04', 50)
    ];
    paymoneyData = [
      ChartData('2021-01', 20000),
      ChartData('2021-02', 40000),
      ChartData('2021-03', 30000),
      ChartData('2021-04', 60000)
    ];
  }

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return SfCartesianChart(
        primaryXAxis: CategoryAxis(
          isVisible: true,
          //显示时间轴置顶
          opposedPosition: false,
          //时间轴反转
          isInversed: false,
          labelRotation: -45,
        ),
        //标题
        title: ChartTitle(text: '活跃客户'),
        //选中类型
        selectionType: SelectionType.series,
        //时间轴与值轴换位
        isTransposed: false,
        //选中手势
        selectionGesture: ActivationMode.singleTap,
        // //图示
        legend: Legend(
            isVisible: true,
            iconHeight: 10,
            iconWidth: 10,
            //切换系列显示
            toggleSeriesVisibility: true,
            //图示显示位置
            position: LegendPosition.bottom,
            overflowMode: LegendItemOverflowMode.wrap,
            //图示左右位置
            alignment: ChartAlignment.center),
        //打开工具提示
        tooltipBehavior: TooltipBehavior(
          enable: true,
          shared: true,
          activationMode: ActivationMode.singleTap,
        ),
        axes: <ChartAxis>[
          NumericAxis(
              name: 'yAxis',
              opposedPosition: true, //在右侧显示
              title: AxisTitle(text: '金额(元)'))
        ],
        series: <ChartSeries<ChartData, String>>[
          ColumnSeries<ChartData, String>(
            name: '人数',
            dataSource: uidnumData,
            xValueMapper: (ChartData sales, _) => sales.x,
            yValueMapper: (ChartData sales, _) => sales.y,
          ),
          ColumnSeries<ChartData, String>(
            name: '订单数',
            dataSource: ordernumData,
            xValueMapper: (ChartData sales, _) => sales.x,
            yValueMapper: (ChartData sales, _) => sales.y,
            //显示数据标签
            dataLabelSettings: DataLabelSettings(
              isVisible: true,
            ),
          ),
          LineSeries<ChartData, String>(
              name: '金额',
              dataSource: paymoneyData,
              xValueMapper: (ChartData sales, _) => sales.x,
              yValueMapper: (ChartData sales, _) => sales.y,
              //修饰数据点(显示圆圈)
              markerSettings: MarkerSettings(isVisible: true),
              yAxisName: 'yAxis'),
        ]);
  }
}

class ChartData {
  ChartData(this.x, this.y, [this.color]);

  final String x;
  final double y;
  final Color color;
}

Flutter syncfusion_flutter_charts 饼图PieSeries使用Flutter syncfusion_flutter_charts 横向条状图BarSeries使用 

Flutter 是一种跨平台的移动应用开发框架,它提供了丰富的组件和功能,可以帮助开发者快速构建漂亮、流畅的用户界面。对于可滑动自动滚动折线图,在 Flutter 中可以使用 `ListView` 和 `AnimatedContainer` 组件来实现。 首先,我们可以使用 `ListView` 组件来创建一个可以滑动的容器。使用 `ListView.builder` 构建一个动态列表,将折线图中的数据作为列表项进行展示。在 `ListView` 内部添加一个 `ScrollController`,用来控制列表的滚动。 当需要自动滚动时,我们可以通过动画来实现。使用 `AnimatedContainer` 组件来包裹折线图,通过修改它的宽度来实现滚动效果。可以在需要的时候,通过调用 `setState` 方法,来更新 `AnimatedContainer` 的属性值,从而触发动画效果。 在滚动时,可以监听滚动的位置,根据当前滚动的位置来判断是否需要自动滚动。通过 `ScrollController` 的 `addListener` 方法监听滚动事件,计算滚动的位置,并进行相应的判断,如果需要自动滚动,就通过修改 `AnimatedContainer` 的属性值来触发动画。 同时,可以为 `AnimatedContainer` 设置合适的动画时长和曲线,来使滚动效果更加顺滑。 总结来说,要实现可滑动自动滚动折线图,可以使用 `ListView` 和 `AnimatedContainer` 组件。通过监听滚动事件,根据滚动的位置进行判断,并通过修改 `AnimatedContainer` 的属性值来触发动画效果,从而实现自动滚动的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值