Flutter热力图日历插件flutter_heatmap_calendar的使用

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

Flutter热力图日历插件flutter_heatmap_calendar的使用

Flutter Heatmap Calendar 是一个受 GitHub 贡献图表启发的日历插件,它提供了两种类型的热力图:传统的贡献图表HeatMap和日历版本的HeatMapCalendar。本文将详细介绍如何使用这个插件,并提供完整的示例代码。

开始使用

依赖安装

通过以下命令添加依赖:

flutter pub add flutter_heatmap_calendar

或者在pubspec.yaml中添加:

dependencies:
  flutter_heatmap_calendar: ^1.0.5

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

导入包

在Dart文件中导入包:

import 'package:flutter_heatmap_calendar/flutter_heatmap_calendar.dart';

属性说明

HeatMap

属性 类型 默认值 描述
startDate DateTime? 结束日期前一年 热力图的开始日期
endDate DateTime? 当前日期 热力图的结束日期
datasets Map<DateTime, int>? null 要显示的数据集
colorsets Map<int, Color> 必填 颜色阈值映射
defaultColor Color? #F8F9FA 每个块的默认颜色
textColor Color? #8A8A8A 文本颜色
colorMode ColorMode ColorMode.opacity 颜色模式,支持opacitycolor
size double? 20 每个块的大小
fontSize double? null 文本大小
onClick Function(DateTime)? null 单击事件回调
margin EdgeInsets? EdgeInsets.all(2) 块的边距
borderRadius double? 5 圆角半径
scrollable bool false 是否可滚动
showText bool? false 是否显示每天的文本
showColorTip bool? true 是否显示颜色提示
colorTipHelper List<Widget?>? null 颜色提示左右两侧的自定义组件
colorTipCount int? 7 颜色提示的长度
colorTipSize double? 10 颜色提示的大小

HeatMapCalendar

属性 类型 默认值 描述
initDate DateTime? 当前日期 初始化的日历年份/月份
datasets Map<DateTime, int>? null 要显示的数据集
colorsets Map<int, Color> 必填 颜色阈值映射
defaultColor Color? #F8F9FA 每个块的默认颜色
textColor Color? #8A8A8A 文本颜色
colorMode ColorMode ColorMode.opacity 颜色模式,支持opacitycolor
size double? 42 每个块的大小
fontSize double? null 文本大小
monthFontSize double? 12 月份标签大小
weekFontSize double? 12 星期标签大小
weekTextColor Color? #758EA1 星期标签颜色
onClick Function(DateTime)? null 单击事件回调
margin EdgeInsets EdgeInsets.all(2) 块的边距
borderRadius double? 5 圆角半径
flexible bool? false 是否动态适应屏幕尺寸
showColorTip bool? true 是否显示颜色提示
colorTipHelper List<Widget?>? null 颜色提示左右两侧的自定义组件
colorTipCount int? 7 颜色提示的长度
colorTipSize double? 10 颜色提示的大小

示例代码

HeatMap 示例

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('HeatMap Example')),
        body: Center(
          child: HeatMap(
            datasets: {
              DateTime(2021, 1, 6): 3,
              DateTime(2021, 1, 7): 7,
              DateTime(2021, 1, 8): 10,
              DateTime(2021, 1, 9): 13,
              DateTime(2021, 1, 13): 6,
            },
            colorMode: ColorMode.opacity,
            showText: false,
            scrollable: true,
            colorsets: {
              1: Colors.red,
              3: Colors.orange,
              5: Colors.yellow,
              7: Colors.green,
              9: Colors.blue,
              11: Colors.indigo,
              13: Colors.purple,
            },
            onClick: (value) {
              ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(value.toString())));
            },
          ),
        ),
      ),
    );
  }
}

HeatMapCalendar 示例

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('HeatMapCalendar Example')),
        body: Center(
          child: HeatMapCalendar(
            defaultColor: Colors.white,
            flexible: true,
            colorMode: ColorMode.color,
            datasets: {
              DateTime(2021, 1, 6): 3,
              DateTime(2021, 1, 7): 7,
              DateTime(2021, 1, 8): 10,
              DateTime(2021, 1, 9): 13,
              DateTime(2021, 1, 13): 6,
            },
            colorsets: const {
              1: Colors.red,
              3: Colors.orange,
              5: Colors.yellow,
              7: Colors.green,
              9: Colors.blue,
              11: Colors.indigo,
              13: Colors.purple,
            },
            onClick: (value) {
              ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(value.toString())));
            },
          ),
        ),
      ),
    );
  }
}

以上是关于flutter_heatmap_calendar插件的详细使用方法及示例代码。希望对您有所帮助!如果您有任何问题或需要进一步的帮助,请随时提问。


更多关于Flutter热力图日历插件flutter_heatmap_calendar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter热力图日历插件flutter_heatmap_calendar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter应用中使用flutter_heatmap_calendar插件的示例代码。这个插件允许你创建一个热力图日历,非常适合展示日期相关的数据密度或频率。

首先,你需要在pubspec.yaml文件中添加flutter_heatmap_calendar依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_heatmap_calendar: ^最新版本号 # 请替换为实际最新版本号

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

接下来是一个简单的示例代码,展示如何使用flutter_heatmap_calendar

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

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

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 示例数据:一个日期到数值的映射,表示该日期的热度
  final Map<DateTime, int> heatmapData = {
    DateTime(2023, 10, 1): 5,
    DateTime(2023, 10, 2): 10,
    DateTime(2023, 10, 3): 1,
    DateTime(2023, 10, 4): 8,
    DateTime(2023, 10, 5): 3,
    // ... 可以添加更多数据
  };

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Heatmap Calendar Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: HeatmapCalendar(
          // 起始日期和结束日期定义了日历的范围
          startDate: DateTime(2023, 10, 1),
          endDate: DateTime(2023, 10, 31),
          // 数据源
          data: heatmapData,
          // 自定义颜色映射,可以根据数值大小改变颜色
          colorGradient: [
            Colors.blue.withOpacity(0.2),
            Colors.blue.withOpacity(0.5),
            Colors.blue,
          ],
          // 当点击某个日期时的回调
          onDateSelected: (DateTime date, int value) {
            showDialog(
              context: context,
              builder: (context) => AlertDialog(
                title: Text('Date Info'),
                content: Text('Date: $date, Value: $value'),
                actions: <Widget>[
                  TextButton(
                    onPressed: () => Navigator.of(context).pop(),
                    child: Text('OK'),
                  ),
                ],
              ),
            );
          },
        ),
      ),
    );
  }
}

代码解释:

  1. 依赖导入:首先,确保在pubspec.yaml中添加了flutter_heatmap_calendar依赖。

  2. 数据准备:在_MyHomePageState中,我们准备了一个heatmapData的Map,它映射了日期到数值,表示该日期的热度。

  3. UI构建

    • 使用Scaffold来构建基本的页面结构。
    • 使用HeatmapCalendar组件来显示热力图日历。
    • startDateendDate定义了日历的显示范围。
    • data属性传递了我们的热度数据。
    • colorGradient属性定义了颜色渐变,根据数值大小改变颜色。
    • onDateSelected是一个回调函数,当用户点击某个日期时会触发,显示一个对话框显示该日期的信息。

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

回到顶部