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

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

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

Simple Heatmap Calendar

Package Likes Popularity Points

一个强大且易于使用的Flutter热力图日历组件。

特点

  • 支持国际化(intl)
  • 提供多种配置选项
  • 在处理大时间跨度的日历时具有更好的性能

更多详情请参见example/main.dart

cd example
flutter pub get
flutter run --debug # 或者 --profile 或 --release

开始使用

添加依赖

使用 flutter pub add 命令添加依赖

flutter pub add simple_heatmap_calendar

或者在 pubspec.yaml 中添加以下行

dependencies:
  ...
  simple_heatmap_calendar: any  # 或指定版本

然后运行 flutter pub get

使用示例

以下是一个完整的示例,展示了如何在您的Flutter项目中使用simple_heatmap_calendar

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

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

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

class HomePage extends StatefulWidget {
  @override
  State<HomePage> createState() => _HomePage();
}

class _HomePage extends State<HomePage> {
  final Map<DateTime, num> textSimple = {
    DateTime(2023, 1, 30): 10,
    DateTime(2023, 1, 23): 15,
    // ... 其他日期和数值
  };

  Widget _buildSimpleHeatmapCalendar(BuildContext context) {
    var theme = Theme.of(context);
    return HeatmapCalendar<num>(
      startDate: DateTime(2023, 1, 1),
      endedDate: DateTime(2023, 12, 31),
      firstDay: DateTime.monday,
      cellSize: const Size.square(16.0),
      colorTipCellSize: const Size.square(12.0),
      colorMap: {
        10: theme.primaryColor.withOpacity(0.2),
        20: theme.primaryColor.withOpacity(0.4),
        30: theme.primaryColor.withOpacity(0.6),
        40: theme.primaryColor.withOpacity(0.8),
        50: theme.primaryColor,
      },
      selectedMap: textSimple,
      style: const HeatmapCalendarStyle.defaults(
        cellValueFontSize: 6.0,
        cellRadius: BorderRadius.all(Radius.circular(4.0)),
        weekLabelValueFontSize: 12.0,
        monthLabelFontSize: 12.0,
      ),
      layoutParameters: const HeatmapLayoutParameters.defaults(
        defaultScrollPosition: CalendarScrollPosition.start,
      ),
      switchParameters: const HeatmapSwitchParameters.defaults(
        autoScaled: true,
      ),
      cellBuilder: (context, childBuilder, columnIndex, rowIndex, date) =>
          Tooltip(
        message: date.toIso8601String(),
        waitDuration: const Duration(seconds: 1),
        child: childBuilder(context),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Simple Heatmap Calendar"),
      ),
      body: Padding(
        padding: const EdgeInsets.all(10.0),
        child: _buildSimpleHeatmapCalendar(context),
      ),
    );
  }
}

这个例子创建了一个简单的应用,其中包含一个热力图日历。您可以根据需要调整startDateendedDatecolorMap和其他参数来适应您的具体需求。


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

1 回复

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


当然,以下是如何在Flutter项目中使用simple_heatmap_calendar插件的详细步骤和代码示例。这个插件允许你创建一个带有热力图的日历视图。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加simple_heatmap_calendar依赖:

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

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

2. 导入插件

在你的Dart文件中导入插件:

import 'package:simple_heatmap_calendar/simple_heatmap_calendar.dart';

3. 创建热力图数据源

你需要准备热力图的数据源,通常是一个包含日期和对应值的列表。例如:

List<HeatmapData> getHeatmapData() {
  return [
    HeatmapData(DateTime(2023, 10, 1), 10),
    HeatmapData(DateTime(2023, 10, 5), 20),
    HeatmapData(DateTime(2023, 10, 10), 5),
    // 继续添加更多数据
  ];
}

4. 使用SimpleHeatmapCalendar

在你的Widget中使用SimpleHeatmapCalendar

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Simple Heatmap Calendar Demo'),
        ),
        body: HeatmapCalendarPage(),
      ),
    );
  }
}

class HeatmapCalendarPage extends StatefulWidget {
  @override
  _HeatmapCalendarPageState createState() => _HeatmapCalendarPageState();
}

class _HeatmapCalendarPageState extends State<HeatmapCalendarPage> {
  @override
  Widget build(BuildContext context) {
    List<HeatmapData> heatmapData = getHeatmapData();

    return SimpleHeatmapCalendar(
      heatmapData: heatmapData,
      selectedDate: DateTime.now(),
      onSelectDate: (date) {
        // 处理日期选择事件
        print("Selected date: ${date.toLocal()}");
      },
      heatmapBuilder: (context, date, value) {
        return Container(
          decoration: BoxDecoration(
            color: value == null ? Colors.transparent : Color(0xffa0c4ff).withOpacity(value / 30.0),
            borderRadius: BorderRadius.circular(4.0),
          ),
        );
      },
      todayBuilder: (context, date) {
        return Container(
          decoration: BoxDecoration(
            color: Colors.red,
            shape: BoxShape.circle,
          ),
          child: Icon(
            Icons.today,
            color: Colors.white,
            size: 16,
          ),
        );
      },
      headerBuilder: (context, date) {
        return Text(
          "${date.year}年${date.month}月",
          style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
        );
      },
    );
  }
}

List<HeatmapData> getHeatmapData() {
  return [
    HeatmapData(DateTime(2023, 10, 1), 10),
    HeatmapData(DateTime(2023, 10, 5), 20),
    HeatmapData(DateTime(2023, 10, 10), 5),
    // 继续添加更多数据
  ];
}

5. 运行应用

完成以上步骤后,运行你的Flutter应用。你应该会看到一个带有热力图的日历视图,其中高亮显示了特定日期的数据。

注意事项

  • 确保你的日期数据格式正确,并且与HeatmapData类兼容。
  • 你可以根据需要自定义heatmapBuildertodayBuilderheaderBuilder中的Widget,以实现不同的视觉效果。
  • 如果需要处理更多复杂的数据或逻辑,可以考虑将数据处理逻辑封装在单独的类或函数中。

希望这个示例能帮助你成功地在Flutter项目中使用simple_heatmap_calendar插件!

回到顶部