Flutter最强大的图表库fl_chart的使用

简介: Flutter最强大的图表库fl_chart的使用

简介

fl_chartFlutter中功能最全、最强大的图表库。在flutter中的地位相当于前端的echarts、android端的MPAndroidChart

支持常见的LineChart(折线图)、BarChart(柱状图)、PieChart(饼图)。

库地址:https://pub-web.flutter-io.cn/packages/fl_chart

简单使用

库文档提供了详细的api说明,但是太过形式主义,全是对参数的说明。

没有每种图的简单使用,只提供了例子代码,需要自己去看,对不熟悉的人非常不友好!

以下是我经过使用后整理出来的最快速使用的说明。

折线图

柱状图

  _buildBarChart() {
    return BarChart(
      BarChartData(
        /// 格式线样子设置
        gridData: FlGridData(
          /// 是否隐藏垂直线
          drawVerticalLine: false,

          /// 水平线的间隔值
          horizontalInterval: 10,

          /// 水平线样式
          getDrawingHorizontalLine: (v) {
            return FlLine(
              color: Color(0xffe5e5e5),
              strokeWidth: 1,
            );
          },
        ),

        /// 边框样式
        borderData: FlBorderData(
            border: const Border(
          top: BorderSide(width: 1),
          right: BorderSide(width: 1),
          left: BorderSide(width: 1),
          bottom: BorderSide(width: 1),
        )),

        /// y轴最大值,从0开始
        maxY: maxYValue,

        /// Bar的数据集合及样式
        barGroups: _generateBar(values),

        /// 只有在alignment为center时,groupsSpace才生效。否则会按宽度平分。
        groupsSpace: 30,

        alignment: BarChartAlignment.center,

        /// 上下左右标题设置
        titlesData: FlTitlesData(
          show: true,
          /// 左侧标题
          leftTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)),
          /// 顶部标题
          topTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)),
          /// 底部标题
          bottomTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)),
          /// 右侧标题
          rightTitles: AxisTitles(
              sideTitles: SideTitles(
                  /// 是否显示标题
                  showTitles: true,

                  /// 标题宽度
                  reservedSize: rightTitleWidth,

                  /// 标题间隔
                  interval: 10,
                  /// 返回标题Widget
                  getTitlesWidget: (y, meta) {
                    return SideTitleWidget(
                      child: LayoutBuilder(
                        builder: (ctx, constraint) {
                          return SizedBox(
                            width: constraint.maxWidth,
                            child: CommonWidget.commonText(
                              "${y.toInt() - 120}dBm",
                              fontSize: 8,
                              fontWeight: FontWeight.bold,
                              color: Color(titleColor),
                              textAlign: TextAlign.center,
                            ),
                          );
                        },
                      ),
                      axisSide: meta.axisSide,
                      space: 0,
                    );
                  })),
        ),
        /// 点击bar时显示的内容
        barTouchData: BarTouchData(
          touchTooltipData: BarTouchTooltipData(
              getTooltipItem: (group, groupIndex, rod, rodIndex) {
            final textStyle = TextStyle(
              color: rod.color,
              fontWeight: FontWeight.bold,
              fontSize: 14,
            );
            return BarTooltipItem(
                (rod.toY - 120).toInt().toString(), textStyle);
          }),
        ),
      ),
    );
  }

  _generateBar(List<SingleBandModel> list) {
    var bars = list<BarChartGroupData>.generate(5,(index) {
      /// 每个bar的数据
      return BarChartGroupData(
        /// bar的x坐标
        x: index,
        /// 支持多组bar
        barRods: [
          BarChartRodData(
            /// y轴最小值
            fromY: 0,
            /// y轴值
            toY: y,
            /// bar的宽度
            width: 20,
            /// bar颜色
            color: progressColor,
            /// 渐变色。如果设置了渐变,color会失效。
      gradient: LinearGradient(),
            /// 总进度条
            backDrawRodData: BackgroundBarChartRodData(
                show: true, color: Color(0xffe5e5e5), toY: 80),
          ),
        ],
      );
    }).toList();
    return bars;
  }


饼图

相关文章
|
10月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
944 4
|
Dart 测试技术 开发工具
了解 Flutter 的 Timer 类和 Timer.periodic【Flutter 专题 19】
在构建移动应用程序时,我们经常会遇到必须在一定时间后执行任务的场景。还记得在进入应用程序之前看到闪亮的启动画面吗? 或者我们可能需要一段代码在一段时间后重复执行,比如显示剩余时间限制以填充一次性密码或每秒更改小部件的颜色以创建漂亮的动画。
5850 0
|
存储 缓存 JavaScript
Flutter笔记:关于WebView插件的用法(上)
Flutter笔记:关于WebView插件的用法(上)
3574 5
|
前端开发
Flutter快速实现自定义折线图,支持数据改变过渡动画
Flutter快速实现自定义折线图,支持数据改变过渡动画
291 4
Flutter快速实现自定义折线图,支持数据改变过渡动画
|
Dart IDE 开发工具
Flutter Version Manager (FVM): Flutter的版本管理终极指南
Flutter Version Manager (FVM): Flutter的版本管理终极指南
4566 1
|
iOS开发 索引
flutter中好用的Widget-CupertinoPicker
flutter中好用的Widget-CupertinoPicker
654 0
|
JSON Dart 测试技术
Flutter中高级JSON处理:使用json_serializable进行深入定制
Flutter中高级JSON处理:使用json_serializable进行深入定制
1922 3
|
10月前
|
小程序
Flutter CustomScrollView 效果-顶栏透明与标签栏吸顶
Flutter CustomScrollView 效果-顶栏透明与标签栏吸顶
|
Dart JavaScript 前端开发
Dart或Flutter中解决异常-type ‘int‘ is not a subtype of type ‘double‘
Dart或Flutter中解决异常-type ‘int‘ is not a subtype of type ‘double‘
421 4
解决Flutter报错The named parameter |method ‘xxxx‘ isn‘t defined.
解决Flutter报错The named parameter |method ‘xxxx‘ isn‘t defined.
602 3