Flutter仪表盘显示插件gauges的使用

Flutter仪表盘显示插件gauges的使用

注意: 本项目旨在通过构建自定义的WidgetElementRenderObject来帮助我更好地理解Flutter的工作原理。因此,API可能会频繁变动,并且对于许多问题可能没有最佳实践或最优解决方案。如果你有任何改进建议,请随时提交一个issue。

开始使用

要使用此插件,请在你的pubspec.yaml文件中添加flutter_gauges作为依赖项。

dependencies:
  flutter_gauges: ^x.y.z

使用方法

环形仪表盘

环形仪表盘的基本组件是RadialGauge。你可以添加多个axes(轴)。例如,下面是一个具有三个轴的仪表盘:

这是RadialGauge的基本结构。接下来的部分将详细介绍每个组件。

RadialGauge(
  axes: [
    RadialGaugeAxis(
        segments: [
            RadialGaugeSegment(),
            RadialGaugeSegment(),
            // ...
        ],
        pointers: [
            RadialNeedlePointer(),
            RadialNeedlePointer(),
            // ...
        ],
        ticks: [
            RadialTicks(
                children: [
                    RadialTick(),
                    RadialTick(),
                ],
            ),
            RadialTick(),
            // ...
    ),
    RadialGaugeAxis(
    ),
  ],
)

轴具有一些重要的属性:

  • min: 轴的最小值。
  • max: 轴的最大值。
  • minAngle: 最小值映射到的角度(度)。
  • maxAngle: 最大值映射到的角度(度)。
  • radius: 轴的半径,以仪表盘大小为单位。
  • width: 轴的宽度,以仪表盘大小为单位。
  • offset: 轴相对于仪表盘中心的偏移量。
  • color: 轴的颜色(支持渐变)。

以下是一个示例:

RadialGauge(
  axes: [
    RadialGaugeAxis(
      minValue: -100,
      maxValue: 100,
      minAngle: -150,
      maxAngle: 150,
      radius: 0.6,
      width: 0.2,
    ),
  ],
)

每个轴可以由多个段组成。每个段具有与轴类似的属性。段在轴的segments属性中列出:

RadialGauge(
  axes: [
    RadialGaugeAxis(
      color: Colors.transparent,
      // ...
      segments: [
        RadialGaugeSegment(
          minValue: 0, 
          maxValue: 20, 
          minAngle: -150, 
          maxAngle: -130,
          color: Colors.red,
        ),
        RadialGaugeSegment(
          minValue: 20, 
          maxValue: 40, 
          minAngle: -120, 
          maxAngle: -90,
          color: Colors.orange,
        ),
          // ...
      ],
    ),
  ],
)
刻度

每个轴可以有多个刻度,类型为RadialTick。刻度在轴的ticks属性中列出。创建刻度的方法有多种:

  • 间隔: 设置间隔为所需的值。刻度会出现在每个整数倍的间隔上。
  • 刻度之间: 设置ticksInBetween为所需数量的刻度,位于父刻度或轴的限制之间。
  • 自定义值: 设置values为所需的值,使刻度出现在这些位置。
  • 自定义生成器: 设置valuesBuilder和/或anglesBuilder为计算刻度应显示的值和/或角度的自定义函数。

每个RadialTick可以有RadialTicks作为子元素,当设置子刻度的ticksInBetween时特别有用。

RadialGaugeAxis(
  // ...
  color: Colors.transparent,
  ticks: [
    RadialTicks(
        interval: 20,
        alignment: RadialTickAxisAlignment.inside,
        color: Colors.blue,
        length: 0.2,
        children: [
          RadialTicks(
              ticksInBetween: 5,
              length: 0.1,
              color: Colors.grey[500]),
        ])
  ],
)
指针

每个轴可以有多个指针。目前,只有一种类型的指针可用,即RadialNeedlePointer,具有以下属性:

  • value: 指针指向的值。
  • ticknessStart: 指针开始处的厚度(在轴的中间)。
  • ticknessEnd: 指针结束处的厚度。
  • length: 指针的长度,以轴的大小为单位。
  • knobRadiusAbsolute: 指针旋钮的绝对半径(以像素为单位)。
  • color/gradient: 指针填充的颜色/渐变。

以下代码示例展示了一个指针:

RadialGaugeAxis(
    pointers: [
        RadialNeedlePointer(
            value: _pointerValue,
            thicknessStart: 20,
            thicknessEnd: 0,
            length: 0.6,
            knobRadiusAbsolute: 10,
            gradient: LinearGradient(...),
        )
    ],
)

维护者

Julian Aßmann


完整示例代码

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Gauges Demo',
      theme: ThemeData(
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  double _pointerValue = 50;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Gauges Demo'),
      ),
      body: Center(
        child: RadialGauge(
          axes: [
            RadialGaugeAxis(
              minValue: 0,
              maxValue: 100,
              minAngle: -150,
              maxAngle: 150,
              radius: 0.8,
              width: 0.2,
              color: Colors.grey,
              segments: [
                RadialGaugeSegment(
                  minValue: 0,
                  maxValue: 25,
                  minAngle: -150,
                  maxAngle: -120,
                  color: Colors.green,
                ),
                RadialGaugeSegment(
                  minValue: 25,
                  maxValue: 75,
                  minAngle: -120,
                  maxAngle: -60,
                  color: Colors.yellow,
                ),
                RadialGaugeSegment(
                  minValue: 75,
                  maxValue: 100,
                  minAngle: -60,
                  maxAngle: 0,
                  color: Colors.red,
                ),
              ],
              ticks: [
                RadialTicks(
                  interval: 25,
                  color: Colors.black,
                  length: 0.1,
                ),
              ],
              pointers: [
                RadialNeedlePointer(
                  value: _pointerValue,
                  thicknessStart: 20,
                  thicknessEnd: 0,
                  length: 0.6,
                  knobRadiusAbsolute: 10,
                  gradient: LinearGradient(
                    begin: Alignment.topCenter,
                    end: Alignment.bottomCenter,
                    colors: [Colors.blue, Colors.indigo],
                  ),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter仪表盘显示插件gauges的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,下面是一个关于如何在Flutter中使用gauges插件来显示仪表盘的示例代码。gauges插件通常用于显示类似汽车仪表盘或速度计的UI组件。这里假设你已经有一个Flutter项目,并且已经添加了gauges依赖。

首先,确保在pubspec.yaml文件中添加gauges依赖:

dependencies:
  flutter:
    sdk: flutter
  gauges: ^latest_version  # 替换为最新版本号

然后运行flutter pub get来获取依赖。

接下来,在你的Dart文件中使用gauges插件。以下是一个简单的示例,展示如何创建一个基本的仪表盘:

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

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

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

class GaugeScreen extends StatefulWidget {
  @override
  _GaugeScreenState createState() => _GaugeScreenState();
}

class _GaugeScreenState extends State<GaugeScreen> with SingleTickerProviderStateMixin {
  double _value = 50.0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Gauges Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            SizedBox(
              height: 300,
              child: RadialGauge(
                value: _value,
                minValue: 0,
                maxValue: 100,
                needleColor: Colors.blue,
                ringColor: Colors.grey.shade300,
                centerWidget: Text(
                  '$_value',
                  style: TextStyle(fontSize: 32, color: Colors.black),
                ),
                onValueChanged: (newValue) {
                  setState(() {
                    _value = newValue;
                  });
                },
              ),
            ),
            SizedBox(height: 20),
            Slider(
              value: _value.toDouble(),
              min: 0,
              max: 100,
              onChanged: (newValue) {
                setState(() {
                  _value = newValue;
                });
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 导入必要的包:导入flutter/material.dartgauges/gauges.dart
  2. 定义主应用MyApp是一个无状态组件,定义了应用的主题和主页。
  3. 定义仪表盘屏幕GaugeScreen是一个有状态组件,用于管理仪表盘的值。
  4. 创建仪表盘:使用RadialGauge小部件创建一个径向仪表盘,显示当前值,并允许用户通过滑块调整值。

RadialGauge的参数说明:

  • value:当前仪表盘的值。
  • minValuemaxValue:仪表盘的最小值和最大值。
  • needleColor:指针的颜色。
  • ringColor:仪表盘环的颜色。
  • centerWidget:仪表盘中心的显示内容。
  • onValueChanged:当仪表盘值变化时的回调函数。

此代码创建了一个简单的界面,包含一个径向仪表盘和一个滑块,滑块用于调整仪表盘的值。当用户拖动滑块时,仪表盘的值会实时更新。

你可以根据需要进一步自定义和扩展仪表盘,比如改变颜色、添加刻度线、自定义动画效果等。希望这个示例对你有所帮助!

回到顶部