Flutter仪表盘插件another_gauge的使用

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

Flutter仪表盘插件another_gauge的使用

插件简介

another_gauge 是一个为 Flutter 提供的高度可定制化的仪表盘小部件。它允许开发者轻松创建各种类型的仪表盘,适用于速度表、温度计等场景。

安装

pubspec.yaml 文件中添加以下依赖:

dependencies:
  another_gauge: 1.1.0

许可证

该项目采用 BSD 2-Clause 许可证,详情请参阅 LICENSE 文件。

示例图片

GaugeExample-1 GaugeExample-2

完整示例代码

以下是使用 another_gauge 插件的完整示例代码,包含了一个简单的仪表盘和一些交互功能:

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

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

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

  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  // 创建一个 ValueNotifier 来管理仪表盘的值
  ValueNotifier<double> valueNotifier = ValueNotifier(0);
  // 创建一个 ValueNotifier 来管理主刻度线的显示状态
  ValueNotifier<bool> tickNotifier = ValueNotifier(false);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: const Text('AnotherGauge 示例'),
        ),
        body: Column(
          children: [
            // 顶部控制栏
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  const Text('显示主刻度线'),
                  // 切换按钮,用于控制主刻度线的显示
                  StatefulBuilder(builder: (context, setState) {
                    return Switch(
                      value: tickNotifier.value,
                      onChanged: (value) => setState(() => tickNotifier.value = !tickNotifier.value),
                    );
                  }),
                  // 增加按钮,用于增加仪表盘的值
                  ElevatedButton(
                    onPressed: () {
                      valueNotifier.value += 15;
                    },
                    child: const Text('增加'),
                  ),
                  const SizedBox(width: 16),
                  // 减少按钮,用于减少仪表盘的值
                  ElevatedButton(
                    onPressed: () {
                      valueNotifier.value -= 15;
                    },
                    child: const Text('减少'),
                  ),
                ],
              ),
            ),
            // 仪表盘部分
            Expanded(
              child: Padding(
                padding: const EdgeInsets.all(32.0),
                child: ListView(
                  children: [
                    // 仪表盘组件
                    Container(
                      color: Colors.grey[200],
                      child: ValueListenableBuilder(
                        valueListenable: tickNotifier,
                        builder: (context, val, child) {
                          return AnotherGauge(
                            valueNotifier: valueNotifier, // 绑定值
                            capBorderColor: Colors.white, // 仪表盘帽边框颜色
                            capBorderWidth: 10, // 仪表盘帽边框宽度
                            capSize: 80, // 仪表盘帽大小
                            capColor: Colors.white10, // 仪表盘帽颜色
                            faceBorderColor: Colors.blueGrey.shade800, // 表盘边框颜色
                            faceStartColor: Colors.teal, // 表盘起始颜色
                            faceEndColor: Colors.cyan, // 表盘结束颜色
                            faceBorderWidth: 15, // 表盘边框宽度
                            subTicksColor: Colors.white, // 次刻度线颜色
                            needleColor: Colors.white, // 指针颜色
                            showMainTickValue: tickNotifier.value, // 是否显示主刻度线
                            mainTicksColor: Colors.white, // 主刻度线颜色
                            rangeNeedleColor: true, // 是否根据范围改变指针颜色
                            frameAngle: 0, // 表盘框架角度
                            frameColor: Colors.blueGrey.shade600, // 表盘框架颜色
                            segmentWidth: 15, // 表盘分段宽度
                            showFrame: false, // 是否显示表盘框架
                            gaugeSize: 350, // 仪表盘大小
                            needleStartAngle: 135, // 指针起始角度
                            needleSweepAngle: 270, // 指针扫过的角度
                            ranges: [
                              GaugeRange(Colors.green), // 绿色范围
                              GaugeRange(Colors.orange), // 橙色范围
                              GaugeRange(Colors.red), // 红色范围
                            ],
                            valuePadding: const EdgeInsets.only(bottom: 90), // 值的内边距
                            valueSymbol: 'km/h', // 值的单位
                            valueFontColor: Colors.white, // 值的颜色
                            displayWidget: const Padding(
                              padding: EdgeInsets.only(top: 36.0),
                              child: Text(
                                'Speed',
                                style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.bold),
                              ),
                            ),
                            minValue: 0, // 最小值
                            maxValue: 280, // 最大值
                            mainTicksStep: 20, // 主刻度线的步长
                          );
                        },
                      ),
                    ),
                  ],
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用another_gauge插件来创建一个仪表盘的示例代码。

首先,确保你已经在pubspec.yaml文件中添加了another_gauge依赖:

dependencies:
  flutter:
    sdk: flutter
  another_gauge: ^最新版本号  # 请替换为当前最新版本号

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

接下来,在你的Flutter项目中,你可以按照以下步骤使用another_gauge插件:

  1. 导入依赖

在你的Dart文件中导入another_gauge包:

import 'package:another_gauge/another_gauge.dart';
  1. 创建仪表盘

在你的build方法中或者合适的位置创建并配置仪表盘。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Gauge Example'),
        ),
        body: Center(
          child: GaugeExample(),
        ),
      ),
    );
  }
}

class GaugeExample extends StatefulWidget {
  @override
  _GaugeExampleState createState() => _GaugeExampleState();
}

class _GaugeExampleState extends State<GaugeExample> with SingleTickerProviderStateMixin {
  double _value = 50.0;

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        SizedBox(
          width: 300,
          height: 300,
          child: AnotherGauge(
            value: _value,
            minValue: 0,
            maxValue: 100,
            needleColor: Colors.blue,
            needleCircleColor: Colors.grey,
            backgroundColor: Colors.white,
            ringWidth: 30.0,
            needleWidth: 5.0,
            needleCircleSize: 10.0,
            centerText: Text(
              '$_value',
              style: TextStyle(fontSize: 30, color: Colors.black),
            ),
          ),
        ),
        SizedBox(height: 20),
        Slider(
          value: _value,
          min: 0,
          max: 100,
          onChanged: (newValue) {
            setState(() {
              _value = newValue;
            });
          },
        ),
      ],
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个仪表盘和一个滑块。滑块用于调整仪表盘的值,并且仪表盘会根据滑块的值动态更新。

  • AnotherGauge组件接收多个参数,如value(当前值)、minValuemaxValue(最小值和最大值)、needleColor(指针颜色)、needleCircleColor(指针底部圆圈颜色)、backgroundColor(背景颜色)、ringWidth(圆环宽度)、needleWidth(指针宽度)、needleCircleSize(指针底部圆圈大小)等。
  • centerText属性允许你在仪表盘中心显示当前值。

运行这个应用,你将看到一个可以交互的仪表盘,滑块的值会实时反映在仪表盘上。

这个示例提供了一个基础的使用方式,你可以根据实际需求进一步自定义和扩展仪表盘的功能和样式。

回到顶部