Flutter水平周日历展示插件horizontal_week_calendar的使用

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

Flutter水平周日历展示插件 horizontal_week_calendar 的使用

安装

在您的 pubspec.yaml 文件中添加 horizontal_week_calendar: 依赖项,然后运行 flutter pub get

dependencies:
  horizontal_week_calendar:

导入

添加以下行以导入包:

import 'package:horizontal_week_calendar/horizontal_week_calendar.dart';

如何使用

以下是一个简单的示例,展示了如何使用 HorizontalWeekCalendar 组件,并在日期更改时更新状态:

HorizontalWeekCalendar(
  onDateChange: (date) {
    setState(() {
      selectedDate = date;
    });
  },
),

示例 Demo

以下是一个完整的示例代码,展示了如何集成和使用 horizontal_week_calendar 插件:

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:horizontal_week_calendar/horizontal_week_calendar.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Packages Test',
      theme: ThemeData(
        primarySwatch: Colors.deepPurple,
      ),
      home: const HorizontalWeekCalendarPackage(),
      debugShowCheckedModeBanner: false,
    );
  }
}

class HorizontalWeekCalendarPackage extends StatefulWidget {
  const HorizontalWeekCalendarPackage({super.key});

  @override
  State<HorizontalWeekCalendarPackage> createState() => _HorizontalWeekCalendarPackageState();
}

class _HorizontalWeekCalendarPackageState extends State<HorizontalWeekCalendarPackage> {
  var selectedDate = DateTime.now();

  @override
  Widget build(BuildContext context) {
    var theme = Theme.of(context);

    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.deepPurple,
        title: const Text(
          "Horizontal Week Calendar",
          style: TextStyle(
            color: Colors.white,
          ),
        ),
      ),
      body: SafeArea(
        child: Padding(
          padding: const EdgeInsets.all(10),
          child: Column(
            children: [
              HorizontalWeekCalendar(
                minDate: DateTime(2023, 12, 31),
                maxDate: DateTime(2024, 1, 31),
                initialDate: DateTime(2024, 1, 15),
                onDateChange: (date) {
                  setState(() {
                    selectedDate = date;
                  });
                },
                showTopNavbar: false,
                monthFormat: "MMMM yyyy",
                showNavigationButtons: true,
                weekStartFrom: WeekStartFrom.Monday,
                borderRadius: BorderRadius.circular(7),
                activeBackgroundColor: Colors.deepPurple,
                activeTextColor: Colors.white,
                inactiveBackgroundColor: Colors.deepPurple.withOpacity(.3),
                inactiveTextColor: Colors.white,
                disabledTextColor: Colors.grey,
                disabledBackgroundColor: Colors.grey.withOpacity(.3),
                activeNavigatorColor: Colors.deepPurple,
                inactiveNavigatorColor: Colors.grey,
                monthColor: Colors.deepPurple,
              ),
              Expanded(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: [
                    Text(
                      "Selected Date",
                      textAlign: TextAlign.center,
                      style: theme.textTheme.titleMedium!.copyWith(
                        color: theme.primaryColor,
                      ),
                    ),
                    const SizedBox(height: 3),
                    Text(
                      DateFormat('dd MMM yyyy').format(selectedDate),
                      textAlign: TextAlign.center,
                      style: theme.textTheme.titleLarge!.copyWith(
                        color: theme.primaryColor,
                      ),
                    ),
                  ],
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

预览

以下是该插件的预览图:

Preview

支持作者

如果您觉得这个插件对您有帮助,可以通过以下链接支持作者:

Buy Me A Coffee


通过上述步骤,您可以轻松地将 horizontal_week_calendar 插件集成到您的 Flutter 应用中。希望这对您有所帮助!


更多关于Flutter水平周日历展示插件horizontal_week_calendar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter水平周日历展示插件horizontal_week_calendar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 horizontal_week_calendar 插件在 Flutter 中实现水平周日历展示的示例代码。这个插件允许你创建一个水平的、每周显示的日历视图,非常适合需要展示一周内事件的场景。

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

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

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

接下来,在你的 Flutter 应用中使用该插件。以下是一个完整的示例代码:

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  // 当前选中的日期
  DateTime? selectedDate;

  // 标记哪些日期有事件
  Map<DateTime, List<String>> events = {
    DateTime(2023, 10, 1): ['Event 1', 'Event 2'],
    DateTime(2023, 10, 3): ['Meeting'],
    DateTime(2023, 10, 5): ['Birthday Party'],
  };

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Horizontal Week Calendar Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: HorizontalWeekCalendar(
          // 初始日期
          initialDate: DateTime.now(),
          // 当前选中的日期
          selectedDate: selectedDate,
          // 选中日期变化时的回调
          onDateSelected: (date) {
            setState(() {
              selectedDate = date;
            });
          },
          // 标记有事件的日期
          markedDates: events,
          // 自定义日期单元格的样式
          dateCellStyle: (date) {
            return DateCellStyle(
              textStyle: TextStyle(color: Colors.black),
              // 如果该日期有事件,则设置背景颜色
              backgroundColor: events.containsKey(date)
                  ? Colors.lightBlue.withOpacity(0.3)
                  : Colors.transparent,
            );
          },
          // 自定义有事件单元格的顶部视图
          markedDateTopWidget: (date, events) {
            return events.length > 0
                ? Container(
                    decoration: BoxDecoration(
                      color: Colors.blue,
                      borderRadius: BorderRadius.circular(4.0),
                    ),
                    padding: EdgeInsets.all(4.0),
                    child: Text(
                      events.length.toString(),
                      style: TextStyle(color: Colors.white),
                    ),
                  )
                : null;
          },
        ),
      ),
    );
  }
}

在这个示例中:

  1. HorizontalWeekCalendar 组件用于显示水平周日历。
  2. initialDate 设置了初始显示的日期。
  3. selectedDateonDateSelected 用于处理用户选择的日期变化。
  4. markedDates 用于标记哪些日期有事件。
  5. dateCellStyle 用于自定义日期单元格的样式。
  6. markedDateTopWidget 用于自定义有事件单元格的顶部视图,比如显示事件的数量。

你可以根据需要进一步定制这个示例,比如添加更多的事件、调整样式等。希望这个示例能帮你快速上手 horizontal_week_calendar 插件的使用。

回到顶部