Flutter 定制時間簡化組件 time_planner

image

老鐵記得 轉(zhuǎn)發(fā) ,貓哥會呈現(xiàn)更多 Flutter 好文~~~~

微信群 ducafecat

b 站 https://space.bilibili.com/404904528

原文

https://medium.com/flutterdevs/explore-customizable-time-planner-in-flutter-c8108218b52c

參考

正文

[圖片上傳失敗...(image-b11ef9-1628218136905)]

從一開始巷查,F(xiàn)lutter 就是一次偉大的邂逅有序。建造迷人的用戶界面從來沒有這么快。不管你是一個業(yè)余愛好者還是一個有教養(yǎng)的開發(fā)者吮便,要無可救藥地迷戀上 Flutter 并不難笔呀。所有的軟件開發(fā)人員都明白,日期是最棘手的事情髓需。同樣许师,時間表也不是特例。

在移動應(yīng)用程序中,有很多情況下用戶需要輸入出生日期微渠、預(yù)訂機(jī)票搭幻、安排會議等等。

在這個文章逞盆,我們將探索定制的時間規(guī)劃 Flutter檀蹋。我們還將實(shí)現(xiàn)一個演示程序,并創(chuàng)建一個可定制的時間計劃使用時間規(guī)劃器包在您的 Flutter 應(yīng)用程序云芦。

https://pub.dev/packages/time_planner

Introduction

一個愉快的俯逾,簡單的利用,定制的時間規(guī)劃為 Flutter 移動舅逸,桌面和網(wǎng)絡(luò)桌肴。這是一個按時間表向客戶顯示任務(wù)的小部件。每行顯示一個小時琉历,每列顯示一天坠七,但是您可以更改該部分的標(biāo)題并顯示您需要的任何其他內(nèi)容。

image
image
image
image

這個演示視頻顯示了如何創(chuàng)建一個可定制的時間計劃在 Flutter旗笔。它展示了如何定制的時間計劃將工作彪置,使用您的 Flutter 應(yīng)用程序的時間計劃包。它顯示當(dāng)用戶點(diǎn)擊任何行和列時蝇恶,將創(chuàng)建一個隨機(jī)的時間計劃器拳魁。動畫的。它會顯示在你的設(shè)備上艘包。

屬性

時間計劃器有以下幾個屬性:

  • startHour: 這屬性是用來時間從這個開始的猛,它將從 1 開始
  • endHour: 這屬性用于此時間結(jié)束,最大值為 24
  • headers: 這屬性用于創(chuàng)建天數(shù)想虎,每天是一個 TimePlannerTitle卦尊。你應(yīng)該至少創(chuàng)造一天
  • tasks: 這屬性用于在時間計劃器上列出小部件
  • style: 這屬性用于時間計劃程序的樣式
  • currentTimeAnimation: 這屬性用于小部件加載滾動到動畫的當(dāng)前時間。默認(rèn)值為 true

Implementation

  • 第一步: 添加依賴項(xiàng)

將依賴項(xiàng)添加到 pubspec ー yaml 文件舌厨。

time_planner: ^0.0.3
  • 第二步: 導(dǎo)入
import 'package:time_planner/time_planner.dart';
  • 第三步: 在應(yīng)用程序的根目錄中運(yùn)行 flutter 軟件包岂却。
flutter packages get

代碼

你需要分別在你的代碼中實(shí)現(xiàn)它:

在 lib 文件夾中創(chuàng)建一個名為 main.dart 的新 dart 文件。

首先裙椭,我們創(chuàng)建一個名為變量任務(wù)的 TimePlannerTask 列表躏哩。

List<TimePlannerTask> tasks = [];

我們將創(chuàng)建一個 _addobject ()方法。

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!')));
}

在函數(shù)中揉燃,我們將添加 tasks.add ()方法扫尺。在內(nèi)部,我們將添加 TimePlannerTask ()小部件炊汤。在這個小部件中正驻,我們將添加顏色弊攘、日期時間、 minutesDuration 和 daysDuration姑曙。我們還將在用戶點(diǎn)擊時間計劃器時顯示 snackBar 消息襟交。

