前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flutter 中可定制的时间规划器

Flutter 中可定制的时间规划器

作者头像
老孟Flutter
发布2021-09-03 15:59:57
1.6K0
发布2021-09-03 15:59:57
举报
文章被收录于专栏:FlutterFlutter

「老孟导读」:今天发现一个特别好的插件-时间规划器,这个插件里面有很多我们可以学习的知识点,比如很多人问的表头不动,内容滑动,还有类似股票似的列表滑动效果,这个插件都实现了,下面就看看这个插件吧。 原文链接:https://medium.com/flutterdevs/explore-customizable-time-planner-in-flutter-c8108218b52c ❞

Flutter 从一开始就是一场伟大的邂逅。构建引人入胜的 UI 从未如此快速。无论您是业余爱好者还是有教养的开发人员,都不难对 Flutter 产生无可救药的迷恋。所有软件开发人员都明白日期是最棘手的事情。同样,时间表也不是特例。

在移动应用程序中,在很多情况下,用户需要输入出生日期、订票、安排会议等日期。

在在这个博客中,我们将**探索 Flutter 中可定制的时间规划器。**我们还将在「Flutter」 应用程序中使用「time_planner」包实现一个演示程序并创建一个可定制的时间规划器。

介绍

一个令人愉快、易于使用且可自定义的时间规划器,适用于 Flutter 移动、桌面和 Web。这是一个小部件,用于按计划向客户显示分配。每行显示一个小时,每列显示一天,但您可以更改该部分的标题并显示您需要的任何其他内容。

此演示视频展示了如何在 Flutter 中创建可自定义的时间规划器。它展示了可定制的时间规划器将如何在您的「Flutter」 应用程序中使用「time_planner」包工作。它显示当用户点击任何行和列时,将创建一个随机时间规划器。

属性

时间规划器的一些属性是:

  • 「startHour」用来计时从这个开始,它会从1开始。
  • 「endHour」用来计时结束在这个时间,最大值为24。
  • 「headers」用于从这里创建日期,每一天都是一个 TimePlannerTitle。您应该至少创建一天。
  • 「tasks」用于列出时间规划器上的小部件。
  • 「style」用于时间规划器的Style。
  • 「currentTimeAnimation」用于小部件加载滚动到带有动画的当前时间。默认为真。

使用

添加依赖

代码语言:javascript
复制
time_planner: ^0.0.3

导入

代码语言:javascript
复制
import 'package:time_planner/time_planner.dart';

执行 「flutter packages get」 命令

创建一个 「main.dart」 文件,创建一个 「TimePlannerTask」 集合,

代码语言:javascript
复制
List<TimePlannerTask> tasks = [];

创建 「_addObject」方法,方法内添加颜色并添加 「setState」 方法,在 「setState」 方法内,给集合 tasks 添加 「TimePlannerTask」 组件,在这个组件中,添加颜色、日期时间、minutesDuration 和 daysDuration。当用户点击时间规划器时,我们还将显示snackBar消息。

代码语言:javascript
复制
void _addObject(BuildContext context) {
  List<Color?> colors = [
    Colors.purple,
    Colors.blue,
    Colors.green,
    Colors.orange,
    Colors.cyan
  ];

  setState(() {
    tasks.add(
      TimePlannerTask(
        color: colors[Random().nextInt(colors.length)],
        dateTime: TimePlannerDateTime(
            day: Random().nextInt(10),
            hour: Random().nextInt(14) + 6,
            minutes: Random().nextInt(60)),
        minutesDuration: Random().nextInt(90) + 30,
        daysDuration: Random().nextInt(4) + 1,
        onTap: () {
          ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('You click on time planner object')));
        },
        child: Text(
          'this is a demo',
          style: TextStyle(color: Colors.grey[350], fontSize: 12),
        ),
      ),
    );
  });

  ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('Random task added to time planner!')));
}

下面我们将添加 「TimePlanner」 组件,设置其 startHour, endHour, 和 headers,然后添加 「TimePlannerTitle」 组件,

