Files
upstream-mirror 9ed6a80afa
Some checks failed
Main Branch CI / Test Flutter beta on ubuntu-latest (push) Has been skipped
Main Branch CI / Test Flutter stable on ubuntu-latest (push) Has been skipped
Main Branch CI / Test Flutter beta on macos-latest (push) Has been cancelled
Main Branch CI / Test Flutter stable on macos-latest (push) Has been cancelled
snapshot of https://github.com/flutter/samples.git (main, 2026-09-16; blobs > 131072B omitted)
2026-09-16 01:43:26 +05:00

82 lines
2.0 KiB
Dart

// Copyright 2024 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/cupertino.dart';
import 'package:intl/intl.dart';
import 'package:uuid/uuid.dart';
import 'color_options.dart';
import 'event_task.dart';
class Event implements Comparable<Event> {
static const _uuid = Uuid();
final id = _uuid.v4();
String title;
ColorOptions color;
IconData icon;
List<EventTask> tasks;
DateTime date;
Event({
required this.title,
ColorOptions? color,
this.icon = CupertinoIcons.add,
List<EventTask>? tasks,
DateTime? date,
}) : color = color ?? ColorOptions.random(),
tasks = tasks ?? [EventTask(text: '')],
date = date ?? DateTime.now();
Event copy() {
return Event(
title: title,
color: color,
icon: icon,
tasks: tasks,
date: date,
);
}
void updateWith(Event e) {
title = e.title;
color = e.color;
icon = e.icon;
tasks = e.tasks;
date = e.date;
}
int get remainingTaskCount => tasks.where((e) => !e.isCompleted).length;
bool get isComplete => remainingTaskCount == 0;
bool get isPast => DateTime.now().isAfter(date);
bool get isWithinSevenDays => !isPast && date.isBefore(FromNow.sevenDays);
bool get isWithinSevenToThirtyDays =>
!isPast && !isWithinSevenDays && date.isBefore(FromNow.thirtyDays);
bool get isDistant => date.isAfter(FromNow.thirtyDays);
String get dateFormated =>
'${DateFormat.yMMMd().format(date)} at '
'${DateFormat.Hm().format(date)}';
@override
int compareTo(Event other) => date.compareTo(other.date);
}
class FromNow {
static DateTime get sevenDays => DateTime.now().add(const Duration(days: 7));
static DateTime get thirtyDays =>
DateTime.now().add(const Duration(days: 30));
static DateTime roundedHours(int hours) {
final date = DateTime.now().add(Duration(hours: hours));
return DateTime(date.year, date.month, date.day, date.hour);
}
}