Flutter日历时间线插件calendar_timeline_sbk的使用

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

Flutter日历时间线插件calendar_timeline_sbk的使用

标题

Flutter日历时间线插件calendar_timeline_sbk的使用

内容

  • 图片展示

  • 简介

    • calendar_timeline_sbk 是一个用于在水平时间线上选择日期的 Flutter 插件,适用于需要占用小屏幕空间且易于单手操作的场景。
  • 属性介绍

    • 属性 类型 描述
      initialDate DateTime 初始选中的日期
      firstDate DateTime 日历中可用的第一天
      lastDate DateTime 日历中可用的最后一天
      selectableDayPredicate SelectableDayPredicate 自定义日期选择逻辑
      onDateSelected OnDateSelected 日期选择回调
      leftMargin double 月和日列表左侧边距
      monthColor Color 月份列表元素的颜色
      dayColor Color 日列表元素的颜色
      activeDayColor Color 选中日期文本颜色
      activeBackgroundDayColor Color 选中日期背景颜色
      dotColor Color 选中日期顶部点的颜色
      locale String 获取格式化日期的本地字符串
      showYears bool 是否显示年份选择器
  • 使用示例

    • 可以查看示例文件夹以获取完整示例代码。
CalendarTimeline(
  initialDate: DateTime(2020, 4, 20),
  firstDate: DateTime(2019, 11, 115),
  lastDate: DateTime(2020, 11, 20),
  onDateSelected: (date) =&gt print(date),
  leftMargin: 20,
  monthColor: Colors.blueGrey,
  dayColor: Colors.teal[200],
  activeDayColor: Colors.white,
  activeBackgroundDayColor: Colors.redAccent[100],
  dotsColor: Color(0xFF333A47),
  selectableDayPredicate: (date) =&gt date.day != 23,
  locale: 'en_ISO',
)

示例代码

import 'package:calendar_timeline_sbk/calendar_timeline.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const HomePage(),
    );
  }
}

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

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  late DateTime _selectedDate;

  void _resetSelectedDate() {
    _selectedDate = DateTime.now().add(const Duration(days: 2));
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: const Color(0xFF333A47),
      body: SafeArea(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.all(16),
              child: Text(
                'Calendar Timeline',
                style: Theme.of(context)
                    .textTheme
                    .titleLarge!
                    .copyWith(color: Colors.tealAccent[100]),
              ),
            ),
            CalendarTimeline(
              showYears: true,
              initialDate: _selectedDate,
              firstDate: DateTime.now(),
              lastDate: DateTime.now().add(const Duration(days: 365 * 4)),
              onDateSelected: (date) => setState(() => _selectedDate = date),
              leftMargin: 20,
              monthColor: Colors.white70,
              dayColor: Colors.teal[200],
              dayNameColor: Color.fromARGB(255, 50, 59, 77),
              activeDayColor: Colors.white,
              inactiveDayNameColor:Colors.redAccent[100],
              activeBackgroundDayColor: Colors.redAccent[100],
              dotsColor: const Color(0xFF333A47),
              selectableDayPredicate: (date) => date.day != 23,
              locale: 'en',
            ),
            const SizedBox(height: 20),
            Padding(
              padding: const EdgeInsets.only(left: 16),
              child: TextButton(
                style: ButtonStyle(
                  backgroundColor: MaterialStateProperty.all(Colors.teal[200]),
                ),
                child: const Text(
                  'RESET',
                  style: TextStyle(color: Color(0xFF333A47)),
                ),
                onPressed: () => setState(() => _resetSelectedDate()),
              ),
            ),
            const SizedBox(height: 30),
            Center(
              child: Text(
                'Selected date is $_selectedDate',
                style: const TextStyle(color: Colors.white),
              ),
            )
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何使用Flutter的calendar_timeline_sbk插件的基本代码示例。这个插件允许你在Flutter应用中创建一个时间线日历视图。请确保你已经将calendar_timeline_sbk添加到你的pubspec.yaml文件中。

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

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

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

以下是一个简单的示例代码,展示如何使用calendar_timeline_sbk插件:

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

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

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

class CalendarTimelineScreen extends StatefulWidget {
  @override
  _CalendarTimelineScreenState createState() => _CalendarTimelineScreenState();
}

class _CalendarTimelineScreenState extends State<CalendarTimelineScreen> {
  List<TimelineEvent> _events = [
    TimelineEvent(
      date: DateTime(2023, 10, 1),
      title: 'Event 1',
      description: 'This is the first event.',
    ),
    TimelineEvent(
      date: DateTime(2023, 10, 5),
      title: 'Event 2',
      description: 'This is the second event.',
    ),
    TimelineEvent(
      date: DateTime(2023, 10, 10),
      title: 'Event 3',
      description: 'This is the third event.',
    ),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Calendar Timeline Demo'),
      ),
      body: Container(
        padding: EdgeInsets.all(16.0),
        child: CalendarTimeline(
          events: _events,
          startDay: DateTime(2023, 10, 1),
          endDay: DateTime(2023, 10, 31),
          onEventSelected: (TimelineEvent event) {
            // 当事件被点击时执行的回调
            showDialog(
              context: context,
              builder: (context) => AlertDialog(
                title: Text(event.title),
                content: Text(event.description),
                actions: <Widget>[
                  TextButton(
                    onPressed: () => Navigator.of(context).pop(),
                    child: Text('OK'),
                  ),
                ],
              ),
            );
          },
          // 自定义事件项的UI
          eventItemBuilder: (context, event) {
            return Container(
              decoration: BoxDecoration(
                color: Colors.blue.shade200,
                borderRadius: BorderRadius.circular(8.0),
              ),
              padding: EdgeInsets.all(8.0),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: <Widget>[
                  Text(
                    event.title,
                    style: TextStyle(color: Colors.black, fontSize: 16),
                  ),
                  SizedBox(height: 4.0),
                  Text(
                    event.date.toLocal().toString(),
                    style: TextStyle(color: Colors.grey, fontSize: 12),
                  ),
                ],
              ),
            );
          },
        ),
      ),
    );
  }
}

class TimelineEvent {
  final DateTime date;
  final String title;
  final String description;

  TimelineEvent({required this.date, required this.title, required this.description});
}

在这个示例中,我们定义了一个TimelineEvent类来表示日历中的事件,每个事件包含日期、标题和描述。CalendarTimelineScreen是我们的主屏幕,其中包含了CalendarTimeline组件。我们向CalendarTimeline组件传递了事件列表、开始日期和结束日期,并定义了一个事件被点击时的回调。此外,我们还自定义了事件项的UI。

你可以根据需要进一步自定义和扩展这个示例。希望这个示例对你有帮助!

回到顶部