在正文中,我們將添加 TimePlanner ()小部件伤靠。在內(nèi)部捣域,我們將添加 startHour、 endHour 和 header宴合。在頭文件中焕梅,我們將添加一些 TimePlannerTitle ()。此外形纺,我們還將添加任務(wù)和樣式丘侠。

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
  ),
),

現(xiàn)在,我們將創(chuàng)建一個漂浮的 actionbutton ()逐样。

floatingActionButton: FloatingActionButton(
  onPressed: () => _addObject(context),
  tooltip: 'Add random task',
  child: Icon(Icons.add),
),

當(dāng)我們運(yùn)行應(yīng)用程序時,我們應(yīng)該得到屏幕的輸出打肝,就像下面的屏幕截圖一樣脂新。

[圖片上傳失敗...(image-ec502-1628218136905)]

Code File

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),
      ),
    );
  }
}

結(jié)語

在這篇文章中,我已經(jīng)簡單地解釋了 Customizable Time Planner 的基本結(jié)構(gòu); 您可以根據(jù)自己的選擇修改這段代碼粗梭。這是一個小規(guī)模的介紹定制時間計劃對用戶交互從我這邊争便,它的工作使用 Flutter。


? 貓哥

https://ducafecat.tech/

https://github.com/ducafecat

往期

開源

GetX Quick Start

https://github.com/ducafecat/getx_quick_start

新聞客戶端

https://github.com/ducafecat/flutter_learn_news

strapi 手冊譯文

https://getstrapi.cn

微信討論群 ducafecat

系列集合

譯文

https://ducafecat.tech/categories/%E8%AF%91%E6%96%87/

開源項(xiàng)目

https://ducafecat.tech/categories/%E5%BC%80%E6%BA%90/

Dart 編程語言基礎(chǔ)

https://space.bilibili.com/404904528/channel/detail?cid=111585

Flutter 零基礎(chǔ)入門

https://space.bilibili.com/404904528/channel/detail?cid=123470

Flutter 實(shí)戰(zhàn)從零開始 新聞客戶端

https://space.bilibili.com/404904528/channel/detail?cid=106755

Flutter 組件開發(fā)

https://space.bilibili.com/404904528/channel/detail?cid=144262

Flutter Bloc

https://space.bilibili.com/404904528/channel/detail?cid=177519

Flutter Getx4

https://space.bilibili.com/404904528/channel/detail?cid=177514

Docker Yapi

https://space.bilibili.com/404904528/channel/detail?cid=130578

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末断医,一起剝皮案震驚了整個濱河市滞乙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鉴嗤,老刑警劉巖斩启,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異醉锅,居然都是意外死亡兔簇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門硬耍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來垄琐,“玉大人,你說我怎么就攤上這事经柴±昃剑” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵坯认,是天一觀的道長翻擒。 經(jīng)常有香客問我介杆,道長,這世上最難降的妖魔是什么韭寸? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任春哨,我火速辦了婚禮,結(jié)果婚禮上恩伺,老公的妹妹穿的比我還像新娘赴背。我一直安慰自己,他們只是感情好晶渠,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布凰荚。 她就那樣靜靜地躺著,像睡著了一般褒脯。 火紅的嫁衣襯著肌膚如雪便瑟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天番川,我揣著相機(jī)與錄音到涂,去河邊找鬼。 笑死颁督,一個胖子當(dāng)著我的面吹牛践啄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沉御,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼屿讽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吠裆?” 一聲冷哼從身側(cè)響起伐谈,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎试疙,沒想到半個月后诵棵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡效斑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年非春,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缓屠。...
    茶點(diǎn)故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡奇昙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出敌完,到底是詐尸還是另有隱情储耐,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布滨溉,位于F島的核電站什湘,受9級特大地震影響长赞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闽撤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一得哆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哟旗,春花似錦贩据、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舍沙,卻和暖如春近上,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拂铡。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工壹无, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人和媳。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓格遭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親留瞳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容