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

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

Flutter Heatmap Calendar提供了两种热力图展示方式:HeatMapHeatMapCalendar。这两种方式都受到GitHub贡献图表的启发。

开始使用

添加依赖

在你的项目中添加 flutter_heatmap_calendar 依赖:

flutter pub add flutter_heatmap_calendar

或者,在你的 pubspec.yaml 文件中添加以下行:

dependencies:
  flutter_heatmap_calendar: ^1.0.6

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

导入库

在你的 Dart 文件中导入 flutter_heatmap_calendar 库:

import 'package:flutter_heatmap_calendar/flutter_heatmap_calendar.dart';

属性

HeatMap

以下是 HeatMap 组件的属性:

属性名 类型 默认值 描述
startDate DateTime? 一年前的日期 热力图的开始日期。
endDate DateTime? 当天 热力图的结束日期。
datasets Map<DateTime, int>? null 要显示的数据集。
colorsets Map<int, Color> 必须提供 颜色集合,用于阈值的关键值。至少需要一个颜色。
defaultColor Color? #F8F9FA 每个方块的默认颜色。
textColor Color? #8A8A8A 每个文本的颜色。
colorMode ColorMode ColorMode.opacity 颜色模式,可以是 ColorMode.opacityColorMode.color
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&lt;Widget?&gt;? null 显示在颜色提示左右两侧的控件。
colorTipCount int? 7 颜色提示的长度。
colorTipSize double? 10 颜色提示的大小。

HeatMapCalendar

以下是 HeatMapCalendar 组件的属性:

属性名 类型 默认值 描述
initDate DateTime? 当天 初始化的年/月值。
datasets Map<DateTime, int>? null 要显示的数据集。
colorsets Map<int, Color> 必须提供 颜色集合,用于阈值的关键值。至少需要一个颜色。
defaultColor Color? #F8F9FA 每个方块的默认颜色。
textColor Color? #8A8A8A 每个文本的颜色。
colorMode ColorMode ColorMode.opacity 颜色模式,可以是 ColorMode.opacityColorMode.color
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&lt;Widget?&gt;? null 显示在颜色提示左右两侧的控件。
colorTipCount int? 7 颜色提示的长度。
colorTipSize double? 10 颜色提示的大小。

示例

使用HeatMap

import 'package:flutter_heatmap_calendar/flutter_heatmap_calendar.dart';

// 示例代码
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_heatmap_calendar/flutter_heatmap_calendar.dart';

// 示例代码
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())));
  },
);

完整示例Demo

import 'package:flutter/material.dart';
import 'pages/heatmap_calendar_example.dart';
import 'pages/heatmap_example.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Heatmap Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      initialRoute: '/',
      routes: {
        '/': (context) => const MyHomePage(),
        '/heatmap_calendar': (context) => const HeatMapCalendarExample(),
        '/heatmap': (context) => const HeatMapExample(),
      },
    );
  }
}

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

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Flutter heatmap example')),
      body: SafeArea(
        child: ListView(
          children: [
            ListTile(
              title: const Text('Heatmap calendar'),
              onTap: () => Navigator.of(context).pushNamed('/heatmap_calendar'),
            ),
            ListTile(
              title: const Text('Heatmap'),
              onTap: () => Navigator.of(context).pushNamed('/heatmap'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_heatmap_calendar_fr插件来创建一个热力图日历的示例代码。这个插件允许你以热力图的形式展示日历数据,非常适合用于显示某些日期上的活动密集程度,比如用户访问量、事件数量等。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_heatmap_calendar_fr: ^最新版本号  # 请替换为最新的版本号

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

接下来,在你的Dart文件中,你可以按照以下步骤来使用这个插件:

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  // 模拟一些数据
  final Map<DateTime, int> data = {
    DateTime(2023, 10, 1): 5,
    DateTime(2023, 10, 5): 15,
    DateTime(2023, 10, 10): 25,
    DateTime(2023, 10, 15): 35,
    DateTime(2023, 10, 20): 10,
    // 可以添加更多数据点
  };

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Heatmap Calendar Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: HeatmapCalendar(
          // 设置开始和结束日期
          startDate: DateTime(2023, 10, 1),
          endDate: DateTime(2023, 10, 31),
          // 数据源
          data: data,
          // 设置热力图的颜色梯度
          colorGradient: [
            Colors.blue.withOpacity(0.2),
            Colors.blue.withOpacity(0.4),
            Colors.blue,
            Colors.red,
          ],
          // 其他可选参数,如选择日期改变时的回调等
          onDateSelected: (DateTime date, int value) {
            print('Selected date: $date, value: $value');
          },
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们首先定义了一些模拟数据,其中键是日期,值是对应日期的数值(例如访问量)。
  2. HeatmapCalendar组件中,我们设置了开始日期和结束日期,以及数据源。
  3. colorGradient参数定义了热力图的颜色梯度,你可以根据需要调整这些颜色。
  4. onDateSelected是一个可选的回调,当用户点击某个日期时,会触发这个回调,并传递被点击的日期和对应的数值。

确保你的Flutter环境已经设置好,并且所有依赖都已正确安装,然后运行这个示例,你应该能够看到一个热力图日历,其中不同日期的颜色深浅反映了数据的多少。

回到顶部