代码语言:javascript
复制
TimePlanner(
  startHour: 2,
  endHour: 24,
  headers: [
    TimePlannerTitle(
      date: "7/20/2021",
      title: "tuesday",
    ),
    TimePlannerTitle(
      date: "7/21/2021",
      title: "wednesday",
    ),
    TimePlannerTitle(
      date: "7/22/2021",
      title: "thursday",
    ),
    TimePlannerTitle(
      date: "7/23/2021",
      title: "friday",
    ),
    TimePlannerTitle(
      date: "7/24/2021",
      title: "saturday",
    ),
    TimePlannerTitle(
      date: "7/25/2021",
      title: "sunday",
    ),
    TimePlannerTitle(
      date: "7/26/2021",
      title: "monday",
    ),
    TimePlannerTitle(
      date: "7/27/2021",
      title: "tuesday",
    ),
    TimePlannerTitle(
      date: "7/28/2021",
      title: "wednesday",
    ),
    TimePlannerTitle(
      date: "7/29/2021",
      title: "thursday",
    ),
    TimePlannerTitle(
      date: "7/30/2021",
      title: "friday",
    ),
    TimePlannerTitle(
      date: "7/31/2021",
      title: "Saturday",
    ),
  ],
  tasks: tasks,
  style: TimePlannerStyle(
      showScrollBar: true
  ),
),

我们接下来创建 「FloatingActionButton」 按钮,

代码语言:javascript
复制
floatingActionButton: FloatingActionButton(
  onPressed: () => _addObject(context),
  tooltip: 'Add random task',
  child: Icon(Icons.add),
),

运行,效果如下:

完整代码

代码语言:javascript
复制
import 'dart:math';

import 'package:flutter/material.dart';
import 'package:flutter_customizable_time_plan/splash_screen.dart';
import 'package:time_planner/time_planner.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData.dark(),
      home: Splash()
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<TimePlannerTask> tasks = [];

  void _addObject(BuildContext context) {
    List<Color?> colors = [
      Colors.purple,
      Colors.blue,
      Colors.green,
      Colors.orange,
      Colors.cyan
    ];

    setState(() {
      tasks.add(
        TimePlannerTask(
          color: colors[Random().nextInt(colors.length)],
          dateTime: TimePlannerDateTime(
              day: Random().nextInt(10),
              hour: Random().nextInt(14) + 6,
              minutes: Random().nextInt(60)),
          minutesDuration: Random().nextInt(90) + 30,
          daysDuration: Random().nextInt(4) + 1,
          onTap: () {
            ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text('You click on time planner object')));
          },
          child: Text(
            'this is a demo',
            style: TextStyle(color: Colors.grey[350], fontSize: 12),
          ),
        ),
      );
    });

    ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Random task added to time planner!')));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        automaticallyImplyLeading: false,
        title: Text(widget.title),
        centerTitle: true,
      ),
      body: Center(
        child: TimePlanner(
          startHour: 2,
          endHour: 24,
          headers: [
            TimePlannerTitle(
              date: "7/20/2021",
              title: "tuesday",
            ),
            TimePlannerTitle(
              date: "7/21/2021",
              title: "wednesday",
            ),
            TimePlannerTitle(
              date: "7/22/2021",
              title: "thursday",
            ),
            TimePlannerTitle(
              date: "7/23/2021",
              title: "friday",
            ),
            TimePlannerTitle(
              date: "7/24/2021",
              title: "saturday",
            ),
            TimePlannerTitle(
              date: "7/25/2021",
              title: "sunday",
            ),
            TimePlannerTitle(
              date: "7/26/2021",
              title: "monday",
            ),
            TimePlannerTitle(
              date: "7/27/2021",
              title: "tuesday",
            ),
            TimePlannerTitle(
              date: "7/28/2021",
              title: "wednesday",
            ),
            TimePlannerTitle(
              date: "7/29/2021",
              title: "thursday",
            ),
            TimePlannerTitle(
              date: "7/30/2021",
              title: "friday",
            ),
            TimePlannerTitle(
              date: "7/31/2021",
              title: "Saturday",
            ),
          ],
          tasks: tasks,
          style: TimePlannerStyle(
              showScrollBar: true
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => _addObject(context),
        tooltip: 'Add random task',
        child: Icon(Icons.add),
      ),
    );
  }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老孟Flutter 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 属性
  • 使用
  • 完整代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档